From a9867d015d44103fb1f95f322b0a164b06eb4790 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 28 Nov 2011 17:06:03 +0800 Subject: [PATCH] refactor connection reset --- .../com/alibaba/druid/pool/ConnectionHolder.java | 2 ++ .../com/alibaba/druid/pool/DruidDataSource.java | 16 ++++++++-------- .../alibaba/druid/pool/PoolableConnection.java | 1 - 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/ConnectionHolder.java b/src/main/java/com/alibaba/druid/pool/ConnectionHolder.java index b788d3e1fe..950b2e4522 100644 --- a/src/main/java/com/alibaba/druid/pool/ConnectionHolder.java +++ b/src/main/java/com/alibaba/druid/pool/ConnectionHolder.java @@ -146,6 +146,8 @@ public final class ConnectionHolder { JdbcUtils.close(stmt); } statementTrace.clear(); + + conn.clearWarnings(); } public String toString() { diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 7a980e87a4..8b66137deb 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -508,7 +508,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat assert holder != null; if (isRemoveAbandoned()) { - activeConnections.remove(pooledConnection); + ActiveConnectionTraceInfo oldInfo = activeConnections.remove(pooledConnection); + if (oldInfo == null) { + LOG.warn("remove abandonded failed."); + } } try { @@ -527,16 +530,13 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat final boolean isAutoCommit = conn.getAutoCommit(); final boolean isReadOnly = conn.isReadOnly(); - // 第二步,检查是否需要回滚 + // check need to rollback? if ((!isAutoCommit) && (!isReadOnly)) { pooledConnection.rollback(); } - - // 第三步,清楚警告信息,重设autoCommit为true - conn.clearWarnings(); - if (!isAutoCommit) { - conn.setAutoCommit(true); - } + + // reset holder, restore default settings, clear warnings + holder.reset(); if (isTestOnReturn()) { boolean validate = testConnectionInternal(conn); diff --git a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java index adc91e1161..6ce6c97072 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java @@ -131,7 +131,6 @@ public class PoolableConnection implements PooledConnection, Connection { listener.connectionClosed(new ConnectionEvent(this)); } - holder.reset(); holder.getDataSource().recycle(this); this.holder = null;