Author: psteitz
Date: Sun Jul 26 15:41:28 2015
New Revision: 1692727
URL: http://svn.apache.org/r1692727
Log:
Ensured that logical connection is closed when pooled connections are validated
with null validation query. JIRA: DBCP-442.
Modified:
commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java
commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/datasources/TestCPDSConnectionFactory.java
commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/datasources/TestKeyedCPDSConnectionFactory.java
Modified:
commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java
URL:
http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java?rev=1692727&r1=1692726&r2=1692727&view=diff
==============================================================================
---
commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java
(original)
+++
commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java
Sun Jul 26 15:41:28 2015
@@ -172,18 +172,23 @@ class CPDSConnectionFactory
}
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/datasources/TestCPDSConnectionFactory.java
URL:
http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/datasources/TestCPDSConnectionFactory.java?rev=1692727&r1=1692726&r2=1692727&view=diff
==============================================================================
---
commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/datasources/TestCPDSConnectionFactory.java
(original)
+++
commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/datasources/TestCPDSConnectionFactory.java
Sun Jul 26 15:41:28 2015
@@ -143,5 +143,20 @@ public class TestCPDSConnectionFactory {
factory.getPool().clear();
assertEquals(0, pool.getNumIdle());
}
+
+ /**
+ * JIRA: DBCP-442
+ */
+ @Test
+ public void testNullValidationQuery() throws Exception {
+ CPDSConnectionFactory factory =
+ new CPDSConnectionFactory(cpds, null, -1, false, "username",
"password");
+ GenericObjectPool<PooledConnectionAndInfo> pool = new
GenericObjectPool<>(factory);
+ factory.setPool(pool);
+ pool.setTestOnBorrow(true);
+ PooledConnection pcon = pool.borrowObject().getPooledConnection();
+ Connection con = pcon.getConnection();
+ con.close();
+ }
}
Modified:
commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/datasources/TestKeyedCPDSConnectionFactory.java
URL:
http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/datasources/TestKeyedCPDSConnectionFactory.java?rev=1692727&r1=1692726&r2=1692727&view=diff
==============================================================================
---
commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/datasources/TestKeyedCPDSConnectionFactory.java
(original)
+++
commons/proper/dbcp/trunk/src/test/java/org/apache/commons/dbcp2/datasources/TestKeyedCPDSConnectionFactory.java
Sun Jul 26 15:41:28 2015
@@ -151,5 +151,20 @@ public class TestKeyedCPDSConnectionFact
factory.getPool().clear();
assertEquals(0, pool.getNumIdle(key));
}
-
+
+ /**
+ * JIRA: DBCP-442
+ */
+ @Test
+ public void testNullValidationQuery() throws Exception {
+ UserPassKey key = new UserPassKey("username", "password");
+ KeyedCPDSConnectionFactory factory =
+ new KeyedCPDSConnectionFactory(cpds, null, -1, false);
+ GenericKeyedObjectPool<UserPassKey, PooledConnectionAndInfo> pool =
new GenericKeyedObjectPool<>(factory);
+ factory.setPool(pool);
+ pool.setTestOnBorrow(true);
+ PooledConnection pcon = pool.borrowObject(key).getPooledConnection();
+ Connection con = pcon.getConnection();
+ con.close();
+ }
}