summaryrefslogtreecommitdiff
path: root/qpid/java/broker-plugins
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2014-05-09 13:24:24 +0000
committerAlex Rudyy <orudyy@apache.org>2014-05-09 13:24:24 +0000
commit566f96394dd04b81c3e2987a221dd935a7ab2276 (patch)
treef0bee06cad9ce8c3b40209b3100e68224cba405b /qpid/java/broker-plugins
parentb5bea31b2564f50898d921a2b506f482fa4c6422 (diff)
downloadqpid-python-566f96394dd04b81c3e2987a221dd935a7ab2276.tar.gz
QPID-5409 : Change BDB HA MBean to delegate operations to BDB HA node instance
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1593538 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.java63
1 files changed, 38 insertions, 25 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 d3b5b786e9..9d1cd8df59 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
@@ -23,15 +23,16 @@ package org.apache.qpid.server.jmx;
import java.io.IOException;
import java.lang.reflect.Type;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.management.JMException;
import org.apache.log4j.Logger;
-
import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.jmx.mbeans.LoggingManagementMBean;
import org.apache.qpid.server.jmx.mbeans.ServerInformationMBean;
@@ -81,7 +82,7 @@ public class JMXManagementPluginImpl
private JMXManagedObjectRegistry _objectRegistry;
private final Object _childrenLock = new Object();
- private final Map<ConfiguredObject, AMQManagedObject> _children = new HashMap<ConfiguredObject, AMQManagedObject>();
+ private final Map<ConfiguredObject, List<ManagedObject>> _children = new HashMap<ConfiguredObject, List<ManagedObject>>();
@ManagedAttributeField
private boolean _usePlatformMBeanServer;
@@ -157,7 +158,7 @@ public class JMXManagementPluginImpl
if (host != null)
{
VirtualHostMBean mbean = new VirtualHostMBean(host, _objectRegistry);
- _children.put(host, mbean);
+ addMBean(host, mbean);
}
createAdditionalMBeansFromProviders(virtualHostNode, _objectRegistry);
}
@@ -170,7 +171,7 @@ public class JMXManagementPluginImpl
UserManagementMBean mbean = new UserManagementMBean(
(PasswordCredentialManagingAuthenticationProvider) authenticationProvider,
_objectRegistry);
- _children.put(authenticationProvider, mbean);
+ addMBean(authenticationProvider, mbean);
}
createAdditionalMBeansFromProviders(authenticationProvider, _objectRegistry);
}
@@ -186,6 +187,17 @@ public class JMXManagementPluginImpl
_allowPortActivation = false;
}
+ private void addMBean(ConfiguredObject configuredObject, ManagedObject mbean)
+ {
+ List<ManagedObject> mbeanList = _children.get(configuredObject);
+ if (mbeanList == null)
+ {
+ mbeanList = new ArrayList<ManagedObject>();
+ _children.put(configuredObject, mbeanList);
+ }
+ mbeanList.add(mbean);
+ }
+
@Override
public boolean isActivationAllowed(final Port<?> port)
{
@@ -223,7 +235,21 @@ public class JMXManagementPluginImpl
{
for(ConfiguredObject object : _children.keySet())
{
- AMQManagedObject mbean = _children.get(object);
+ unregisterChildMBeans(object);
+ }
+ _children.clear();
+ }
+ getBroker().removeChangeListener(this);
+ closeObjectRegistry();
+ }
+
+ private void unregisterChildMBeans(ConfiguredObject object)
+ {
+ List<ManagedObject> mbeans = _children.get(object);
+ if (mbeans != null)
+ {
+ for (ManagedObject mbean : mbeans)
+ {
if (mbean instanceof ConfigurationChangeListener)
{
object.removeChangeListener((ConfigurationChangeListener)mbean);
@@ -237,10 +263,7 @@ public class JMXManagementPluginImpl
LOGGER.error("Exception while unregistering mbean for " + object.getClass().getSimpleName() + " " + object.getName(), e);
}
}
- _children.clear();
}
- getBroker().removeChangeListener(this);
- closeObjectRegistry();
}
@Override
@@ -278,7 +301,7 @@ public class JMXManagementPluginImpl
if (mbean != null)
{
- _children.put(child, mbean);
+ addMBean(child, mbean);
}
createAdditionalMBeansFromProviders(child, _objectRegistry);
}
@@ -296,20 +319,8 @@ public class JMXManagementPluginImpl
synchronized (_childrenLock)
{
child.removeChangeListener(this);
-
- AMQManagedObject mbean = _children.remove(child);
- if(mbean != null)
- {
- try
- {
- mbean.unregister();
- }
- catch(Exception e)
- {
- LOGGER.error("Exception while unregistering mbean for " + child.getClass().getSimpleName() + " " + child.getName(), e);
- //TODO - report error on removing child MBean
- }
- }
+ unregisterChildMBeans(child);
+ _children.remove(child);
}
}
@@ -337,8 +348,10 @@ public class JMXManagementPluginImpl
LOGGER.debug("Provider will create mbean");
}
mBean = provider.createMBean(child, registry);
- // TODO track the mbeans that have been created on behalf of a child in a map, then
- // if the child is ever removed, destroy these beans too.
+ if (mBean != null)
+ {
+ addMBean(child, mBean);
+ }
}
if(LOGGER.isDebugEnabled())