Refactored ManagementContext to improve encapsulation - so all registrations of MBeans happen in one place

git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@800337 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Davies 2009-08-03 12:38:00 +00:00
parent ac4545b40d
commit 93ccd9f17e
1 changed files with 107 additions and 161 deletions

View File

@ -16,18 +16,6 @@
*/ */
package org.apache.activemq.web; package org.apache.activemq.web;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.management.MBeanServer;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import org.apache.activemq.broker.jmx.BrokerViewMBean; import org.apache.activemq.broker.jmx.BrokerViewMBean;
import org.apache.activemq.broker.jmx.ConnectionViewMBean; import org.apache.activemq.broker.jmx.ConnectionViewMBean;
import org.apache.activemq.broker.jmx.ConnectorViewMBean; import org.apache.activemq.broker.jmx.ConnectorViewMBean;
@ -39,7 +27,13 @@ import org.apache.activemq.broker.jmx.QueueViewMBean;
import org.apache.activemq.broker.jmx.SubscriptionViewMBean; import org.apache.activemq.broker.jmx.SubscriptionViewMBean;
import org.apache.activemq.broker.jmx.TopicViewMBean; import org.apache.activemq.broker.jmx.TopicViewMBean;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.management.ObjectName;
/** /**
* A useful base class for an implementation of {@link BrokerFacade} * A useful base class for an implementation of {@link BrokerFacade}
* *
@ -83,8 +77,8 @@ public abstract class BrokerFacadeSupport implements BrokerFacade {
return (TopicViewMBean) getDestinationByName(getTopics(), name); return (TopicViewMBean) getDestinationByName(getTopics(), name);
} }
protected DestinationViewMBean getDestinationByName( protected DestinationViewMBean getDestinationByName(Collection<? extends DestinationViewMBean> collection,
Collection<? extends DestinationViewMBean> collection, String name) { String name) {
Iterator<? extends DestinationViewMBean> iter = collection.iterator(); Iterator<? extends DestinationViewMBean> iter = collection.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
DestinationViewMBean destinationViewMBean = iter.next(); DestinationViewMBean destinationViewMBean = iter.next();
@ -96,92 +90,62 @@ public abstract class BrokerFacadeSupport implements BrokerFacade {
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
protected <T> Collection<T> getManagedObjects(ObjectName[] names, protected <T> Collection<T> getManagedObjects(ObjectName[] names, Class<T> type) {
Class<T> type) {
List<T> answer = new ArrayList<T>(); List<T> answer = new ArrayList<T>();
MBeanServer mbeanServer = getManagementContext().getMBeanServer();
if (mbeanServer != null) {
for (int i = 0; i < names.length; i++) { for (int i = 0; i < names.length; i++) {
ObjectName name = names[i]; ObjectName name = names[i];
T value = (T) MBeanServerInvocationHandler.newProxyInstance( T value = (T) getManagementContext().newProxyInstance(name, type, true);
mbeanServer, name, type, true);
if (value != null) { if (value != null) {
answer.add(value); answer.add(value);
} }
} }
}
return answer; return answer;
} }
/**
* Get the MBeanServer connection.
*
* @return not <code>null</code>
* @throws Exception
*/
protected MBeanServerConnection getMBeanServerConnection() throws Exception {
return getManagementContext().getMBeanServer();
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Collection<ConnectionViewMBean> getConnections() throws Exception { public Collection<ConnectionViewMBean> getConnections() throws Exception {
MBeanServerConnection connection = getMBeanServerConnection();
String brokerName = getBrokerName(); String brokerName = getBrokerName();
ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName + ",Type=Connection,*");
+ brokerName + ",Type=Connection,*");
System.out.println(query); System.out.println(query);
Set<ObjectName> queryResult = connection.queryNames(query, null); Set<ObjectName> queryResult = getManagementContext().queryNames(query, null);
return getManagedObjects(queryResult.toArray(new ObjectName[queryResult return getManagedObjects(queryResult.toArray(new ObjectName[queryResult.size()]), ConnectionViewMBean.class);
.size()]), ConnectionViewMBean.class);
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Collection<String> getConnections(String connectorName) public Collection<String> getConnections(String connectorName) throws Exception {
throws Exception {
MBeanServerConnection connection = getMBeanServerConnection();
String brokerName = getBrokerName(); String brokerName = getBrokerName();
ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName
+ brokerName + ",Type=Connection,ConnectorName=" + ",Type=Connection,ConnectorName=" + connectorName + ",*");
+ connectorName + ",*"); Set<ObjectName> queryResult = getManagementContext().queryNames(query, null);
Set<ObjectName> queryResult = connection.queryNames(query, null);
Collection<String> result = new ArrayList<String>(queryResult.size()); Collection<String> result = new ArrayList<String>(queryResult.size());
for (ObjectName on : queryResult) { for (ObjectName on : queryResult) {
String name = StringUtils.replace(on.getKeyProperty("Connection"), String name = StringUtils.replace(on.getKeyProperty("Connection"), "_", ":");
"_", ":");
result.add(name); result.add(name);
} }
return result; return result;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public ConnectionViewMBean getConnection(String connectionName) public ConnectionViewMBean getConnection(String connectionName) throws Exception {
throws Exception {
connectionName = StringUtils.replace(connectionName, ":", "_"); connectionName = StringUtils.replace(connectionName, ":", "_");
MBeanServerConnection connection = getMBeanServerConnection();
String brokerName = getBrokerName(); String brokerName = getBrokerName();
ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName
+ brokerName + ",Type=Connection,*,Connection=" + ",Type=Connection,*,Connection=" + connectionName);
+ connectionName); Set<ObjectName> queryResult = getManagementContext().queryNames(query, null);
Set<ObjectName> queryResult = connection.queryNames(query, null);
if (queryResult.size() == 0) if (queryResult.size() == 0)
return null; return null;
ObjectName objectName = queryResult.iterator().next(); ObjectName objectName = queryResult.iterator().next();
return (ConnectionViewMBean) MBeanServerInvocationHandler return (ConnectionViewMBean) getManagementContext().newProxyInstance(objectName,
.newProxyInstance(connection, objectName,
ConnectionViewMBean.class, true); ConnectionViewMBean.class, true);
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Collection<String> getConnectors() throws Exception { public Collection<String> getConnectors() throws Exception {
MBeanServerConnection connection = getMBeanServerConnection();
String brokerName = getBrokerName(); String brokerName = getBrokerName();
ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName + ",Type=Connector,*");
+ brokerName + ",Type=Connector,*"); Set<ObjectName> queryResult = getManagementContext().queryNames(query, null);
Set<ObjectName> queryResult = connection.queryNames(query, null);
Collection<String> result = new ArrayList<String>(queryResult.size()); Collection<String> result = new ArrayList<String>(queryResult.size());
for (ObjectName on : queryResult) for (ObjectName on : queryResult)
result.add(on.getKeyProperty("ConnectorName")); result.add(on.getKeyProperty("ConnectorName"));
@ -189,56 +153,38 @@ public abstract class BrokerFacadeSupport implements BrokerFacade {
} }
public ConnectorViewMBean getConnector(String name) throws Exception { public ConnectorViewMBean getConnector(String name) throws Exception {
MBeanServerConnection connection = getMBeanServerConnection();
String brokerName = getBrokerName(); String brokerName = getBrokerName();
ObjectName objectName = new ObjectName( ObjectName objectName = new ObjectName("org.apache.activemq:BrokerName=" + brokerName
"org.apache.activemq:BrokerName=" + brokerName
+ ",Type=Connector,ConnectorName=" + name); + ",Type=Connector,ConnectorName=" + name);
return (ConnectorViewMBean) MBeanServerInvocationHandler return (ConnectorViewMBean) getManagementContext().newProxyInstance(objectName,
.newProxyInstance(connection, objectName,
ConnectorViewMBean.class, true); ConnectorViewMBean.class, true);
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Collection<NetworkConnectorViewMBean> getNetworkConnectors() public Collection<NetworkConnectorViewMBean> getNetworkConnectors() throws Exception {
throws Exception {
MBeanServerConnection connection = getMBeanServerConnection();
String brokerName = getBrokerName(); String brokerName = getBrokerName();
ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName + ",Type=NetworkConnector,*");
+ brokerName + ",Type=NetworkConnector,*"); Set<ObjectName> queryResult = getManagementContext().queryNames(query, null);
Set<ObjectName> queryResult = connection.queryNames(query, null); return getManagedObjects(queryResult.toArray(new ObjectName[queryResult.size()]),
return getManagedObjects(queryResult.toArray(new ObjectName[queryResult NetworkConnectorViewMBean.class);
.size()]), NetworkConnectorViewMBean.class);
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Collection<SubscriptionViewMBean> getQueueConsumers(String queueName) public Collection<SubscriptionViewMBean> getQueueConsumers(String queueName) throws Exception {
throws Exception {
MBeanServerConnection connection = getMBeanServerConnection();
String brokerName = getBrokerName(); String brokerName = getBrokerName();
ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName
+ brokerName + ",Type=Subscription,destinationType=Queue,destinationName=" + queueName + ",*");
+ ",Type=Subscription,destinationType=Queue,destinationName=" Set<ObjectName> queryResult = getManagementContext().queryNames(query, null);
+ queueName + ",*"); return getManagedObjects(queryResult.toArray(new ObjectName[queryResult.size()]), SubscriptionViewMBean.class);
Set<ObjectName> queryResult = connection.queryNames(query, null);
return getManagedObjects(queryResult.toArray(new ObjectName[queryResult
.size()]), SubscriptionViewMBean.class);
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Collection<SubscriptionViewMBean> getConsumersOnConnection( public Collection<SubscriptionViewMBean> getConsumersOnConnection(String connectionName) throws Exception {
String connectionName) throws Exception {
connectionName = StringUtils.replace(connectionName, ":", "_"); connectionName = StringUtils.replace(connectionName, ":", "_");
MBeanServerConnection connection = getMBeanServerConnection();
String brokerName = getBrokerName(); String brokerName = getBrokerName();
ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName
+ brokerName + ",Type=Subscription,clientId=" + connectionName + ",Type=Subscription,clientId=" + connectionName + ",*");
+ ",*"); Set<ObjectName> queryResult = getManagementContext().queryNames(query, null);
Set<ObjectName> queryResult = connection.queryNames(query, null); return getManagedObjects(queryResult.toArray(new ObjectName[queryResult.size()]), SubscriptionViewMBean.class);
return getManagedObjects(queryResult.toArray(new ObjectName[queryResult
.size()]), SubscriptionViewMBean.class);
} }
} }