Repository: commons-dbcp
Updated Branches:
  refs/heads/master 6641cc08d -> 8408716a7


Fix DBCP-457

When using a BasicDataSource, pass changes related to the handling of
abandoned connections to the underlying pool so that the pool
configuration may be updated dynamically.

Project: http://git-wip-us.apache.org/repos/asf/commons-dbcp/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-dbcp/commit/8408716a
Tree: http://git-wip-us.apache.org/repos/asf/commons-dbcp/tree/8408716a
Diff: http://git-wip-us.apache.org/repos/asf/commons-dbcp/diff/8408716a

Branch: refs/heads/master
Commit: 8408716a7f2909eab4618ac2ab6e9a1565a993d0
Parents: 6641cc0
Author: Mark Thomas <[email protected]>
Authored: Thu Nov 3 09:38:09 2016 +0000
Committer: Mark Thomas <[email protected]>
Committed: Thu Nov 3 09:38:09 2016 +0000

----------------------------------------------------------------------
 src/changes/changes.xml                         |  5 ++++
 .../apache/commons/dbcp2/BasicDataSource.java   | 24 ++++++++++++++++++++
 .../commons/dbcp2/TestBasicDataSource.java      | 21 +++++++++++++++++
 3 files changed, 50 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/8408716a/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c1b5d68..0fc7a0e 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -122,6 +122,11 @@ The <action> type attribute can be add,update,fix,remove.
          Make it simpler to extend BasicDataSource to allow sub-classes to
          provide custom GenericObjectPool implementations.
        </action>
+       <action dev="markt" type="fix" issue="DBCP-457">
+         When using a BasicDataSource, pass changes related to the handling of
+         abandoned connections to the underlying pool so that the pool
+         configuration may be updated dynamically. 
+       </action>
     </release>
     <release version="2.1.1" date="6 Aug 2015" description=
 "This is a patch release, including bug fixes only.">

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/8408716a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java 
b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
index 250dfd9..12314c8 100644
--- a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
+++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
@@ -1667,6 +1667,10 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
         }
         abandonedConfig.setRemoveAbandonedOnMaintenance(
                 removeAbandonedOnMaintenance);
+        GenericObjectPool<?> gop = this.connectionPool;
+        if (gop != null) {
+            gop.setAbandonedConfig(abandonedConfig);
+        }
     }
 
     /**
@@ -1699,6 +1703,10 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
             abandonedConfig = new AbandonedConfig();
         }
         abandonedConfig.setRemoveAbandonedOnBorrow(removeAbandonedOnBorrow);
+        GenericObjectPool<?> gop = this.connectionPool;
+        if (gop != null) {
+            gop.setAbandonedConfig(abandonedConfig);
+        }
     }
 
     /**
@@ -1744,6 +1752,10 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
             abandonedConfig = new AbandonedConfig();
         }
         abandonedConfig.setRemoveAbandonedTimeout(removeAbandonedTimeout);
+        GenericObjectPool<?> gop = this.connectionPool;
+        if (gop != null) {
+            gop.setAbandonedConfig(abandonedConfig);
+        }
     }
 
     /**
@@ -1772,6 +1784,10 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
             abandonedConfig = new AbandonedConfig();
         }
         abandonedConfig.setLogAbandoned(logAbandoned);
+        GenericObjectPool<?> gop = this.connectionPool;
+        if (gop != null) {
+            gop.setAbandonedConfig(abandonedConfig);
+        }
     }
 
     /**
@@ -1796,6 +1812,10 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
             abandonedConfig = new AbandonedConfig();
         }
         abandonedConfig.setLogWriter(logWriter);
+        GenericObjectPool<?> gop = this.connectionPool;
+        if (gop != null) {
+            gop.setAbandonedConfig(abandonedConfig);
+        }
     }
 
     /**
@@ -1829,6 +1849,10 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
             abandonedConfig = new AbandonedConfig();
         }
         abandonedConfig.setUseUsageTracking(usageTracking);
+        GenericObjectPool<?> gop = this.connectionPool;
+        if (gop != null) {
+            gop.setAbandonedConfig(abandonedConfig);
+        }
     }
 
     // --------------------------------------------------------- Public Methods

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/8408716a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java 
b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
index 3f1667d..db99049 100644
--- a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
+++ b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
@@ -35,6 +35,7 @@ import javax.sql.DataSource;
 
 import org.apache.commons.logging.LogFactory;
 import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -795,6 +796,26 @@ public class TestBasicDataSource extends 
TestConnectionPool {
         assertTrue(pcf.getDisconnectionSqlCodes().contains("XXX"));
         assertEquals(1, pcf.getDisconnectionSqlCodes().size());
     }
+
+    /**
+     * JIRA: DBCP-457
+     * Verify that changes made to abandoned config are passed to the 
underlying
+     * pool.
+     */
+    @Test
+    public void testMutateAbandonedConfig() throws Exception {
+        final Properties properties = new Properties();
+        properties.put("initialSize", "1");
+        properties.put("driverClassName", 
"org.apache.commons.dbcp2.TesterDriver");
+        properties.put("url", "jdbc:apache:commons:testdriver");
+        properties.put("username", "foo");
+        properties.put("password", "bar");
+        final BasicDataSource ds = 
BasicDataSourceFactory.createDataSource(properties);
+        boolean original = ds.getConnectionPool().getLogAbandoned();
+        ds.setLogAbandoned(!original);
+        Assert.assertNotEquals(Boolean.valueOf(original),
+                Boolean.valueOf(ds.getConnectionPool().getLogAbandoned()));
+    }
 }
 
 /**

Reply via email to