Repository: commons-dbcp
Updated Branches:
  refs/heads/master e45d9f8ea -> c96a7ad5a


[DBCP-482] Avoid javax.management.InstanceNotFoundException on shutdown
when a bean is not registered.

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

Branch: refs/heads/master
Commit: c96a7ad5ab1d8c3ee722e5895f57f54e02e39ec8
Parents: e45d9f8
Author: Gary Gregory <[email protected]>
Authored: Tue Jan 16 13:23:11 2018 -0700
Committer: Gary Gregory <[email protected]>
Committed: Tue Jan 16 13:23:11 2018 -0700

----------------------------------------------------------------------
 src/changes/changes.xml                             |  5 +++++
 .../org/apache/commons/dbcp2/BasicDataSource.java   | 13 +++++++------
 .../apache/commons/dbcp2/TestBasicDataSource.java   | 16 ++++++++++++++++
 3 files changed, 28 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/c96a7ad5/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index e108251..15234ac 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -60,6 +60,11 @@ The <action> type attribute can be add,update,fix,remove.
      -->
 
   <body>
+    <release version="2.2.1" date="2018-MM-DD" description="This is a bug fix 
release.">
+      <action dev="ggregory" type="fix" issue="DBCP-482" due-to="Dennis Lloyd, 
Gary Gregory">
+        Avoid javax.management.InstanceNotFoundException on shutdown when a 
bean is not registered.
+      </action>
+    </release>
     <release version="2.2.0" date="2017-12-DD" description="This is a minor 
release, including bug fixes and enhancements.">
       <action dev="ggregory" type="fix" issue="DBCP-481" due-to="Gary Gregory">
         Update Apache Commons Pool from 2.4.2 to 2.5.0.

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/c96a7ad5/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 79db3b6..d533fd7 100644
--- a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
+++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
@@ -1937,13 +1937,14 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
     public synchronized void close() throws SQLException {
         if (registeredJmxName != null) {
             final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-            try {
-                mbs.unregisterMBean(registeredJmxName);
-            } catch (final JMException e) {
-                log.warn("Failed to unregister the JMX name: " + 
registeredJmxName, e);
-            } finally {
-                registeredJmxName = null;
+            if (mbs.isRegistered(registeredJmxName)) {
+                try {
+                    mbs.unregisterMBean(registeredJmxName);
+                } catch (final JMException e) {
+                    log.warn("Failed to unregister the JMX name: " + 
registeredJmxName, e);
+                }
             }
+            registeredJmxName = null;
         }
         closed = true;
         final GenericObjectPool<?> oldpool = connectionPool;

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/c96a7ad5/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 1631a7b..570dd9d 100644
--- a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
+++ b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
@@ -34,6 +34,7 @@ import javax.management.ObjectName;
 import javax.sql.DataSource;
 
 import org.apache.commons.logging.LogFactory;
+import org.hamcrest.CoreMatchers;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -777,6 +778,21 @@ public class TestBasicDataSource extends 
TestConnectionPool {
     }
 
     /**
+     * JIRA: DBCP-482
+     * Verify warning not logged if JMX MBean unregistered before close() 
called.
+     */
+    @Test
+    public void testInstanceNotFoundExceptionLogSuppressed() throws Exception {
+        final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+        try (Connection c = ds.getConnection()) {}
+        mbs.unregisterMBean(new ObjectName(ds.getJmxName()));
+        StackMessageLog.clear();
+        ds.close();
+        assertThat(StackMessageLog.popMessage(), 
CoreMatchers.not(CoreMatchers.containsString("InstanceNotFoundException")));
+        assertNull(ds.getRegisteredJmxName());
+    }
+
+    /**
      * JIRA: DBCP-437
      * Verify that BasicDataSource sets disconnect codes properties.
      * Functionality is verified in pcf tests.

Reply via email to