114 lines
3.1 KiB
Java
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();
|
|
}
|
|
}
|
|
}
|
|
}
|