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/08/31 16:01:39 UTC

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

Author: davsclaus
Date: Fri Aug 31 14:01:39 2012
New Revision: 1379454

URL: http://svn.apache.org/viewvc?rev=1379454&view=rev
Log:
AMQ-4008: Fixed issue with re-deploying AMQ broker in same JVM such as Apache Tomcat, with the jmx connector not working on re-deployment. Now it does. Improved logging and better message to end user about the JMX issue.

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=1379454&r1=1379453&r2=1379454&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 Fri Aug 31 14:01:39 2012
@@ -114,8 +114,8 @@ public class ManagementContext implement
                                 LOG.info("JMX consoles can connect to " + server.getAddress());
                             }
                         } catch (IOException e) {
-                            LOG.warn("Failed to start jmx connector: " + e.getMessage());
-                            LOG.debug("Reason for failed jms connector start", e);
+                            LOG.warn("Failed to start jmx connector: " + e.getMessage() + ". Will restart management to re-create jmx connector, trying to remedy this issue.");
+                            LOG.debug("Reason for failed jmx connector start", e);
                         } finally {
                             MDC.remove("activemq.broker");
                         }
@@ -133,9 +133,8 @@ public class ManagementContext implement
             if (mbeanServer != null) {
                 for (Iterator<ObjectName> iter = registeredMBeanNames.iterator(); iter.hasNext();) {
                     ObjectName name = iter.next();
-                    
-                        mbeanServer.unregisterMBean(name);
-                    
+                    LOG.debug("Unregistering MBean {}", name);
+                    mbeanServer.unregisterMBean(name);
                 }
             }
             registeredMBeanNames.clear();
@@ -144,15 +143,24 @@ public class ManagementContext implement
             if (server != null) {
                 try {
                 	if (!connectorStarting.get()) {
-                		server.stop();
+                        LOG.debug("Stopping jmx connector");
+                        server.stop();
                 	}
                 } catch (IOException e) {
                     LOG.warn("Failed to stop jmx connector: " + e.getMessage());
                 }
+                // stop naming service mbean
                 try {
-                    getMBeanServer().invoke(namingServiceObjectName, "stop", null, null);
+                    if (getMBeanServer().isRegistered(namingServiceObjectName)) {
+                        LOG.debug("Stopping MBean {}", namingServiceObjectName);
+                        getMBeanServer().invoke(namingServiceObjectName, "stop", null, null);
+                        LOG.debug("Unregistering MBean {}", namingServiceObjectName);
+                        getMBeanServer().unregisterMBean(namingServiceObjectName);
+                    }
                 } catch (Throwable ignore) {
+                    LOG.warn("Error stopping and unregsitering mbean " + namingServiceObjectName + " due " + ignore.getMessage());
                 }
+                namingServiceObjectName = null;
             }
             if (locallyCreateMBeanServer && beanServer != null) {
                 // check to see if the factory knows about this server
@@ -162,7 +170,7 @@ public class ManagementContext implement
                 }
             }
             beanServer = null;
-            if(registrySocket!=null) {
+            if (registrySocket!=null) {
                 try {
                     registrySocket.close();
                 } catch (IOException e) {
@@ -170,6 +178,9 @@ public class ManagementContext implement
                 registrySocket = null;
             }
         }
+
+        // clear reference to aid GC
+        registry = null;
     }
 
     /**
@@ -475,9 +486,8 @@ public class ManagementContext implement
             mbeanServer.setAttribute(namingServiceObjectName, attr);
         } catch(ClassNotFoundException e) {
             LOG.debug("Probably not using JRE 1.4: " + e.getLocalizedMessage());
-        }
-        catch (Throwable e) {
-            LOG.debug("Failed to create local registry", e);
+        } catch (Throwable e) {
+            LOG.debug("Failed to create local registry. This exception will be ignored.", e);
         }
         // Create the JMXConnectorServer
         String rmiServer = "";
@@ -489,7 +499,8 @@ public class ManagementContext implement
         String serviceURL = "service:jmx:rmi://" + rmiServer + "/jndi/rmi://" +getConnectorHost()+":" + connectorPort + connectorPath;
         JMXServiceURL url = new JMXServiceURL(serviceURL);
         connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(url, environment, mbeanServer);
-        
+
+        LOG.debug("Created JMXConnectorServer {}", connectorServer);
     }
 
     public String getConnectorPath() {