Author: rmannibucau
Date: Fri Aug  3 12:55:14 2012
New Revision: 1368925

URL: http://svn.apache.org/viewvc?rev=1368925&view=rev
Log:
better JMX name for Tomcat datasources in openejb subdomain

Modified:
    
openejb/trunk/openejb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java

Modified: 
openejb/trunk/openejb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java?rev=1368925&r1=1368924&r2=1368925&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
 Fri Aug  3 12:55:14 2012
@@ -1,6 +1,9 @@
 package org.apache.tomee.jdbc;
 
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
 import org.apache.openejb.monitoring.LocalMBeanServer;
+import org.apache.openejb.monitoring.ObjectNameBuilder;
 import org.apache.openejb.resource.jdbc.pool.PoolDataSourceCreator;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
@@ -8,7 +11,6 @@ import org.apache.tomcat.jdbc.pool.Conne
 import org.apache.tomcat.jdbc.pool.PoolConfiguration;
 import org.apache.tomcat.jdbc.pool.PoolProperties;
 
-import javax.management.MBeanServer;
 import javax.management.ObjectName;
 import javax.sql.DataSource;
 import java.lang.reflect.InvocationHandler;
@@ -87,31 +89,58 @@ public class TomEEDataSourceCreator exte
     @Override
     public void doDestroy(final DataSource object) throws Throwable {
         org.apache.tomcat.jdbc.pool.DataSource ds = 
(org.apache.tomcat.jdbc.pool.DataSource) object;
+        if (ds instanceof TomEEDataSource) {
+            ((TomEEDataSource) ds).internalJMXUnregister();
+        }
         ds.close(true);
-        ds.postDeregister();
     }
 
     public static class TomEEDataSource extends 
org.apache.tomcat.jdbc.pool.DataSource {
+        private static final Log LOGGER = 
LogFactory.getLog(TomEEDataSource.class);
+
+        private ObjectName internalOn = null;
+
         public TomEEDataSource(final PoolConfiguration properties, final 
ConnectionPool pool, final String name) {
             super(properties);
             this.pool = pool;
-            try {
-                super.preRegister(LocalMBeanServer.get(), new 
ObjectName("openejb", "name", name));
-            } catch (Exception ignored) {
-                // ignored
-            }
+            initJmx(name);
         }
 
         public TomEEDataSource(final PoolConfiguration poolConfiguration, 
final String name) {
             super(poolConfiguration);
             try { // just to force the pool to be created and be able to 
register the mbean
                 createPool();
-                super.preRegister(LocalMBeanServer.get(), new 
ObjectName("openejb", "name", name));
+                initJmx(name);
             } catch (Throwable ignored) {
                 // no-op
             }
         }
 
+        private void initJmx(final String name) {
+            try {
+                internalOn = ObjectNameBuilder.uniqueName("datasources", name, 
this);
+                try {
+                    if (pool.getJmxPool()!=null) {
+                        
LocalMBeanServer.get().registerMBean(pool.getJmxPool(), internalOn);
+                    }
+                } catch (Exception e) {
+                    LOGGER.error("Unable to register JDBC pool with JMX", e);
+                }
+            } catch (Exception ignored) {
+                // no-op
+            }
+        }
+
+        public void internalJMXUnregister() {
+            if (internalOn != null) {
+                try {
+                    LocalMBeanServer.get().unregisterMBean(internalOn);
+                } catch (Exception e) {
+                    LOGGER.error("Unable to unregister JDBC pool with JMX", e);
+                }
+            }
+        }
+
         @Override
         public Connection getConnection() throws SQLException {
             final Connection connection = super.getConnection();


Reply via email to