You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by da...@apache.org on 2012/09/08 12:56:14 UTC

svn commit: r1382277 - /activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/ManagementContext.java

Author: davsclaus
Date: Sat Sep  8 10:56:14 2012
New Revision: 1382277

URL: http://svn.apache.org/viewvc?rev=1382277&view=rev
Log:
AMQ-3807: Support WebSphere JMX which regsiter mbeans using custom name. Thansk to Christian Ohr for the patch.

Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/ManagementContext.java

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/ManagementContext.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/ManagementContext.java?rev=1382277&r1=1382276&r2=1382277&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/ManagementContext.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/ManagementContext.java Sat Sep  8 10:56:14 2012
@@ -35,7 +35,7 @@ import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
 import java.rmi.server.RMIServerSocketFactory;
 import java.util.*;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
@@ -68,7 +68,7 @@ public class ManagementContext implement
     private ObjectName namingServiceObjectName;
     private Registry registry;
     private ServerSocket registrySocket;
-    private final List<ObjectName> registeredMBeanNames = new CopyOnWriteArrayList<ObjectName>();
+    private final Map<ObjectName, ObjectName> registeredMBeanNames = new ConcurrentHashMap<ObjectName, ObjectName>();
     private boolean allowRemoteAddressInMBeanNames = true;
     private String brokerName;
 
@@ -130,14 +130,19 @@ public class ManagementContext implement
     public void stop() throws Exception {
         if (started.compareAndSet(true, false)) {
             MBeanServer mbeanServer = getMBeanServer();
+
+            // unregister the mbeans we have registered
             if (mbeanServer != null) {
-                for (Iterator<ObjectName> iter = registeredMBeanNames.iterator(); iter.hasNext();) {
-                    ObjectName name = iter.next();
-                    LOG.debug("Unregistering MBean {}", name);
-                    mbeanServer.unregisterMBean(name);
+                for (Map.Entry<ObjectName, ObjectName> entry : registeredMBeanNames.entrySet()) {
+                    ObjectName actualName = entry.getValue();
+                    if (actualName != null && beanServer.isRegistered(actualName)) {
+                        LOG.debug("Unregistering MBean {}", actualName);
+                        mbeanServer.unregisterMBean(actualName);
+                    }
                 }
             }
             registeredMBeanNames.clear();
+
             JMXConnectorServer server = connectorServer;
             connectorServer = null;
             if (server != null) {
@@ -347,11 +352,17 @@ public class ManagementContext implement
     
     public ObjectInstance registerMBean(Object bean, ObjectName name) throws Exception{
         ObjectInstance result = getMBeanServer().registerMBean(bean, name);
-        this.registeredMBeanNames.add(name);
+        this.registeredMBeanNames.put(name, result.getObjectName());
         return result;
     }
     
-    public Set<ObjectName>  queryNames(ObjectName name, QueryExp query) throws Exception{
+    public Set<ObjectName> queryNames(ObjectName name, QueryExp query) throws Exception{
+    	if (name != null) {
+    		ObjectName actualName = this.registeredMBeanNames.get(name);
+    		if (actualName != null) {
+    			return getMBeanServer().queryNames(actualName, query);
+    		}
+        }
         return getMBeanServer().queryNames(name, query);
     }
     
@@ -366,8 +377,10 @@ public class ManagementContext implement
      * @throws JMException
      */
     public void unregisterMBean(ObjectName name) throws JMException {
-        if (beanServer != null && beanServer.isRegistered(name) && this.registeredMBeanNames.remove(name)) {
-            beanServer.unregisterMBean(name);
+        ObjectName actualName = this.registeredMBeanNames.get(name);
+        if (beanServer != null && actualName != null && beanServer.isRegistered(actualName) && this.registeredMBeanNames.remove(name) != null) {
+            LOG.debug("Unregistering MBean {}", actualName);
+            beanServer.unregisterMBean(actualName);
         }
     }