mirror of
https://github.com/apache/activemq.git
synced 2025-02-17 07:24:51 +00:00
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@799706 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9caa5c8d4d
commit
1ec71bdff1
File diff suppressed because it is too large
Load Diff
@ -16,16 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.broker;
|
package org.apache.activemq.broker;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URI;
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
|
||||||
|
|
||||||
import javax.management.MBeanServer;
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
|
|
||||||
import org.apache.activemq.broker.jmx.ManagedTransportConnector;
|
import org.apache.activemq.broker.jmx.ManagedTransportConnector;
|
||||||
|
import org.apache.activemq.broker.jmx.ManagementContext;
|
||||||
import org.apache.activemq.broker.region.ConnectorStatistics;
|
import org.apache.activemq.broker.region.ConnectorStatistics;
|
||||||
import org.apache.activemq.command.BrokerInfo;
|
import org.apache.activemq.command.BrokerInfo;
|
||||||
import org.apache.activemq.security.MessageAuthorizationPolicy;
|
import org.apache.activemq.security.MessageAuthorizationPolicy;
|
||||||
@ -40,6 +32,12 @@ import org.apache.activemq.util.ServiceStopper;
|
|||||||
import org.apache.activemq.util.ServiceSupport;
|
import org.apache.activemq.util.ServiceSupport;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @org.apache.xbean.XBean
|
* @org.apache.xbean.XBean
|
||||||
@ -94,8 +92,8 @@ public class TransportConnector implements Connector, BrokerServiceAware {
|
|||||||
* Factory method to create a JMX managed version of this transport
|
* Factory method to create a JMX managed version of this transport
|
||||||
* connector
|
* connector
|
||||||
*/
|
*/
|
||||||
public ManagedTransportConnector asManagedConnector(MBeanServer mbeanServer, ObjectName connectorName) throws IOException, URISyntaxException {
|
public ManagedTransportConnector asManagedConnector(ManagementContext context, ObjectName connectorName) throws IOException, URISyntaxException {
|
||||||
ManagedTransportConnector rc = new ManagedTransportConnector(mbeanServer, connectorName, getServer());
|
ManagedTransportConnector rc = new ManagedTransportConnector(context, connectorName, getServer());
|
||||||
rc.setBrokerInfo(getBrokerInfo());
|
rc.setBrokerInfo(getBrokerInfo());
|
||||||
rc.setConnectUri(getConnectUri());
|
rc.setConnectUri(getConnectUri());
|
||||||
rc.setDisableAsyncDispatch(isDisableAsyncDispatch());
|
rc.setDisableAsyncDispatch(isDisableAsyncDispatch());
|
||||||
|
@ -16,30 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.broker.jmx;
|
package org.apache.activemq.broker.jmx;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Hashtable;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.concurrent.CopyOnWriteArraySet;
|
|
||||||
|
|
||||||
import javax.management.InstanceNotFoundException;
|
|
||||||
import javax.management.MBeanServer;
|
|
||||||
import javax.management.MalformedObjectNameException;
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
import javax.management.openmbean.CompositeData;
|
|
||||||
import javax.management.openmbean.CompositeDataSupport;
|
|
||||||
import javax.management.openmbean.CompositeType;
|
|
||||||
import javax.management.openmbean.OpenDataException;
|
|
||||||
import javax.management.openmbean.TabularData;
|
|
||||||
import javax.management.openmbean.TabularDataSupport;
|
|
||||||
import javax.management.openmbean.TabularType;
|
|
||||||
|
|
||||||
import org.apache.activemq.broker.Broker;
|
import org.apache.activemq.broker.Broker;
|
||||||
import org.apache.activemq.broker.BrokerService;
|
import org.apache.activemq.broker.BrokerService;
|
||||||
import org.apache.activemq.broker.ConnectionContext;
|
import org.apache.activemq.broker.ConnectionContext;
|
||||||
@ -71,10 +47,31 @@ import org.apache.activemq.util.ServiceStopper;
|
|||||||
import org.apache.activemq.util.SubscriptionKey;
|
import org.apache.activemq.util.SubscriptionKey;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
|
import javax.management.InstanceNotFoundException;
|
||||||
|
import javax.management.MalformedObjectNameException;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
import javax.management.openmbean.CompositeData;
|
||||||
|
import javax.management.openmbean.CompositeDataSupport;
|
||||||
|
import javax.management.openmbean.CompositeType;
|
||||||
|
import javax.management.openmbean.OpenDataException;
|
||||||
|
import javax.management.openmbean.TabularData;
|
||||||
|
import javax.management.openmbean.TabularDataSupport;
|
||||||
|
import javax.management.openmbean.TabularType;
|
||||||
|
|
||||||
public class ManagedRegionBroker extends RegionBroker {
|
public class ManagedRegionBroker extends RegionBroker {
|
||||||
private static final Log LOG = LogFactory.getLog(ManagedRegionBroker.class);
|
private static final Log LOG = LogFactory.getLog(ManagedRegionBroker.class);
|
||||||
private final MBeanServer mbeanServer;
|
private final ManagementContext managementContext;
|
||||||
private final ObjectName brokerObjectName;
|
private final ObjectName brokerObjectName;
|
||||||
private final Map<ObjectName, DestinationView> topics = new ConcurrentHashMap<ObjectName, DestinationView>();
|
private final Map<ObjectName, DestinationView> topics = new ConcurrentHashMap<ObjectName, DestinationView>();
|
||||||
private final Map<ObjectName, DestinationView> queues = new ConcurrentHashMap<ObjectName, DestinationView>();
|
private final Map<ObjectName, DestinationView> queues = new ConcurrentHashMap<ObjectName, DestinationView>();
|
||||||
@ -92,10 +89,10 @@ public class ManagedRegionBroker extends RegionBroker {
|
|||||||
/* This is the first broker in the broker interceptor chain. */
|
/* This is the first broker in the broker interceptor chain. */
|
||||||
private Broker contextBroker;
|
private Broker contextBroker;
|
||||||
|
|
||||||
public ManagedRegionBroker(BrokerService brokerService, MBeanServer mbeanServer, ObjectName brokerObjectName, TaskRunnerFactory taskRunnerFactory, SystemUsage memoryManager,
|
public ManagedRegionBroker(BrokerService brokerService, ManagementContext context, ObjectName brokerObjectName, TaskRunnerFactory taskRunnerFactory, SystemUsage memoryManager,
|
||||||
DestinationFactory destinationFactory, DestinationInterceptor destinationInterceptor) throws IOException {
|
DestinationFactory destinationFactory, DestinationInterceptor destinationInterceptor) throws IOException {
|
||||||
super(brokerService, taskRunnerFactory, memoryManager, destinationFactory, destinationInterceptor);
|
super(brokerService, taskRunnerFactory, memoryManager, destinationFactory, destinationInterceptor);
|
||||||
this.mbeanServer = mbeanServer;
|
this.managementContext = context;
|
||||||
this.brokerObjectName = brokerObjectName;
|
this.brokerObjectName = brokerObjectName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,7 +108,7 @@ public class ManagedRegionBroker extends RegionBroker {
|
|||||||
for (Iterator<ObjectName> iter = registeredMBeans.iterator(); iter.hasNext();) {
|
for (Iterator<ObjectName> iter = registeredMBeans.iterator(); iter.hasNext();) {
|
||||||
ObjectName name = iter.next();
|
ObjectName name = iter.next();
|
||||||
try {
|
try {
|
||||||
mbeanServer.unregisterMBean(name);
|
managementContext.unregisterMBean(name);
|
||||||
} catch (InstanceNotFoundException e) {
|
} catch (InstanceNotFoundException e) {
|
||||||
LOG.warn("The MBean: " + name + " is no longer registered with JMX");
|
LOG.warn("The MBean: " + name + " is no longer registered with JMX");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -245,7 +242,7 @@ public class ManagedRegionBroker extends RegionBroker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
mbeanServer.registerMBean(view, key);
|
managementContext.registerMBean(view, key);
|
||||||
registeredMBeans.add(key);
|
registeredMBeans.add(key);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.warn("Failed to register MBean: " + key);
|
LOG.warn("Failed to register MBean: " + key);
|
||||||
@ -260,7 +257,7 @@ public class ManagedRegionBroker extends RegionBroker {
|
|||||||
temporaryTopics.remove(key);
|
temporaryTopics.remove(key);
|
||||||
if (registeredMBeans.remove(key)) {
|
if (registeredMBeans.remove(key)) {
|
||||||
try {
|
try {
|
||||||
mbeanServer.unregisterMBean(key);
|
managementContext.unregisterMBean(key);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.warn("Failed to unregister MBean: " + key);
|
LOG.warn("Failed to unregister MBean: " + key);
|
||||||
LOG.debug("Failure reason: " + e, e);
|
LOG.debug("Failure reason: " + e, e);
|
||||||
@ -288,7 +285,7 @@ public class ManagedRegionBroker extends RegionBroker {
|
|||||||
if (inactiveName != null) {
|
if (inactiveName != null) {
|
||||||
inactiveDurableTopicSubscribers.remove(inactiveName);
|
inactiveDurableTopicSubscribers.remove(inactiveName);
|
||||||
registeredMBeans.remove(inactiveName);
|
registeredMBeans.remove(inactiveName);
|
||||||
mbeanServer.unregisterMBean(inactiveName);
|
managementContext.unregisterMBean(inactiveName);
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.error("Unable to unregister inactive durable subscriber: " + subscriptionKey, e);
|
LOG.error("Unable to unregister inactive durable subscriber: " + subscriptionKey, e);
|
||||||
@ -300,7 +297,7 @@ public class ManagedRegionBroker extends RegionBroker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mbeanServer.registerMBean(view, key);
|
managementContext.registerMBean(view, key);
|
||||||
registeredMBeans.add(key);
|
registeredMBeans.add(key);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.warn("Failed to register MBean: " + key);
|
LOG.warn("Failed to register MBean: " + key);
|
||||||
@ -317,7 +314,7 @@ public class ManagedRegionBroker extends RegionBroker {
|
|||||||
temporaryTopicSubscribers.remove(key);
|
temporaryTopicSubscribers.remove(key);
|
||||||
if (registeredMBeans.remove(key)) {
|
if (registeredMBeans.remove(key)) {
|
||||||
try {
|
try {
|
||||||
mbeanServer.unregisterMBean(key);
|
managementContext.unregisterMBean(key);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.warn("Failed to unregister MBean: " + key);
|
LOG.warn("Failed to unregister MBean: " + key);
|
||||||
LOG.debug("Failure reason: " + e, e);
|
LOG.debug("Failure reason: " + e, e);
|
||||||
@ -370,7 +367,7 @@ public class ManagedRegionBroker extends RegionBroker {
|
|||||||
SubscriptionView view = new InactiveDurableSubscriptionView(this, key.getClientId(), info);
|
SubscriptionView view = new InactiveDurableSubscriptionView(this, key.getClientId(), info);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mbeanServer.registerMBean(view, objectName);
|
managementContext.registerMBean(view, objectName);
|
||||||
registeredMBeans.add(objectName);
|
registeredMBeans.add(objectName);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.warn("Failed to register MBean: " + key);
|
LOG.warn("Failed to register MBean: " + key);
|
||||||
|
@ -16,12 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.broker.jmx;
|
package org.apache.activemq.broker.jmx;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Hashtable;
|
|
||||||
|
|
||||||
import javax.management.MBeanServer;
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
|
|
||||||
import org.apache.activemq.broker.Broker;
|
import org.apache.activemq.broker.Broker;
|
||||||
import org.apache.activemq.broker.TransportConnection;
|
import org.apache.activemq.broker.TransportConnection;
|
||||||
import org.apache.activemq.broker.TransportConnector;
|
import org.apache.activemq.broker.TransportConnector;
|
||||||
@ -33,6 +27,9 @@ import org.apache.activemq.util.IOExceptionSupport;
|
|||||||
import org.apache.activemq.util.JMXSupport;
|
import org.apache.activemq.util.JMXSupport;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A managed transport connection
|
* A managed transport connection
|
||||||
@ -42,7 +39,7 @@ import org.apache.commons.logging.LogFactory;
|
|||||||
public class ManagedTransportConnection extends TransportConnection {
|
public class ManagedTransportConnection extends TransportConnection {
|
||||||
private static final Log LOG = LogFactory.getLog(ManagedTransportConnection.class);
|
private static final Log LOG = LogFactory.getLog(ManagedTransportConnection.class);
|
||||||
|
|
||||||
private final MBeanServer server;
|
private final ManagementContext managementContext;
|
||||||
private final ObjectName connectorName;
|
private final ObjectName connectorName;
|
||||||
private ConnectionViewMBean mbean;
|
private ConnectionViewMBean mbean;
|
||||||
|
|
||||||
@ -50,10 +47,10 @@ public class ManagedTransportConnection extends TransportConnection {
|
|||||||
private ObjectName byAddressName;
|
private ObjectName byAddressName;
|
||||||
|
|
||||||
public ManagedTransportConnection(TransportConnector connector, Transport transport, Broker broker,
|
public ManagedTransportConnection(TransportConnector connector, Transport transport, Broker broker,
|
||||||
TaskRunnerFactory factory, MBeanServer server, ObjectName connectorName)
|
TaskRunnerFactory factory, ManagementContext context, ObjectName connectorName)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
super(connector, transport, broker, factory);
|
super(connector, transport, broker, factory);
|
||||||
this.server = server;
|
this.managementContext = context;
|
||||||
this.connectorName = connectorName;
|
this.connectorName = connectorName;
|
||||||
this.mbean = new ConnectionView(this);
|
this.mbean = new ConnectionView(this);
|
||||||
byAddressName = createByAddressObjectName("address", transport.getRemoteAddress());
|
byAddressName = createByAddressObjectName("address", transport.getRemoteAddress());
|
||||||
@ -99,7 +96,7 @@ public class ManagedTransportConnection extends TransportConnection {
|
|||||||
protected void registerMBean(ObjectName name) {
|
protected void registerMBean(ObjectName name) {
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
try {
|
try {
|
||||||
server.registerMBean(mbean, name);
|
managementContext.registerMBean(mbean, name);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.warn("Failed to register MBean: " + name);
|
LOG.warn("Failed to register MBean: " + name);
|
||||||
LOG.debug("Failure reason: " + e, e);
|
LOG.debug("Failure reason: " + e, e);
|
||||||
@ -110,7 +107,7 @@ public class ManagedTransportConnection extends TransportConnection {
|
|||||||
protected void unregisterMBean(ObjectName name) {
|
protected void unregisterMBean(ObjectName name) {
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
try {
|
try {
|
||||||
server.unregisterMBean(name);
|
managementContext.unregisterMBean(name);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.warn("Failed to unregister mbean: " + name);
|
LOG.warn("Failed to unregister mbean: " + name);
|
||||||
LOG.debug("Failure reason: " + e, e);
|
LOG.debug("Failure reason: " + e, e);
|
||||||
|
@ -16,17 +16,14 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.broker.jmx;
|
package org.apache.activemq.broker.jmx;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
|
|
||||||
import javax.management.MBeanServer;
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
|
|
||||||
import org.apache.activemq.broker.Broker;
|
|
||||||
import org.apache.activemq.broker.Connection;
|
import org.apache.activemq.broker.Connection;
|
||||||
import org.apache.activemq.broker.TransportConnector;
|
import org.apache.activemq.broker.TransportConnector;
|
||||||
import org.apache.activemq.transport.Transport;
|
import org.apache.activemq.transport.Transport;
|
||||||
import org.apache.activemq.transport.TransportServer;
|
import org.apache.activemq.transport.TransportServer;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import javax.management.MBeanServer;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A managed transport connector which can create multiple managed connections
|
* A managed transport connector which can create multiple managed connections
|
||||||
@ -38,12 +35,12 @@ public class ManagedTransportConnector extends TransportConnector {
|
|||||||
|
|
||||||
static long nextConnectionId = 1;
|
static long nextConnectionId = 1;
|
||||||
|
|
||||||
private final MBeanServer mbeanServer;
|
private final ManagementContext managementContext;
|
||||||
private final ObjectName connectorName;
|
private final ObjectName connectorName;
|
||||||
|
|
||||||
public ManagedTransportConnector(MBeanServer mbeanServer, ObjectName connectorName, TransportServer server) {
|
public ManagedTransportConnector(ManagementContext context, ObjectName connectorName, TransportServer server) {
|
||||||
super(server);
|
super(server);
|
||||||
this.mbeanServer = mbeanServer;
|
this.managementContext = context;
|
||||||
this.connectorName = connectorName;
|
this.connectorName = connectorName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,7 +49,7 @@ public class ManagedTransportConnector extends TransportConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected Connection createConnection(Transport transport) throws IOException {
|
protected Connection createConnection(Transport transport) throws IOException {
|
||||||
return new ManagedTransportConnection(this, transport, getBroker(), isDisableAsyncDispatch() ? null : getTaskRunnerFactory(), mbeanServer, connectorName);
|
return new ManagedTransportConnection(this, transport, getBroker(), isDisableAsyncDispatch() ? null : getTaskRunnerFactory(), managementContext, connectorName);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static synchronized long getNextConnectionId() {
|
protected static synchronized long getNextConnectionId() {
|
||||||
|
@ -21,14 +21,23 @@ import java.lang.reflect.Method;
|
|||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.rmi.registry.LocateRegistry;
|
import java.rmi.registry.LocateRegistry;
|
||||||
import java.rmi.registry.Registry;
|
import java.rmi.registry.Registry;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import javax.management.Attribute;
|
import javax.management.Attribute;
|
||||||
|
import javax.management.InstanceAlreadyExistsException;
|
||||||
|
import javax.management.InstanceNotFoundException;
|
||||||
import javax.management.JMException;
|
import javax.management.JMException;
|
||||||
|
import javax.management.MBeanRegistrationException;
|
||||||
import javax.management.MBeanServer;
|
import javax.management.MBeanServer;
|
||||||
import javax.management.MBeanServerFactory;
|
import javax.management.MBeanServerFactory;
|
||||||
|
import javax.management.MBeanServerInvocationHandler;
|
||||||
import javax.management.MalformedObjectNameException;
|
import javax.management.MalformedObjectNameException;
|
||||||
|
import javax.management.NotCompliantMBeanException;
|
||||||
|
import javax.management.ObjectInstance;
|
||||||
import javax.management.ObjectName;
|
import javax.management.ObjectName;
|
||||||
import javax.management.remote.JMXConnectorServer;
|
import javax.management.remote.JMXConnectorServer;
|
||||||
import javax.management.remote.JMXConnectorServerFactory;
|
import javax.management.remote.JMXConnectorServerFactory;
|
||||||
@ -37,6 +46,7 @@ import javax.management.remote.JMXServiceURL;
|
|||||||
import org.apache.activemq.Service;
|
import org.apache.activemq.Service;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import sun.security.action.GetBooleanAction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Flow provides different dispatch policies within the NMR
|
* A Flow provides different dispatch policies within the NMR
|
||||||
@ -64,6 +74,7 @@ public class ManagementContext implements Service {
|
|||||||
private JMXConnectorServer connectorServer;
|
private JMXConnectorServer connectorServer;
|
||||||
private ObjectName namingServiceObjectName;
|
private ObjectName namingServiceObjectName;
|
||||||
private Registry registry;
|
private Registry registry;
|
||||||
|
private List<ObjectName> registeredMBeanNames = new CopyOnWriteArrayList<ObjectName>();
|
||||||
|
|
||||||
public ManagementContext() {
|
public ManagementContext() {
|
||||||
this(null);
|
this(null);
|
||||||
@ -101,8 +112,18 @@ public class ManagementContext implements Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stop() throws IOException {
|
public void stop() throws Exception {
|
||||||
if (started.compareAndSet(true, false)) {
|
if (started.compareAndSet(true, false)) {
|
||||||
|
MBeanServer mbeanServer = getMBeanServer();
|
||||||
|
if (mbeanServer != null) {
|
||||||
|
for (Iterator<ObjectName> iter = registeredMBeanNames.iterator(); iter.hasNext();) {
|
||||||
|
ObjectName name = iter.next();
|
||||||
|
|
||||||
|
mbeanServer.unregisterMBean(name);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
registeredMBeanNames.clear();
|
||||||
JMXConnectorServer server = connectorServer;
|
JMXConnectorServer server = connectorServer;
|
||||||
connectorServer = null;
|
connectorServer = null;
|
||||||
if (server != null) {
|
if (server != null) {
|
||||||
@ -146,7 +167,7 @@ public class ManagementContext implements Service {
|
|||||||
*
|
*
|
||||||
* @return the MBeanServer
|
* @return the MBeanServer
|
||||||
*/
|
*/
|
||||||
public MBeanServer getMBeanServer() {
|
protected MBeanServer getMBeanServer() {
|
||||||
if (this.beanServer == null) {
|
if (this.beanServer == null) {
|
||||||
this.beanServer = findMBeanServer();
|
this.beanServer = findMBeanServer();
|
||||||
}
|
}
|
||||||
@ -258,7 +279,24 @@ public class ManagementContext implements Service {
|
|||||||
}
|
}
|
||||||
return containerName + "." + name;
|
return containerName + "." + name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Object newProxyInstance( ObjectName objectName,
|
||||||
|
Class interfaceClass,
|
||||||
|
boolean notificationBroadcaster){
|
||||||
|
return MBeanServerInvocationHandler.newProxyInstance(getMBeanServer(), objectName, interfaceClass, notificationBroadcaster);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getAttribute(ObjectName name, String attribute) throws Exception{
|
||||||
|
return getMBeanServer().getAttribute(name, attribute);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObjectInstance registerMBean(Object bean, ObjectName name) throws Exception{
|
||||||
|
ObjectInstance result = getMBeanServer().registerMBean(bean, name);
|
||||||
|
this.registeredMBeanNames.add(name);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister an MBean
|
* Unregister an MBean
|
||||||
*
|
*
|
||||||
@ -266,7 +304,7 @@ public class ManagementContext implements Service {
|
|||||||
* @throws JMException
|
* @throws JMException
|
||||||
*/
|
*/
|
||||||
public void unregisterMBean(ObjectName name) throws JMException {
|
public void unregisterMBean(ObjectName name) throws JMException {
|
||||||
if (beanServer != null && beanServer.isRegistered(name)) {
|
if (beanServer != null && beanServer.isRegistered(name) && this.registeredMBeanNames.remove(name)) {
|
||||||
beanServer.unregisterMBean(name);
|
beanServer.unregisterMBean(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -520,9 +520,6 @@ public class RegionBroker extends EmptyBroker {
|
|||||||
|
|
||||||
public BrokerId getBrokerId() {
|
public BrokerId getBrokerId() {
|
||||||
if (brokerId == null) {
|
if (brokerId == null) {
|
||||||
// TODO: this should persist the broker id so that subsequent
|
|
||||||
// startup
|
|
||||||
// uses the same broker id.
|
|
||||||
brokerId = new BrokerId(BROKER_ID_GENERATOR.generateId());
|
brokerId = new BrokerId(BROKER_ID_GENERATOR.generateId());
|
||||||
}
|
}
|
||||||
return brokerId;
|
return brokerId;
|
||||||
|
@ -16,25 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.broker.view;
|
package org.apache.activemq.broker.view;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import javax.management.MBeanServer;
|
|
||||||
import javax.management.MBeanServerInvocationHandler;
|
|
||||||
import javax.management.MalformedObjectNameException;
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
|
|
||||||
import org.apache.activemq.broker.Broker;
|
import org.apache.activemq.broker.Broker;
|
||||||
import org.apache.activemq.broker.ConnectionContext;
|
import org.apache.activemq.broker.ConnectionContext;
|
||||||
import org.apache.activemq.broker.ProducerBrokerExchange;
|
import org.apache.activemq.broker.ProducerBrokerExchange;
|
||||||
import org.apache.activemq.broker.jmx.BrokerViewMBean;
|
import org.apache.activemq.broker.jmx.BrokerViewMBean;
|
||||||
import org.apache.activemq.broker.jmx.ManagementContext;
|
|
||||||
import org.apache.activemq.broker.jmx.SubscriptionViewMBean;
|
import org.apache.activemq.broker.jmx.SubscriptionViewMBean;
|
||||||
import org.apache.activemq.broker.region.Subscription;
|
import org.apache.activemq.broker.region.Subscription;
|
||||||
import org.apache.activemq.command.ActiveMQDestination;
|
import org.apache.activemq.command.ActiveMQDestination;
|
||||||
@ -43,6 +28,15 @@ import org.apache.activemq.command.Message;
|
|||||||
import org.apache.activemq.command.ProducerId;
|
import org.apache.activemq.command.ProducerId;
|
||||||
import org.apache.activemq.command.ProducerInfo;
|
import org.apache.activemq.command.ProducerInfo;
|
||||||
import org.apache.activemq.filter.DestinationMapNode;
|
import org.apache.activemq.filter.DestinationMapNode;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version $Revision: $
|
* @version $Revision: $
|
||||||
@ -55,7 +49,6 @@ public class ConnectionDotFileInterceptor extends DotFileInterceptorSupport {
|
|||||||
private boolean clearProducerCacheAfterRender;
|
private boolean clearProducerCacheAfterRender;
|
||||||
private String domain = "org.apache.activemq";
|
private String domain = "org.apache.activemq";
|
||||||
private BrokerViewMBean brokerView;
|
private BrokerViewMBean brokerView;
|
||||||
private MBeanServer mbeanServer;
|
|
||||||
|
|
||||||
// until we have some MBeans for producers, lets do it all ourselves
|
// until we have some MBeans for producers, lets do it all ourselves
|
||||||
private Map<ProducerId, ProducerInfo> producers = new HashMap<ProducerId, ProducerInfo>();
|
private Map<ProducerId, ProducerInfo> producers = new HashMap<ProducerId, ProducerInfo>();
|
||||||
@ -65,10 +58,7 @@ public class ConnectionDotFileInterceptor extends DotFileInterceptorSupport {
|
|||||||
public ConnectionDotFileInterceptor(Broker next, String file, boolean redrawOnRemove) throws IOException {
|
public ConnectionDotFileInterceptor(Broker next, String file, boolean redrawOnRemove) throws IOException {
|
||||||
super(next, file);
|
super(next, file);
|
||||||
this.redrawOnRemove = redrawOnRemove;
|
this.redrawOnRemove = redrawOnRemove;
|
||||||
|
|
||||||
mbeanServer = new ManagementContext().getMBeanServer();
|
|
||||||
ObjectName brokerName = next.getBrokerService().getBrokerObjectName();
|
|
||||||
brokerView = (BrokerViewMBean)MBeanServerInvocationHandler.newProxyInstance(mbeanServer, brokerName, BrokerViewMBean.class, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Subscription addConsumer(ConnectionContext context, ConsumerInfo info) throws Exception {
|
public Subscription addConsumer(ConnectionContext context, ConsumerInfo info) throws Exception {
|
||||||
@ -123,7 +113,7 @@ public class ConnectionDotFileInterceptor extends DotFileInterceptorSupport {
|
|||||||
|
|
||||||
writer.println("digraph \"ActiveMQ Connections\" {");
|
writer.println("digraph \"ActiveMQ Connections\" {");
|
||||||
writer.println();
|
writer.println();
|
||||||
writer.println("label=\"ActiveMQ Broker: " + brokerView.getBrokerId() + "\"];");
|
writer.println("label=\"ActiveMQ Broker: " + getBrokerView().getBrokerId() + "\"];");
|
||||||
writer.println();
|
writer.println();
|
||||||
writer.println("node [style = \"rounded,filled\", fillcolor = yellow, fontname=\"Helvetica-Oblique\"];");
|
writer.println("node [style = \"rounded,filled\", fillcolor = yellow, fontname=\"Helvetica-Oblique\"];");
|
||||||
writer.println();
|
writer.println();
|
||||||
@ -132,10 +122,10 @@ public class ConnectionDotFileInterceptor extends DotFileInterceptorSupport {
|
|||||||
Map<String, String> queues = new HashMap<String, String>();
|
Map<String, String> queues = new HashMap<String, String>();
|
||||||
Map<String, String> topics = new HashMap<String, String>();
|
Map<String, String> topics = new HashMap<String, String>();
|
||||||
|
|
||||||
printSubscribers(writer, clients, queues, "queue_", brokerView.getQueueSubscribers());
|
printSubscribers(writer, clients, queues, "queue_", getBrokerView().getQueueSubscribers());
|
||||||
writer.println();
|
writer.println();
|
||||||
|
|
||||||
printSubscribers(writer, clients, topics, "topic_", brokerView.getTopicSubscribers());
|
printSubscribers(writer, clients, topics, "topic_", getBrokerView().getTopicSubscribers());
|
||||||
writer.println();
|
writer.println();
|
||||||
|
|
||||||
printProducers(writer, clients, queues, topics);
|
printProducers(writer, clients, queues, topics);
|
||||||
@ -210,7 +200,7 @@ public class ConnectionDotFileInterceptor extends DotFileInterceptorSupport {
|
|||||||
protected void printSubscribers(PrintWriter writer, Map<String, String> clients, Map<String, String> destinations, String type, ObjectName[] subscribers) {
|
protected void printSubscribers(PrintWriter writer, Map<String, String> clients, Map<String, String> destinations, String type, ObjectName[] subscribers) {
|
||||||
for (int i = 0; i < subscribers.length; i++) {
|
for (int i = 0; i < subscribers.length; i++) {
|
||||||
ObjectName name = subscribers[i];
|
ObjectName name = subscribers[i];
|
||||||
SubscriptionViewMBean subscriber = (SubscriptionViewMBean)MBeanServerInvocationHandler.newProxyInstance(mbeanServer, name, SubscriptionViewMBean.class, true);
|
SubscriptionViewMBean subscriber = (SubscriptionViewMBean)getBrokerService().getManagementContext().newProxyInstance(name, SubscriptionViewMBean.class, true);
|
||||||
|
|
||||||
String clientId = subscriber.getClientId();
|
String clientId = subscriber.getClientId();
|
||||||
String safeClientId = asID(clientId);
|
String safeClientId = asID(clientId);
|
||||||
@ -332,4 +322,13 @@ public class ConnectionDotFileInterceptor extends DotFileInterceptorSupport {
|
|||||||
}
|
}
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BrokerViewMBean getBrokerView() throws Exception {
|
||||||
|
if (this.brokerView == null) {
|
||||||
|
ObjectName brokerName = getBrokerService().getBrokerObjectName();
|
||||||
|
this.brokerView = (BrokerViewMBean) getBrokerService().getManagementContext().newProxyInstance(brokerName,
|
||||||
|
BrokerViewMBean.class, true);
|
||||||
|
}
|
||||||
|
return this.brokerView;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,22 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.network;
|
package org.apache.activemq.network;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URI;
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
|
||||||
|
|
||||||
import javax.management.MBeanServer;
|
|
||||||
import javax.management.MalformedObjectNameException;
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
|
|
||||||
import org.apache.activemq.Service;
|
import org.apache.activemq.Service;
|
||||||
import org.apache.activemq.broker.BrokerService;
|
import org.apache.activemq.broker.BrokerService;
|
||||||
import org.apache.activemq.broker.jmx.NetworkBridgeView;
|
import org.apache.activemq.broker.jmx.NetworkBridgeView;
|
||||||
@ -45,6 +29,17 @@ import org.apache.activemq.util.ServiceStopper;
|
|||||||
import org.apache.activemq.util.ServiceSupport;
|
import org.apache.activemq.util.ServiceSupport;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
import javax.management.MalformedObjectNameException;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version $Revision$
|
* @version $Revision$
|
||||||
@ -238,16 +233,12 @@ public abstract class NetworkConnector extends NetworkBridgeConfiguration implem
|
|||||||
if (!getBrokerService().isUseJmx()) {
|
if (!getBrokerService().isUseJmx()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
NetworkBridgeViewMBean view = new NetworkBridgeView(bridge);
|
||||||
MBeanServer mbeanServer = getBrokerService().getManagementContext().getMBeanServer();
|
try {
|
||||||
if (mbeanServer != null) {
|
ObjectName objectName = createNetworkBridgeObjectName(bridge);
|
||||||
NetworkBridgeViewMBean view = new NetworkBridgeView(bridge);
|
getBrokerService().getManagementContext().registerMBean(view, objectName);
|
||||||
try {
|
} catch (Throwable e) {
|
||||||
ObjectName objectName = createNetworkBridgeObjectName(bridge);
|
LOG.debug("Network bridge could not be registered in JMX: " + e.getMessage(), e);
|
||||||
mbeanServer.registerMBean(view, objectName);
|
|
||||||
} catch (Throwable e) {
|
|
||||||
LOG.debug("Network bridge could not be registered in JMX: " + e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,15 +246,11 @@ public abstract class NetworkConnector extends NetworkBridgeConfiguration implem
|
|||||||
if (!getBrokerService().isUseJmx()) {
|
if (!getBrokerService().isUseJmx()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
MBeanServer mbeanServer = getBrokerService().getManagementContext().getMBeanServer();
|
ObjectName objectName = createNetworkBridgeObjectName(bridge);
|
||||||
if (mbeanServer != null) {
|
getBrokerService().getManagementContext().unregisterMBean(objectName);
|
||||||
try {
|
} catch (Throwable e) {
|
||||||
ObjectName objectName = createNetworkBridgeObjectName(bridge);
|
LOG.debug("Network bridge could not be unregistered in JMX: " + e.getMessage(), e);
|
||||||
mbeanServer.unregisterMBean(objectName);
|
|
||||||
} catch (Throwable e) {
|
|
||||||
LOG.debug("Network bridge could not be unregistered in JMX: " + e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,15 +16,13 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.transport;
|
package org.apache.activemq.transport;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
|
|
||||||
import org.apache.activemq.broker.jmx.ManagementContext;
|
import org.apache.activemq.broker.jmx.ManagementContext;
|
||||||
import org.apache.activemq.util.IOExceptionSupport;
|
import org.apache.activemq.util.IOExceptionSupport;
|
||||||
import org.apache.activemq.util.LogWriterFinder;
|
import org.apache.activemq.util.LogWriterFinder;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import java.io.IOException;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Singleton class to create TransportLogger objects.
|
* Singleton class to create TransportLogger objects.
|
||||||
@ -201,7 +199,7 @@ public class TransportLoggerFactory {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
this.objectName = new ObjectName(this.managementContext.getJmxDomainName()+":"+ "Type=TransportLoggerControl");
|
this.objectName = new ObjectName(this.managementContext.getJmxDomainName()+":"+ "Type=TransportLoggerControl");
|
||||||
this.managementContext.getMBeanServer().registerMBean(new TransportLoggerControl(this.managementContext),this.objectName);
|
this.managementContext.registerMBean(new TransportLoggerControl(this.managementContext),this.objectName);
|
||||||
|
|
||||||
this.transportLoggerControlCreated = true;
|
this.transportLoggerControlCreated = true;
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ public class TransportLoggerView implements TransportLoggerViewMBean {
|
|||||||
*/
|
*/
|
||||||
private void register() {
|
private void register() {
|
||||||
try {
|
try {
|
||||||
this.managementContext.getMBeanServer().registerMBean(this, this.name);
|
this.managementContext.registerMBean(this, this.name);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Could not register MBean for TransportLoggerView " + id + "with name " + this.name.toString() + ", reason: " + e, e);
|
log.error("Could not register MBean for TransportLoggerView " + id + "with name " + this.name.toString() + ", reason: " + e, e);
|
||||||
}
|
}
|
||||||
@ -138,7 +138,7 @@ public class TransportLoggerView implements TransportLoggerViewMBean {
|
|||||||
TransportLoggerView.transportLoggerViews.remove(this);
|
TransportLoggerView.transportLoggerViews.remove(this);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.managementContext.getMBeanServer().unregisterMBean(this.name);
|
this.managementContext.unregisterMBean(this.name);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Could not unregister MBean for TransportLoggerView " + id + "with name " + this.name.toString() + ", reason: " + e, e);
|
log.error("Could not unregister MBean for TransportLoggerView " + id + "with name " + this.name.toString() + ", reason: " + e, e);
|
||||||
}
|
}
|
||||||
|
@ -910,7 +910,7 @@ public class JMSConsumerTest extends JmsTestSupport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected DestinationViewMBean createView(ActiveMQDestination destination) throws Exception {
|
protected DestinationViewMBean createView(ActiveMQDestination destination) throws Exception {
|
||||||
MBeanServer mbeanServer = broker.getManagementContext().getMBeanServer();
|
|
||||||
String domain = "org.apache.activemq";
|
String domain = "org.apache.activemq";
|
||||||
ObjectName name;
|
ObjectName name;
|
||||||
if (destination.isQueue()) {
|
if (destination.isQueue()) {
|
||||||
@ -918,7 +918,7 @@ public class JMSConsumerTest extends JmsTestSupport {
|
|||||||
} else {
|
} else {
|
||||||
name = new ObjectName(domain + ":BrokerName=localhost,Type=Topic,Destination=test");
|
name = new ObjectName(domain + ":BrokerName=localhost,Type=Topic,Destination=test");
|
||||||
}
|
}
|
||||||
return (DestinationViewMBean)MBeanServerInvocationHandler.newProxyInstance(mbeanServer, name, DestinationViewMBean.class, true);
|
return (DestinationViewMBean)broker.getManagementContext().newProxyInstance(name, DestinationViewMBean.class, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -74,9 +74,8 @@ public class QueuePurgeTest extends TestCase {
|
|||||||
ObjectName queueViewMBeanName = new ObjectName("org.apache.activemq"
|
ObjectName queueViewMBeanName = new ObjectName("org.apache.activemq"
|
||||||
+ ":Type=Queue,Destination=" + queue.getQueueName()
|
+ ":Type=Queue,Destination=" + queue.getQueueName()
|
||||||
+ ",BrokerName=localhost");
|
+ ",BrokerName=localhost");
|
||||||
QueueViewMBean proxy = (QueueViewMBean) MBeanServerInvocationHandler
|
QueueViewMBean proxy = (QueueViewMBean) broker.getManagementContext()
|
||||||
.newProxyInstance(broker.getManagementContext()
|
.newProxyInstance(queueViewMBeanName,
|
||||||
.getMBeanServer(), queueViewMBeanName,
|
|
||||||
QueueViewMBean.class, true);
|
QueueViewMBean.class, true);
|
||||||
return proxy;
|
return proxy;
|
||||||
}
|
}
|
||||||
|
@ -236,9 +236,8 @@ public class NegativeQueueTest extends TestCase {
|
|||||||
|
|
||||||
ObjectName queueViewMBeanName = new ObjectName("org.apache.activemq" + ":Type=Queue,Destination=" +
|
ObjectName queueViewMBeanName = new ObjectName("org.apache.activemq" + ":Type=Queue,Destination=" +
|
||||||
queue.getQueueName() + ",BrokerName=localhost");
|
queue.getQueueName() + ",BrokerName=localhost");
|
||||||
QueueViewMBean proxy = (QueueViewMBean)MBeanServerInvocationHandler.newProxyInstance(
|
QueueViewMBean proxy = (QueueViewMBean) broker.getManagementContext().newProxyInstance(queueViewMBeanName,
|
||||||
broker.getManagementContext().getMBeanServer(),
|
QueueViewMBean.class, true);
|
||||||
queueViewMBeanName, QueueViewMBean.class, true);
|
|
||||||
|
|
||||||
return proxy;
|
return proxy;
|
||||||
}
|
}
|
||||||
|
@ -2,17 +2,6 @@ package org.apache.activemq.bugs;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
|
||||||
import javax.jms.ConnectionFactory;
|
|
||||||
import javax.jms.MessageProducer;
|
|
||||||
import javax.jms.Queue;
|
|
||||||
import javax.jms.QueueBrowser;
|
|
||||||
import javax.jms.Session;
|
|
||||||
import javax.jms.TextMessage;
|
|
||||||
import javax.management.MBeanServer;
|
|
||||||
import javax.management.MBeanServerInvocationHandler;
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
|
|
||||||
import org.apache.activemq.ActiveMQConnection;
|
import org.apache.activemq.ActiveMQConnection;
|
||||||
import org.apache.activemq.ActiveMQConnectionFactory;
|
import org.apache.activemq.ActiveMQConnectionFactory;
|
||||||
import org.apache.activemq.broker.BrokerService;
|
import org.apache.activemq.broker.BrokerService;
|
||||||
@ -23,6 +12,13 @@ import org.apache.activemq.command.ActiveMQDestination;
|
|||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import javax.jms.ConnectionFactory;
|
||||||
|
import javax.jms.MessageProducer;
|
||||||
|
import javax.jms.Queue;
|
||||||
|
import javax.jms.QueueBrowser;
|
||||||
|
import javax.jms.Session;
|
||||||
|
import javax.jms.TextMessage;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test to determine if expired messages are being reaped if there is
|
* Test to determine if expired messages are being reaped if there is
|
||||||
@ -122,7 +118,6 @@ public class MessageExpirationReaperTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected DestinationViewMBean createView(ActiveMQDestination destination) throws Exception {
|
protected DestinationViewMBean createView(ActiveMQDestination destination) throws Exception {
|
||||||
MBeanServer mbeanServer = broker.getManagementContext().getMBeanServer();
|
|
||||||
String domain = "org.apache.activemq";
|
String domain = "org.apache.activemq";
|
||||||
ObjectName name;
|
ObjectName name;
|
||||||
if (destination.isQueue()) {
|
if (destination.isQueue()) {
|
||||||
@ -130,6 +125,7 @@ public class MessageExpirationReaperTest {
|
|||||||
} else {
|
} else {
|
||||||
name = new ObjectName(domain + ":BrokerName=" + brokerName + ",Type=Topic,Destination=" + destinationName);
|
name = new ObjectName(domain + ":BrokerName=" + brokerName + ",Type=Topic,Destination=" + destinationName);
|
||||||
}
|
}
|
||||||
return (DestinationViewMBean)MBeanServerInvocationHandler.newProxyInstance(mbeanServer, name, DestinationViewMBean.class, true);
|
return (DestinationViewMBean) broker.getManagementContext().newProxyInstance(name, DestinationViewMBean.class,
|
||||||
|
true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,29 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.transport.stomp;
|
package org.apache.activemq.transport.stomp;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.Socket;
|
|
||||||
import java.net.SocketTimeoutException;
|
|
||||||
import java.net.URI;
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
import java.net.UnknownHostException;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import javax.jms.BytesMessage;
|
|
||||||
import javax.jms.Connection;
|
|
||||||
import javax.jms.JMSException;
|
|
||||||
import javax.jms.MapMessage;
|
|
||||||
import javax.jms.MessageConsumer;
|
|
||||||
import javax.jms.MessageProducer;
|
|
||||||
import javax.jms.ObjectMessage;
|
|
||||||
import javax.jms.Session;
|
|
||||||
import javax.jms.TextMessage;
|
|
||||||
import javax.management.MBeanServer;
|
|
||||||
import javax.management.MBeanServerInvocationHandler;
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
|
|
||||||
import org.apache.activemq.ActiveMQConnectionFactory;
|
import org.apache.activemq.ActiveMQConnectionFactory;
|
||||||
import org.apache.activemq.CombinationTestSupport;
|
import org.apache.activemq.CombinationTestSupport;
|
||||||
import org.apache.activemq.broker.BrokerFactory;
|
import org.apache.activemq.broker.BrokerFactory;
|
||||||
@ -48,6 +25,25 @@ import org.apache.activemq.command.ActiveMQQueue;
|
|||||||
import org.apache.activemq.command.ActiveMQTextMessage;
|
import org.apache.activemq.command.ActiveMQTextMessage;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.net.SocketTimeoutException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
import javax.jms.BytesMessage;
|
||||||
|
import javax.jms.Connection;
|
||||||
|
import javax.jms.JMSException;
|
||||||
|
import javax.jms.MapMessage;
|
||||||
|
import javax.jms.MessageConsumer;
|
||||||
|
import javax.jms.MessageProducer;
|
||||||
|
import javax.jms.ObjectMessage;
|
||||||
|
import javax.jms.Session;
|
||||||
|
import javax.jms.TextMessage;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
public class StompTest extends CombinationTestSupport {
|
public class StompTest extends CombinationTestSupport {
|
||||||
private static final Log LOG = LogFactory.getLog(StompTest.class);
|
private static final Log LOG = LogFactory.getLog(StompTest.class);
|
||||||
@ -882,12 +878,11 @@ public class StompTest extends CombinationTestSupport {
|
|||||||
|
|
||||||
public void testDurableUnsub() throws Exception {
|
public void testDurableUnsub() throws Exception {
|
||||||
// get broker JMX view
|
// get broker JMX view
|
||||||
MBeanServer mbeanServer = broker.getManagementContext().getMBeanServer();
|
|
||||||
|
|
||||||
String domain = "org.apache.activemq";
|
String domain = "org.apache.activemq";
|
||||||
ObjectName brokerName = new ObjectName(domain + ":Type=Broker,BrokerName=localhost");
|
ObjectName brokerName = new ObjectName(domain + ":Type=Broker,BrokerName=localhost");
|
||||||
|
|
||||||
BrokerViewMBean view = (BrokerViewMBean)MBeanServerInvocationHandler.newProxyInstance(mbeanServer, brokerName, BrokerViewMBean.class, true);
|
BrokerViewMBean view = (BrokerViewMBean)broker.getManagementContext().newProxyInstance(brokerName, BrokerViewMBean.class, true);
|
||||||
|
|
||||||
// connect
|
// connect
|
||||||
String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\nclient-id:test\n\n" + Stomp.NULL;
|
String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\nclient-id:test\n\n" + Stomp.NULL;
|
||||||
|
@ -16,21 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.usecases;
|
package org.apache.activemq.usecases;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
|
||||||
|
|
||||||
import javax.jms.Connection;
|
|
||||||
import javax.jms.DeliveryMode;
|
|
||||||
import javax.jms.Message;
|
|
||||||
import javax.jms.MessageConsumer;
|
|
||||||
import javax.jms.MessageProducer;
|
|
||||||
import javax.jms.Session;
|
|
||||||
import javax.management.MBeanServer;
|
|
||||||
import javax.management.MBeanServerInvocationHandler;
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
|
|
||||||
import junit.framework.Test;
|
|
||||||
|
|
||||||
import org.apache.activemq.ActiveMQConnectionFactory;
|
import org.apache.activemq.ActiveMQConnectionFactory;
|
||||||
import org.apache.activemq.CombinationTestSupport;
|
import org.apache.activemq.CombinationTestSupport;
|
||||||
import org.apache.activemq.broker.BrokerService;
|
import org.apache.activemq.broker.BrokerService;
|
||||||
@ -44,6 +29,16 @@ import org.apache.activemq.store.amq.AMQPersistenceAdapter;
|
|||||||
import org.apache.activemq.util.Wait;
|
import org.apache.activemq.util.Wait;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
import javax.jms.Connection;
|
||||||
|
import javax.jms.DeliveryMode;
|
||||||
|
import javax.jms.Message;
|
||||||
|
import javax.jms.MessageConsumer;
|
||||||
|
import javax.jms.MessageProducer;
|
||||||
|
import javax.jms.Session;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
import junit.framework.Test;
|
||||||
|
|
||||||
public class ExpiredMessagesTest extends CombinationTestSupport {
|
public class ExpiredMessagesTest extends CombinationTestSupport {
|
||||||
|
|
||||||
@ -289,16 +284,18 @@ public class ExpiredMessagesTest extends CombinationTestSupport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected DestinationViewMBean createView(ActiveMQDestination destination) throws Exception {
|
protected DestinationViewMBean createView(ActiveMQDestination destination) throws Exception {
|
||||||
MBeanServer mbeanServer = broker.getManagementContext().getMBeanServer();
|
String domain = "org.apache.activemq";
|
||||||
String domain = "org.apache.activemq";
|
ObjectName name;
|
||||||
ObjectName name;
|
if (destination.isQueue()) {
|
||||||
if (destination.isQueue()) {
|
name = new ObjectName(domain + ":BrokerName=localhost,Type=Queue,Destination="
|
||||||
name = new ObjectName(domain + ":BrokerName=localhost,Type=Queue,Destination=" + destination.getPhysicalName());
|
+ destination.getPhysicalName());
|
||||||
} else {
|
} else {
|
||||||
name = new ObjectName(domain + ":BrokerName=localhost,Type=Topic,Destination=" + destination.getPhysicalName());
|
name = new ObjectName(domain + ":BrokerName=localhost,Type=Topic,Destination="
|
||||||
}
|
+ destination.getPhysicalName());
|
||||||
return (DestinationViewMBean)MBeanServerInvocationHandler.newProxyInstance(mbeanServer, name, DestinationViewMBean.class, true);
|
}
|
||||||
}
|
return (DestinationViewMBean) broker.getManagementContext().newProxyInstance(name, DestinationViewMBean.class,
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
|
||||||
protected void tearDown() throws Exception {
|
protected void tearDown() throws Exception {
|
||||||
connection.stop();
|
connection.stop();
|
||||||
|
@ -16,21 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.usecases;
|
package org.apache.activemq.usecases;
|
||||||
|
|
||||||
import java.util.concurrent.CountDownLatch;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import javax.jms.Connection;
|
|
||||||
import javax.jms.Message;
|
|
||||||
import javax.jms.MessageConsumer;
|
|
||||||
import javax.jms.MessageListener;
|
|
||||||
import javax.jms.MessageProducer;
|
|
||||||
import javax.jms.Session;
|
|
||||||
import javax.management.MBeanServer;
|
|
||||||
import javax.management.MBeanServerInvocationHandler;
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
|
|
||||||
import junit.framework.Test;
|
|
||||||
|
|
||||||
import org.apache.activemq.ActiveMQConnectionFactory;
|
import org.apache.activemq.ActiveMQConnectionFactory;
|
||||||
import org.apache.activemq.CombinationTestSupport;
|
import org.apache.activemq.CombinationTestSupport;
|
||||||
import org.apache.activemq.broker.BrokerService;
|
import org.apache.activemq.broker.BrokerService;
|
||||||
@ -42,6 +27,16 @@ import org.apache.activemq.command.ActiveMQQueue;
|
|||||||
import org.apache.activemq.util.Wait;
|
import org.apache.activemq.util.Wait;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import javax.jms.Connection;
|
||||||
|
import javax.jms.Message;
|
||||||
|
import javax.jms.MessageConsumer;
|
||||||
|
import javax.jms.MessageListener;
|
||||||
|
import javax.jms.MessageProducer;
|
||||||
|
import javax.jms.Session;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
import junit.framework.Test;
|
||||||
|
|
||||||
|
|
||||||
public class ExpiredMessagesWithNoConsumerTest extends CombinationTestSupport {
|
public class ExpiredMessagesWithNoConsumerTest extends CombinationTestSupport {
|
||||||
@ -248,16 +243,16 @@ public class ExpiredMessagesWithNoConsumerTest extends CombinationTestSupport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected DestinationViewMBean createView(ActiveMQDestination destination) throws Exception {
|
protected DestinationViewMBean createView(ActiveMQDestination destination) throws Exception {
|
||||||
MBeanServer mbeanServer = broker.getManagementContext().getMBeanServer();
|
String domain = "org.apache.activemq";
|
||||||
String domain = "org.apache.activemq";
|
ObjectName name;
|
||||||
ObjectName name;
|
if (destination.isQueue()) {
|
||||||
if (destination.isQueue()) {
|
name = new ObjectName(domain + ":BrokerName=localhost,Type=Queue,Destination=test");
|
||||||
name = new ObjectName(domain + ":BrokerName=localhost,Type=Queue,Destination=test");
|
} else {
|
||||||
} else {
|
name = new ObjectName(domain + ":BrokerName=localhost,Type=Topic,Destination=test");
|
||||||
name = new ObjectName(domain + ":BrokerName=localhost,Type=Topic,Destination=test");
|
}
|
||||||
}
|
return (DestinationViewMBean) broker.getManagementContext().newProxyInstance(name, DestinationViewMBean.class,
|
||||||
return (DestinationViewMBean)MBeanServerInvocationHandler.newProxyInstance(mbeanServer, name, DestinationViewMBean.class, true);
|
true);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void tearDown() throws Exception {
|
protected void tearDown() throws Exception {
|
||||||
connection.stop();
|
connection.stop();
|
||||||
|
@ -16,17 +16,13 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.xbean;
|
package org.apache.activemq.xbean;
|
||||||
|
|
||||||
import java.net.URI;
|
|
||||||
import java.util.Hashtable;
|
|
||||||
|
|
||||||
import javax.management.MBeanServer;
|
|
||||||
import javax.management.ObjectName;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.apache.activemq.broker.BrokerFactory;
|
import org.apache.activemq.broker.BrokerFactory;
|
||||||
import org.apache.activemq.broker.BrokerService;
|
import org.apache.activemq.broker.BrokerService;
|
||||||
import org.apache.activemq.util.JMXSupport;
|
import org.apache.activemq.util.JMXSupport;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version $Revision: 1.1 $
|
* @version $Revision: 1.1 $
|
||||||
@ -36,19 +32,14 @@ public class ManagementContextXBeanConfigTest extends TestCase {
|
|||||||
protected BrokerService brokerService;
|
protected BrokerService brokerService;
|
||||||
|
|
||||||
public void testManagmentContextConfiguredCorrectly() throws Exception {
|
public void testManagmentContextConfiguredCorrectly() throws Exception {
|
||||||
|
|
||||||
assertEquals(2011, brokerService.getManagementContext().getConnectorPort());
|
assertEquals(2011, brokerService.getManagementContext().getConnectorPort());
|
||||||
assertEquals("test.domain", brokerService.getManagementContext().getJmxDomainName());
|
assertEquals("test.domain", brokerService.getManagementContext().getJmxDomainName());
|
||||||
|
|
||||||
MBeanServer beanServer = brokerService.getManagementContext().getMBeanServer();
|
|
||||||
|
|
||||||
// Make sure the broker is registered in the right jmx domain.
|
// Make sure the broker is registered in the right jmx domain.
|
||||||
Hashtable<String, String> map = new Hashtable<String, String>();
|
Hashtable<String, String> map = new Hashtable<String, String>();
|
||||||
map.put("Type", "Broker");
|
map.put("Type", "Broker");
|
||||||
map.put("BrokerName", JMXSupport.encodeObjectNamePart("localhost"));
|
map.put("BrokerName", JMXSupport.encodeObjectNamePart("localhost"));
|
||||||
ObjectName on = new ObjectName("test.domain", map);
|
ObjectName on = new ObjectName("test.domain", map);
|
||||||
|
Object value = brokerService.getManagementContext().getAttribute(on, "TotalEnqueueCount");
|
||||||
Object value = beanServer.getAttribute(on, "TotalEnqueueCount");
|
|
||||||
assertNotNull(value);
|
assertNotNull(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user