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