Repository: commons-dbcp Updated Branches: refs/heads/master 44d58a53c -> d8e760bd1
Redo JMX internals to use a wrapper that acts as a NOOP is JMX is not available. Dang it, thought my local build passed. But no. Now OK. Project: http://git-wip-us.apache.org/repos/asf/commons-dbcp/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-dbcp/commit/d8e760bd Tree: http://git-wip-us.apache.org/repos/asf/commons-dbcp/tree/d8e760bd Diff: http://git-wip-us.apache.org/repos/asf/commons-dbcp/diff/d8e760bd Branch: refs/heads/master Commit: d8e760bd13b8a5c9ddd2029f2ddec3fbadc280a2 Parents: 44d58a5 Author: Gary Gregory <ggreg...@apache.org> Authored: Tue Jan 16 16:34:55 2018 -0700 Committer: Gary Gregory <ggreg...@apache.org> Committed: Tue Jan 16 16:34:55 2018 -0700 ---------------------------------------------------------------------- .../apache/commons/dbcp2/BasicDataSource.java | 8 +++---- .../apache/commons/dbcp2/ObjectNameWrapper.java | 12 +++++++---- .../commons/dbcp2/TestBasicDataSource.java | 22 +++++++++++++------- 3 files changed, 26 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/d8e760bd/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 669d0f5..0c96528 100644 --- a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java +++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java @@ -2292,7 +2292,7 @@ public class BasicDataSource implements DataSource, BasicDataSourceMXBean, MBean final ConnectionFactory driverConnectionFactory) throws SQLException { PoolableConnectionFactory connectionFactory = null; try { - connectionFactory = new PoolableConnectionFactory(driverConnectionFactory, registeredJmxObjectName.unwrap()); + connectionFactory = new PoolableConnectionFactory(driverConnectionFactory, ObjectNameWrapper.unwrap(registeredJmxObjectName)); connectionFactory.setValidationQuery(validationQuery); connectionFactory.setValidationQueryTimeout(validationQueryTimeout); connectionFactory.setConnectionInitSql(connectionInitSqls); @@ -2358,7 +2358,7 @@ public class BasicDataSource implements DataSource, BasicDataSourceMXBean, MBean return; } try { - ObjectNameWrapper.wrap(requestedName).registerMBean(); + ObjectNameWrapper.wrap(requestedName).registerMBean(this); } catch (MalformedObjectNameException e) { log.warn("The requested JMX name [" + requestedName + "] was not valid and will be ignored."); } @@ -2377,7 +2377,7 @@ public class BasicDataSource implements DataSource, BasicDataSourceMXBean, MBean if (registeredJmxObjectName == null) { registeredJmxObjectName = ObjectNameWrapper.wrap(objectName); } - return registeredJmxObjectName.unwrap(); + return ObjectNameWrapper.unwrap(registeredJmxObjectName); } @Override @@ -2406,7 +2406,7 @@ public class BasicDataSource implements DataSource, BasicDataSourceMXBean, MBean } protected ObjectName getRegisteredJmxName() { - return registeredJmxObjectName.unwrap(); + return ObjectNameWrapper.unwrap(registeredJmxObjectName); } /** http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/d8e760bd/src/main/java/org/apache/commons/dbcp2/ObjectNameWrapper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/ObjectNameWrapper.java b/src/main/java/org/apache/commons/dbcp2/ObjectNameWrapper.java index b7b1248..01d9a18 100644 --- a/src/main/java/org/apache/commons/dbcp2/ObjectNameWrapper.java +++ b/src/main/java/org/apache/commons/dbcp2/ObjectNameWrapper.java @@ -47,6 +47,10 @@ class ObjectNameWrapper { } } + public static ObjectName unwrap(ObjectNameWrapper wrapper) { + return wrapper == null ? null : wrapper.unwrap(); + } + public static ObjectNameWrapper wrap(final ObjectName objectName) { return new ObjectNameWrapper(objectName); } @@ -61,19 +65,19 @@ class ObjectNameWrapper { this.objectName = objectName; } - public void registerMBean() { - if (MBEAN_SERVER == null) { + public void registerMBean(Object object) { + if (MBEAN_SERVER == null || objectName == null) { return; } try { - MBEAN_SERVER.registerMBean(this, objectName); + MBEAN_SERVER.registerMBean(object, objectName); } catch (LinkageError | Exception e) { log.warn("Failed to complete JMX registration for " + objectName, e); } } public void unregisterMBean() { - if (MBEAN_SERVER == null) { + if (MBEAN_SERVER == null || objectName == null) { return; } if (MBEAN_SERVER.isRegistered(objectName)) { http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/d8e760bd/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 570dd9d..6d04495 100644 --- a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java +++ b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java @@ -682,12 +682,12 @@ public class TestBasicDataSource extends TestConnectionPool { StackMessageLog.clear(); ds.setMaxConnLifetimeMillis(100); ds.setLogExpiredConnections(false); - final Connection conn = ds.getConnection(); - assertEquals(1, ds.getNumActive()); - Thread.sleep(500); - conn.close(); + try (final Connection conn = ds.getConnection()) { + assertEquals(1, ds.getNumActive()); + Thread.sleep(500); + } assertEquals(0, ds.getNumIdle()); - assertTrue(StackMessageLog.isEmpty()); + assertTrue(StackMessageLog.getAll().toString(), StackMessageLog.isEmpty()); } finally { StackMessageLog.clear(); StackMessageLog.unLock(); @@ -784,11 +784,17 @@ public class TestBasicDataSource extends TestConnectionPool { @Test public void testInstanceNotFoundExceptionLogSuppressed() throws Exception { final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); - try (Connection c = ds.getConnection()) {} - mbs.unregisterMBean(new ObjectName(ds.getJmxName())); + try (Connection c = ds.getConnection()) { + // nothing + } + final ObjectName objectName = new ObjectName(ds.getJmxName()); + if (mbs.isRegistered(objectName)) { + mbs.unregisterMBean(objectName); + } StackMessageLog.clear(); ds.close(); - assertThat(StackMessageLog.popMessage(), CoreMatchers.not(CoreMatchers.containsString("InstanceNotFoundException"))); + assertThat(StackMessageLog.popMessage(), + CoreMatchers.not(CoreMatchers.containsString("InstanceNotFoundException"))); assertNull(ds.getRegisteredJmxName()); }