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();
+    }
 }


Reply via email to