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(); } } } }