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