From 907063f33e3aa28e39d617a3ff86f9ec28aa8405 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 28 Feb 2013 22:20:38 +0800 Subject: [PATCH 1/2] add error detail info --- .../alibaba/druid/pool/DruidPooledConnection.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java b/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java index 4557d28468..f3d89dfd78 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java +++ b/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java @@ -1012,8 +1012,16 @@ public class DruidPooledConnection extends PoolableWrapper implements javax.sql. } public void checkState() throws SQLException { - if (holder == null || closed || disable) { - throw new SQLException("connection is closed"); + if (holder == null) { + throw new SQLException("connection holder is null"); + } + + if (closed) { + throw new SQLException("connection closed"); + } + + if (disable) { + throw new SQLException("connection disabled"); } } From 676b1a0ef3539bc113eb0f9f1ddb114a9f4f63e0 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 28 Feb 2013 23:28:32 +0800 Subject: [PATCH 2/2] improve error info --- .../alibaba/druid/pool/DruidDataSource.java | 2 +- .../druid/pool/DruidPooledConnection.java | 27 ++++++++++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 4cda1552a8..b287fc917e 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -875,7 +875,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } } this.discardConnection(holder.getConnection()); - pooledConnection.disable(); + pooledConnection.disable(t); } throw sqlEx; diff --git a/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java b/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java index f3d89dfd78..e99ecb205d 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java +++ b/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java @@ -53,24 +53,26 @@ import com.alibaba.druid.support.logging.LogFactory; */ public class DruidPooledConnection extends PoolableWrapper implements javax.sql.PooledConnection, Connection { - private final static Log LOG = LogFactory.getLog(DruidPooledConnection.class); + private final static Log LOG = LogFactory.getLog(DruidPooledConnection.class); protected Connection conn; protected volatile DruidConnectionHolder holder; protected TransactionInfo transactionInfo; private final boolean dupCloseLogEnable; - private volatile boolean traceEnable = false; - private boolean disable = false; - private boolean closed = false; + private volatile boolean traceEnable = false; + private boolean disable = false; + private boolean closed = false; private final Thread ownerThread; private long connectedTimeNano; - private volatile boolean running = false; + private volatile boolean running = false; - private volatile boolean abandoned = false; + private volatile boolean abandoned = false; private StackTraceElement[] connectStackTrace; + private Throwable disableError = null; + public DruidPooledConnection(DruidConnectionHolder holder){ super(holder.getConnection()); @@ -148,7 +150,7 @@ public class DruidPooledConnection extends PoolableWrapper implements javax.sql. if (rawStatement.getConnection().isClosed()) { return; } - + LOG.error("clear parameter error", ex); } } @@ -179,10 +181,15 @@ public class DruidPooledConnection extends PoolableWrapper implements javax.sql. } public void disable() { + disable(null); + } + + public void disable(Throwable error) { this.traceEnable = false; this.holder = null; this.transactionInfo = null; this.disable = true; + this.disableError = error; } public boolean isDisable() { @@ -1015,13 +1022,13 @@ public class DruidPooledConnection extends PoolableWrapper implements javax.sql. if (holder == null) { throw new SQLException("connection holder is null"); } - + if (closed) { throw new SQLException("connection closed"); } - + if (disable) { - throw new SQLException("connection disabled"); + throw new SQLException("connection disabled", disableError); } }