From 2d72077a14e6569ee53b33e08724a6e8fdd176fc Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 19 Sep 2011 07:29:35 +0000 Subject: [PATCH] =?UTF-8?q?=E9=95=BF=E4=BA=8B=E5=8A=A1=E7=9B=91=E6=8E=A7?= 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@862 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../com/alibaba/druid/pool/PoolableConnection.java | 14 ++++++-------- .../com/alibaba/druid/pool/PoolableStatement.java | 2 ++ .../druid/bvt/pool/basic/ConnectionTest4.java | 5 +++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java index 52045044cd..76b1b17d51 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java @@ -583,7 +583,7 @@ public class PoolableConnection implements PooledConnection, Connection { } catch (SQLException ex) { handleException(ex); } finally { - handleEndTransaction(); + handleEndTransaction(dataSource); } } @@ -593,11 +593,11 @@ public class PoolableConnection implements PooledConnection, Connection { @Override public void rollback() throws SQLException { + checkOpen(); + if (transactionInfo == null) { return; } - - checkOpen(); DruidAbstractDataSource dataSource = holder.getDataSource(); dataSource.incrementRollbackCount(); @@ -607,7 +607,7 @@ public class PoolableConnection implements PooledConnection, Connection { } catch (SQLException ex) { handleException(ex); } finally { - handleEndTransaction(); + handleEndTransaction(dataSource); } } @@ -630,14 +630,12 @@ public class PoolableConnection implements PooledConnection, Connection { } catch (SQLException ex) { handleException(ex); } finally { - handleEndTransaction(); + handleEndTransaction(dataSource); } } - private void handleEndTransaction() { + private void handleEndTransaction(DruidAbstractDataSource dataSource) { if (transactionInfo != null) { - DruidAbstractDataSource dataSource = holder.getDataSource(); - long currentTimeMillis = System.currentTimeMillis(); transactionInfo.setEndTimeMillis(currentTimeMillis); diff --git a/src/main/java/com/alibaba/druid/pool/PoolableStatement.java b/src/main/java/com/alibaba/druid/pool/PoolableStatement.java index c8a0baef55..30eed98a9d 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableStatement.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableStatement.java @@ -249,6 +249,8 @@ public class PoolableStatement extends PoolableWrapper implements Statement { @Override public final boolean execute(String sql) throws SQLException { checkOpen(); + + transactionRecord(sql); try { return stmt.execute(sql); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/basic/ConnectionTest4.java b/src/test/java/com/alibaba/druid/bvt/pool/basic/ConnectionTest4.java index a987a8b845..4b3f28a227 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/basic/ConnectionTest4.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/basic/ConnectionTest4.java @@ -5,6 +5,7 @@ import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Statement; import junit.framework.Assert; import junit.framework.TestCase; @@ -497,6 +498,10 @@ public class ConnectionTest4 extends TestCase { public void test_rollback() throws Exception { PoolableConnection conn = dataSource.getConnection().unwrap(PoolableConnection.class); + conn.setAutoCommit(false); + Statement stmt = conn.createStatement(); + stmt.execute("SELECT 1"); + conn.getConnection().close(); { SQLException error = null;