Author: davsclaus Date: Wed Apr 18 07:43:22 2012 New Revision: 1327403 URL: http://svn.apache.org/viewvc?rev=1327403&view=rev Log: CAMEL-5187: Improved Camel JMX working with WebSphere. Thanks to Christian Ohr for the patch.
Added: camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/management/DefaultManagementAgentMockTest.java - copied unchanged from r1327402, camel/trunk/camel-core/src/test/java/org/apache/camel/management/DefaultManagementAgentMockTest.java Modified: camel/branches/camel-2.9.x/ (props changed) camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Merged /camel/trunk:r1327402 Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java?rev=1327403&r1=1327402&r2=1327403&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java Wed Apr 18 07:43:22 2012 @@ -22,9 +22,9 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; -import java.util.HashSet; +import java.util.HashMap; import java.util.List; -import java.util.Set; +import java.util.Map; import java.util.concurrent.ExecutorService; import javax.management.JMException; import javax.management.MBeanServer; @@ -60,7 +60,8 @@ public class DefaultManagementAgent exte private CamelContext camelContext; private ExecutorService executorService; private MBeanServer server; - private final Set<ObjectName> mbeansRegistered = new HashSet<ObjectName>(); + // need a name -> actual name mapping as some servers changes the names (suc as WebSphere) + private final Map<ObjectName, ObjectName> mbeansRegistered = new HashMap<ObjectName, ObjectName>(); private JMXConnectorServer cs; private Integer registryPort; @@ -240,15 +241,17 @@ public class DefaultManagementAgent exte } public void unregister(ObjectName name) throws JMException { - if (server.isRegistered(name)) { - server.unregisterMBean(name); + if (isRegistered(name)) { + server.unregisterMBean(mbeansRegistered.get(name)); LOG.debug("Unregistered MBean with objectname: {}", name); } mbeansRegistered.remove(name); } public boolean isRegistered(ObjectName name) { - return server.isRegistered(name); + return (mbeansRegistered.containsKey(name) + && server.isRegistered(mbeansRegistered.get(name))) + || server.isRegistered(name); } protected void doStart() throws Exception { @@ -280,11 +283,10 @@ public class DefaultManagementAgent exte } // Using the array to hold the busMBeans to avoid the CurrentModificationException - ObjectName[] mBeans = mbeansRegistered.toArray(new ObjectName[mbeansRegistered.size()]); + ObjectName[] mBeans = mbeansRegistered.keySet().toArray(new ObjectName[mbeansRegistered.size()]); int caught = 0; for (ObjectName name : mBeans) { try { - mbeansRegistered.remove(name); unregister(name); } catch (Exception e) { LOG.info("Exception unregistering MBean with name " + name, e); @@ -302,7 +304,7 @@ public class DefaultManagementAgent exte throws JMException { // have we already registered the bean, there can be shared instances in the camel routes - boolean exists = server.isRegistered(name); + boolean exists = isRegistered(name); if (exists) { if (forceRegistration) { LOG.info("ForceRegistration enabled, unregistering existing MBean"); @@ -324,7 +326,7 @@ public class DefaultManagementAgent exte ObjectName registeredName = instance.getObjectName(); LOG.debug("Registered MBean with objectname: {}", registeredName); - mbeansRegistered.add(registeredName); + mbeansRegistered.put(name, registeredName); } }