Author: psteitz Date: Sun Jul 26 01:23:38 2015 New Revision: 1692677 URL: http://svn.apache.org/r1692677 Log: Fixed logical connection leak in KeyedCPDSConnectionFactory.
JIRA: DBCP-442 Modified: commons/proper/dbcp/trunk/src/changes/changes.xml commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.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=1692677&r1=1692676&r2=1692677&view=diff ============================================================================== --- commons/proper/dbcp/trunk/src/changes/changes.xml (original) +++ commons/proper/dbcp/trunk/src/changes/changes.xml Sun Jul 26 01:23:38 2015 @@ -61,6 +61,10 @@ The <action> type attribute can be add,u <body> <release version="2.1.1" date="TBD" description="Bug fixes."> + <action issue="DBCP-442" dev="psteitz" type="fix"> + SharedPoolDataSource getConnection fails when testOnBorrow is set with + a null validation query. + </action> <action issue="DBCP-438" dev="psteitz" type="fix" due-to="Raihan Kibria"> Nested connections in a transaction (local) throws null pointer. </action> Modified: commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java?rev=1692677&r1=1692676&r2=1692677&view=diff ============================================================================== --- commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java (original) +++ commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java Sun Jul 26 01:23:38 2015 @@ -172,18 +172,23 @@ class KeyedCPDSConnectionFactory } boolean valid = false; PooledConnection pconn = p.getObject().getPooledConnection(); + Connection conn = null; + validatingSet.add(pconn); if (null == _validationQuery) { int timeout = _validationQueryTimeout; if (timeout < 0) { timeout = 0; } try { - valid = pconn.getConnection().isValid(timeout); + conn = pconn.getConnection(); + valid = conn.isValid(timeout); } catch (SQLException e) { valid = false; + } finally { + Utils.closeQuietly(conn); + validatingSet.remove(pconn); } } else { - Connection conn = null; Statement stmt = null; ResultSet rset = null; // logical Connection from the PooledConnection must be closed Modified: commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java?rev=1692677&r1=1692676&r2=1692677&view=diff ============================================================================== --- commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java (original) +++ commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java Sun Jul 26 01:23:38 2015 @@ -162,6 +162,19 @@ public class TestDriverAdapterCPDS { pcds.getPooledConnection("foo", "bar").close(); assertEquals("bar", pcds.getConnectionProperties().getProperty("password")); } + + /** + * JIRA: DBCP-442 + */ + @Test + public void testNullValidationQuery() throws Exception { + final SharedPoolDataSource spds = new SharedPoolDataSource(); + spds.setConnectionPoolDataSource(pcds); + spds.setDefaultTestOnBorrow(true); + final Connection c = spds.getConnection(); + c.close(); + spds.close(); + } // https://issues.apache.org/jira/browse/DBCP-376 @Test