diff --git a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java index 07ccd0a..9787a9a 100644 --- a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java +++ b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java @@ -8,6 +8,9 @@ import com.sunyard.sge.pool.ThreadBasedConnectPool; import org.apache.logging.log4j.Logger; import racal.sunyard.main.SydApi4j; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + public class SydApiPool extends ThreadBasedConnectPool { static { SydApi.SYD_SetLogConfig("./logs/", 0); @@ -56,25 +59,28 @@ public class SydApiPool extends ThreadBasedConnectPool { // 保活接口 protected boolean check(SydApi4Database o) { - if (null==o) { - return false; - } +// if (null == o) { +// return false; +// } + Lock l = new ReentrantLock(); + l.lock(); SydApi4j[] hsms = o.getHsms(); - for (SydApi4j hsm : hsms) { - if ( null != hsm ) { + l.unlock(); + boolean ifBoolean = false; + int length = hsms.length; + for (int i = 0; i < length; i++) { + if (null != hsms[i]) { try { - o.SYD_SM3_Hash_ShortData( new byte[8] ); - return true; - - }catch ( Exception e) { + o.SYD_SM3_Hash_ShortData(new byte[8]); + ifBoolean = true; + } catch (Exception e) { // 忽略 - return false; + hsms[i] = null; } } } - return false; + return ifBoolean; } - // 释放 protected void free(SydApi o) { if ( null != o ) { diff --git a/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java b/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java index 9f0d53f..08c07f6 100644 --- a/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java +++ b/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java @@ -30,7 +30,6 @@ public class ThreadBasedConnectPool { private PoolConfig config; public ThreadBasedConnectPool(PoolConfig config) { - Lock l = new ReentrantLock(); this.config = config; threadPool.scheduleAtFixedRate(new Runnable() { @Override @@ -65,13 +64,11 @@ public class ThreadBasedConnectPool { boolean checkPass = false; try { - l.lock(); checkPass = check(entry.getValue().getObjectForCheck()); } catch (Exception e) { checkPass = false; } finally { - l.unlock(); } if ( ! checkPass) {