You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ps...@apache.org on 2014/05/03 02:12:48 UTC

svn commit: r1592132 - in /commons/proper/dbcp/trunk/src: changes/ main/java/org/apache/commons/dbcp2/managed/ test/java/org/apache/commons/dbcp2/managed/

Author: psteitz
Date: Sat May  3 00:12:47 2014
New Revision: 1592132

URL: http://svn.apache.org/r1592132
Log:
Fixed connection leak when managed connections are closed during transactions. JIRA: DBCP-417.

Modified:
    commons/proper/dbcp/trunk/src/changes/changes.xml
    commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/managed/ManagedConnection.java
    commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/managed/TestManagedDataSource.java
    commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/managed/TestManagedDataSourceInTx.java

Modified: commons/proper/dbcp/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/changes/changes.xml?rev=1592132&r1=1592131&r2=1592132&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/changes/changes.xml (original)
+++ commons/proper/dbcp/trunk/src/changes/changes.xml Sat May  3 00:12:47 2014
@@ -73,6 +73,9 @@ The <action> type attribute can be add,u
         Added check in PoolingDataSource constructor to ensure that the connection factory
         and pool are properly linked.
       </action>
+      <action issue="DBCP-417" dev="psteitz" type="fix">
+        Fixed connection leak when managed connections are closed during transactions.
+      </action>
     </release>
     <release version="2.0" date="3 March 2014" description=
 "This release includes new features as well as bug fixes and enhancements.

Modified: commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/managed/ManagedConnection.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/managed/ManagedConnection.java?rev=1592132&r1=1592131&r2=1592132&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/managed/ManagedConnection.java (original)
+++ commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/managed/ManagedConnection.java Sat May  3 00:12:47 2014
@@ -196,7 +196,7 @@ public class ManagedConnection<C extends
                 setDelegate(null);
 
                 if (!delegate.isClosed()) {
-                    super.close();
+                    delegate.close();
                 }
             } catch (SQLException ignored) {
                 // Not a whole lot we can do here as connection is closed

Modified: commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/managed/TestManagedDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/managed/TestManagedDataSource.java?rev=1592132&r1=1592131&r2=1592132&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/managed/TestManagedDataSource.java (original)
+++ commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/managed/TestManagedDataSource.java Sat May  3 00:12:47 2014
@@ -114,7 +114,7 @@ public class TestManagedDataSource exten
     }
 
     /**
-     * Verify that conection sharing is working (or not working) as expected.
+     * Verify that connection sharing is working (or not working) as expected.
      */
     public void testSharedConnection() throws Exception {
         DelegatingConnection<?> connectionA = (DelegatingConnection<?>) newConnection();
@@ -128,7 +128,18 @@ public class TestManagedDataSource exten
         connectionA.close();
         connectionB.close();
     }
+    
+    public void testConnectionReturnOnCommit() throws Exception {
+        transactionManager.begin();
+        DelegatingConnection<?> connectionA = (DelegatingConnection<?>) newConnection();
+        connectionA.close();
+        transactionManager.commit();
+        assertEquals(1, pool.getBorrowedCount());
+        assertEquals(1, pool.getReturnedCount());
+        assertEquals(0, pool.getNumActive());
+    }
 
+    
     public void testManagedConnectionEqualsSameDelegateNoUnderlyingAccess() throws Exception {
         // Get a maximal set of connections from the pool
         Connection[] c = new Connection[getMaxTotal()];

Modified: commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/managed/TestManagedDataSourceInTx.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/managed/TestManagedDataSourceInTx.java?rev=1592132&r1=1592131&r2=1592132&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/managed/TestManagedDataSourceInTx.java (original)
+++ commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/managed/TestManagedDataSourceInTx.java Sat May  3 00:12:47 2014
@@ -344,5 +344,10 @@ public class TestManagedDataSourceInTx e
 
         resultSet.getStatement().getConnection().close();
     }
+    
+    public void testConnectionReturnOnCommit() throws Exception {
+         // override with no-op test
+         return;
+    }
 
 }