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() {