summaryrefslogtreecommitdiff
path: root/qpid/java/broker-plugins
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2014-06-09 08:35:09 +0000
committerAlex Rudyy <orudyy@apache.org>2014-06-09 08:35:09 +0000
commitb6249df102d7bd6e43bba2cdc5e8e6d333f1c8b1 (patch)
treebc63d3aeb68974512d65574f4f9270388c18a799 /qpid/java/broker-plugins
parent2a511e6a3b5f278f9c8b572a306b96490f180805 (diff)
downloadqpid-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.java48
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);
+ }
}
}