You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2018/01/16 23:34:59 UTC

commons-dbcp git commit: 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.

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 <gg...@apache.org>
Authored: Tue Jan 16 16:34:55 2018 -0700
Committer: Gary Gregory <gg...@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());
     }