diff options
| author | Alex Rudyy <orudyy@apache.org> | 2014-10-08 12:30:22 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2014-10-08 12:30:22 +0000 |
| commit | 30eda2c517fe78eca4ccb42a5cc44a44af3ef7f7 (patch) | |
| tree | 660ecd38ffc01accc2bafccde4cc0b1c2ba20120 /qpid/java | |
| parent | 8202ba3c4da8592062e70789389ff527dc58d8df (diff) | |
| download | qpid-python-30eda2c517fe78eca4ccb42a5cc44a44af3ef7f7.tar.gz | |
QPID-6137: Enhance JMXManagementPlugin implementation and add extra logging when InstanceAlreadyExistsException is thrown from JMX on creation of VH MBean
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1630081 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
| -rw-r--r-- | qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java index 85916bf5f2..6c962c2901 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java @@ -29,6 +29,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; +import javax.management.InstanceAlreadyExistsException; import javax.management.JMException; import org.apache.log4j.Logger; @@ -340,8 +341,8 @@ public class JMXManagementPluginImpl mbean = new UserManagementMBean((PasswordCredentialManagingAuthenticationProvider<?>) object, _objectRegistry); registerMBean(object, _pluginMBeanProvider, mbean); } - createAdditionalMBeansFromProvidersIfNecessary(object, _objectRegistry); } + createAdditionalMBeansFromProvidersIfNecessary(object, _objectRegistry); } } return mbean; @@ -351,10 +352,27 @@ public class JMXManagementPluginImpl { if (!providerMBeanExists(host, _pluginMBeanProvider)) { - VirtualHostMBean mbean = new VirtualHostMBean(host, _objectRegistry); - registerMBean(host, _pluginMBeanProvider, mbean); host.addChangeListener(_changeListener); - return mbean; + try + { + VirtualHostMBean mbean = new VirtualHostMBean(host, _objectRegistry); + registerMBean(host, _pluginMBeanProvider, mbean); + return mbean; + } + catch (InstanceAlreadyExistsException e) + { + VirtualHostNode parent = host.getParent(VirtualHostNode.class); + Set<ConfiguredObject<?>> registered = _children.keySet(); + for (ConfiguredObject<?> object: registered) + { + if (object instanceof VirtualHost && object.getParent(VirtualHostNode.class) == parent) + { + LOGGER.warn("Unexpected MBean is found for VirtualHost " + object + " belonging to node " + parent); + } + } + + throw e; + } } return null; } @@ -392,24 +410,21 @@ public class JMXManagementPluginImpl } unregisterObjectMBeans(object); _children.remove(object); - destroyChildrenMBeansIfVirtualHostNode(object); + destroyChildrenMBeans(object); } } } - private void destroyChildrenMBeansIfVirtualHostNode(ConfiguredObject<?> child) + private void destroyChildrenMBeans(ConfiguredObject<?> object) { - if (child instanceof VirtualHostNode) + for (Iterator<ConfiguredObject<?>> iterator = _children.keySet().iterator(); iterator.hasNext();) { - for (Iterator<ConfiguredObject<?>> iterator = _children.keySet().iterator(); iterator.hasNext();) + ConfiguredObject<?> registeredObject = iterator.next(); + ConfiguredObject<?> parent = registeredObject.getParent(object.getCategoryClass()); + if (parent == object) { - ConfiguredObject<?> registeredObject = iterator.next(); - ConfiguredObject<?> parent = registeredObject.getParent(VirtualHostNode.class); - if (parent == child) - { - registeredObject.removeChangeListener(_changeListener); - unregisterObjectMBeans(registeredObject); - } + registeredObject.removeChangeListener(_changeListener); + unregisterObjectMBeans(registeredObject); iterator.remove(); } } |
