sydapi-java-sge-database/src/main/java/com/sunyard/sge/database/SydApiBuilder.java
2025-08-11 11:26:01 +08:00

114 lines
3.1 KiB
Java

package com.sunyard.sge.database;
import com.sunyard.SydApiException;
import com.sunyard.sge.database.pool.HsmLinkInfo;
import com.sunyard.sge.database.pool.SydApiPool;
import com.sunyard.sge.plus.ConnectHandlerManager;
import com.sunyard.sge.pool.CommWorker;
import com.sunyard.sge.pool.PoolConfig;
import com.sunyard.sge.pool.ThreadBasedConnectPool;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
public class SydApiBuilder {
private SydApiPool pool;
private CommWorker longLinkWorks;
public SydApiBuilder(
String[] pcIpList,
int[] iPortList,
int iConnectTimeOut,
int iDealTimeOut
) {
this( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut, new PoolConfig() );
}
public SydApiBuilder(
String[] pcIpList,
int[] iPortList,
int iConnectTimeOut,
int iDealTimeOut,
PoolConfig config
) {
org.slf4j.Logger log = LoggerFactory.getLogger(ThreadBasedConnectPool.class);
if (log.isDebugEnabled()) {
log.debug("创建链接");
log.debug("SydApiBuilder构造方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList),Arrays.toString(iPortList),iConnectTimeOut,iDealTimeOut);
log.debug("pool config {}", config);
}
if ( Env.isLinux() ) {
// 同时初始化 jna 下 c 的链接
int ret = ConnectHandlerManager.init(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
if ( 0 != ret ) {
throw new SydApiException(-1);
}
}
HsmLinkInfo[] linkInfo = HsmLinkInfo.mutiHsmLinkInfo(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
this.pool = new SydApiPool(config, linkInfo);
longLinkWorks = new CommWorker();
// warmUp( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut );
}
public CommWorker getLongLinkWorks() {
return longLinkWorks;
}
/**
* 获取池内对象
* @return 池内对象
*/
public SydApi get(){
return pool.get();
}
/**
* 升级
* 修改了原实现
* @return 包装对象
*/
public SydApi build() {
return new SydApiLongLinkWrap( this );
}
private void warmUp(String[] pcIpList,
int[] iPortList,
int iConnectTimeOut,
int iDealTimeOut){
SydApi api = null;
try {
api = new SydApi4Database();
api.SYD_Short_Connect_Ex( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut );
try {
api.SYD_SM3_Hash_ShortData( new byte[8] );
}catch ( Exception e) {
// 忽略
}
try {
api.SYD_SM4_ShortData( 0 , new byte[16], Consts.ECB_ENC );
}catch ( Exception e) {
// 忽略
}
} catch ( Exception e ){
// 忽略预热失败
} finally {
if ( null != api ) {
api.SYD_Disconnect_Ex();
}
}
}
}