diff options
| author | Alex Rudyy <orudyy@apache.org> | 2014-06-09 08:35:09 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2014-06-09 08:35:09 +0000 |
| commit | b6249df102d7bd6e43bba2cdc5e8e6d333f1c8b1 (patch) | |
| tree | bc63d3aeb68974512d65574f4f9270388c18a799 /qpid/java/broker-plugins | |
| parent | 2a511e6a3b5f278f9c8b572a306b96490f180805 (diff) | |
| download | qpid-python-b6249df102d7bd6e43bba2cdc5e8e6d333f1c8b1.tar.gz | |
QPID-5715: Unregister children MBeans on Virtual Host Node stop
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1601322 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-plugins')
| -rw-r--r-- | qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java | 48 |
1 files changed, 41 insertions, 7 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 74153b8672..3eec242703 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 @@ -25,6 +25,7 @@ import java.io.IOException; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -269,7 +270,8 @@ public class JMXManagementPluginImpl if(LOGGER.isDebugEnabled()) { - LOGGER.debug("Provider " + provider + " mBean for child " + child + " " + mBean); + LOGGER.debug("Provider " + provider + (mBean == null ? " did not create mBean" : " created mBean " + mBean) + + " for child " + child); } } } @@ -377,18 +379,37 @@ public class JMXManagementPluginImpl return mbeans.containsKey(mBeanProvider); } - private void destroyObjectMBeans(ConfiguredObject<?> child, boolean removeListener) + private void destroyObjectMBeans(ConfiguredObject<?> object, boolean removeListener) { - if (supportedConfiguredObject(child)) + if (supportedConfiguredObject(object)) { synchronized (_childrenLock) { if (removeListener) { - child.removeChangeListener(_changeListener); + object.removeChangeListener(_changeListener); + } + unregisterObjectMBeans(object); + _children.remove(object); + destroyChildrenMBeansIfVirtualHostNode(object); + } + } + } + + private void destroyChildrenMBeansIfVirtualHostNode(ConfiguredObject<?> child) + { + if (child instanceof VirtualHostNode) + { + for (Iterator<ConfiguredObject<?>> iterator = _children.keySet().iterator(); iterator.hasNext();) + { + ConfiguredObject<?> registeredObject = iterator.next(); + ConfiguredObject<?> parent = registeredObject.getParent(VirtualHostNode.class); + if (parent == child) + { + registeredObject.removeChangeListener(_changeListener); + unregisterObjectMBeans(registeredObject); } - unregisterObjectMBeans(child); - _children.remove(child); + iterator.remove(); } } } @@ -429,6 +450,12 @@ public class JMXManagementPluginImpl { return "INTERNAL"; } + + @Override + public String toString() + { + return DEFAULT_NAME; + } } private class ChangeListener implements ConfigurationChangeListener @@ -465,7 +492,14 @@ public class JMXManagementPluginImpl // for instance, on role change in BDB HA VHN a VH could is recovered/created. // A call to createObjectMBeans is safe as it checks the existence of MBean before its creation. - createObjectMBeans(object); + if (ConfiguredObject.DESIRED_STATE.equals(attributeName)) + { + stateChanged(object, State.valueOf(String.valueOf(oldAttributeValue)), State.valueOf(String.valueOf(newAttributeValue))); + } + else + { + createObjectMBeans(object); + } } } |
