From cea7997c6a0cb5cdd2740a4cb338619c3e066e6e Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 4 Sep 2011 15:11:46 +0000 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@627 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/DruidDataSource.java | 42 +++++++++---------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 5801f61968..c9919345ec 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -257,16 +257,14 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } Connection realConnection = poolalbeConnection.getConnection(); - JdbcUtils.close(realConnection); - this.decrementActiveCountWithLock(); + discardConnection(realConnection); continue; } poolalbeConnection.getConnectionHolder().setLastCheckTimeMillis(System.currentTimeMillis()); } else { Connection realConnection = poolalbeConnection.getConnection(); if (realConnection.isClosed()) { - JdbcUtils.close(realConnection); - this.decrementActiveCountWithLock(); + discardConnection(realConnection); continue; } @@ -280,8 +278,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat LOG.debug("skip not validate connection."); } - JdbcUtils.close(realConnection); - this.decrementActiveCountWithLock(); + discardConnection(realConnection); continue; } poolalbeConnection.getConnectionHolder().setLastCheckTimeMillis(System.currentTimeMillis()); @@ -300,6 +297,22 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } } + private void discardConnection(Connection realConnection) throws SQLException { + JdbcUtils.close(realConnection); + + try { + lock.lockInterruptibly(); + } catch (InterruptedException e) { + throw new SQLException("interrupt", e); + } + + try { + activeCount--; + } finally { + lock.unlock(); + } + } + private PoolableConnection getConnectionInternal() throws SQLException { PoolableConnection poolalbeConnection; @@ -361,8 +374,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat // exceptionSorter.isExceptionFatal if (exceptionSoter != null && exceptionSoter.isExceptionFatal(sqlEx)) { - decrementActiveCountWithLock(); - JdbcUtils.close(holder.getConnection()); + this.discardConnection(holder.getConnection()); pooledConnection.disable(); } @@ -490,20 +502,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat createConnectionCount++; } - void decrementActiveCountWithLock() throws SQLException { - try { - lock.lockInterruptibly(); - } catch (InterruptedException e) { - throw new SQLException("interrupt", e); - } - - try { - activeCount--; - } finally { - lock.unlock(); - } - } - void putLast(ConnectionHolder e) { if (e == null) { throw new NullPointerException();