From 0e88a2aff341715d476cca6160bed12e59c53c9b Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 4 Sep 2011 15:26:19 +0000 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81close=E6=97=B6=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E7=AD=89=E5=BE=85=E7=BA=BF=E7=A8=8B?= 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@628 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/DruidDataSource.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index c9919345ec..8c7f913709 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -493,6 +493,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } poolingCount = 0; instances.remove(this); + + enable = false; + notEmpty.signalAll(); } finally { lock.unlock(); } @@ -502,10 +505,14 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat createConnectionCount++; } - void putLast(ConnectionHolder e) { + void putLast(ConnectionHolder e) throws SQLException { if (e == null) { throw new NullPointerException(); } + + if (!enable) { + discardConnection(e.getConnection()); + } e.setLastActiveTimeMillis(System.currentTimeMillis()); connections[poolingCount++] = e; @@ -513,11 +520,15 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat notEmpty.signal(); } - ConnectionHolder takeLast() throws InterruptedException { + ConnectionHolder takeLast() throws InterruptedException, SQLException { try { while (poolingCount == 0) { empty.signal(); // send signal to CreateThread create connection notEmpty.await(); // signal by recycle or creator + + if (!enable) { + throw new SQLException("dataSource disabled"); + } } } catch (InterruptedException ie) { notEmpty.signal(); // propagate to non-interrupted thread @@ -531,7 +542,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat return last; } - ConnectionHolder pollLast(long timeout, TimeUnit unit) throws InterruptedException { + ConnectionHolder pollLast(long timeout, TimeUnit unit) throws InterruptedException, SQLException { long estimate = unit.toNanos(timeout); for (;;) { @@ -544,6 +555,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat try { estimate = notEmpty.awaitNanos(estimate); // signal by recycle or creator + + if (!enable) { + throw new SQLException("dataSource disabled"); + } } catch (InterruptedException ie) { notEmpty.signal(); // propagate to non-interrupted thread throw ie;