You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2006/04/26 15:54:13 UTC
svn commit: r397198 - in
/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker:
./ jmx/ region/
Author: jstrachan
Date: Wed Apr 26 06:54:11 2006
New Revision: 397198
URL: http://svn.apache.org/viewcvs?rev=397198&view=rev
Log:
added some helper methods to make it easier to access management information without having to use explicit JMX APIs
Modified:
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFilter.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/EmptyBroker.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/ErrorBroker.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/MutableBrokerFilter.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/BrokerView.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationView.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationViewMBean.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/ManagementContext.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Region.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/RegionBroker.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFilter.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFilter.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFilter.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFilter.java Wed Apr 26 06:54:11 2006
@@ -16,6 +16,7 @@
*/
package org.apache.activemq.broker;
+import java.util.Map;
import java.util.Set;
import org.apache.activemq.broker.region.Destination;
import org.apache.activemq.broker.region.Subscription;
@@ -56,7 +57,10 @@
return next.getAdaptor(type);
}
-
+ public Map getDestinationMap() {
+ return next.getDestinationMap();
+ }
+
public void acknowledge(ConnectionContext context, MessageAck ack) throws Exception {
next.acknowledge(context, ack);
}
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/EmptyBroker.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/EmptyBroker.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/EmptyBroker.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/EmptyBroker.java Wed Apr 26 06:54:11 2006
@@ -16,6 +16,8 @@
*/
package org.apache.activemq.broker;
+import java.util.Collections;
+import java.util.Map;
import java.util.Set;
import org.apache.activemq.broker.region.Destination;
import org.apache.activemq.broker.region.Subscription;
@@ -54,6 +56,10 @@
return this;
}
return null;
+ }
+
+ public Map getDestinationMap() {
+ return Collections.EMPTY_MAP;
}
public void addConnection(ConnectionContext context,ConnectionInfo info) throws Exception{
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/ErrorBroker.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/ErrorBroker.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/ErrorBroker.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/ErrorBroker.java Wed Apr 26 06:54:11 2006
@@ -16,6 +16,8 @@
*/
package org.apache.activemq.broker;
+import java.util.Collections;
+import java.util.Map;
import java.util.Set;
import org.apache.activemq.broker.region.Destination;
import org.apache.activemq.broker.region.Subscription;
@@ -47,6 +49,10 @@
this.message=message;
}
+ public Map getDestinationMap() {
+ return Collections.EMPTY_MAP;
+ }
+
public Broker getAdaptor(Class type){
if (type.isInstance(this)){
return this;
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/MutableBrokerFilter.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/MutableBrokerFilter.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/MutableBrokerFilter.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/MutableBrokerFilter.java Wed Apr 26 06:54:11 2006
@@ -16,6 +16,7 @@
*/
package org.apache.activemq.broker;
+import java.util.Map;
import java.util.Set;
import org.apache.activemq.broker.region.Destination;
import org.apache.activemq.broker.region.Subscription;
@@ -68,7 +69,11 @@
this.next=next;
}
}
-
+
+ public Map getDestinationMap() {
+ return getNext().getDestinationMap();
+ }
+
public void acknowledge(ConnectionContext context, MessageAck ack) throws Exception {
getNext().acknowledge(context, ack);
}
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/BrokerView.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/BrokerView.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/BrokerView.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/BrokerView.java Wed Apr 26 06:54:11 2006
@@ -38,6 +38,10 @@
this.broker = managedBroker;
}
+ public ManagedRegionBroker getBroker() {
+ return broker;
+ }
+
public String getBrokerId() {
return broker.getBrokerId().toString();
}
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationView.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationView.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationView.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationView.java Wed Apr 26 06:54:11 2006
@@ -45,8 +45,13 @@
this.destination=destination;
}
+
public void gc(){
destination.gc();
+ }
+
+ public String getName() {
+ return destination.getActiveMQDestination().getPhysicalName();
}
public void resetStatistics(){
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationViewMBean.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationViewMBean.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationViewMBean.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/DestinationViewMBean.java Wed Apr 26 06:54:11 2006
@@ -25,6 +25,11 @@
public interface DestinationViewMBean {
+ /**
+ * Returns the name of this destination
+ */
+ public String getName();
+
/**
* Resets the managment counters.
*/
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/ManagementContext.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/ManagementContext.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/ManagementContext.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/jmx/ManagementContext.java Wed Apr 26 06:54:11 2006
@@ -14,6 +14,8 @@
package org.apache.activemq.broker.jmx;
import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.rmi.registry.LocateRegistry;
import java.util.List;
@@ -27,6 +29,7 @@
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
import org.apache.activemq.Service;
+import org.apache.activemq.util.ClassLoading;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicBoolean;
@@ -49,6 +52,7 @@
private boolean createMBeanServer=true;
private boolean locallyCreateMBeanServer=false;
private boolean createConnector=true;
+ private boolean findTigerMbeanServer=false;
private int connectorPort=1099;
private String connectorPath="/jmxrmi";
private AtomicBoolean started=new AtomicBoolean(false);
@@ -186,6 +190,17 @@
this.createMBeanServer=enableJMX;
}
+ public boolean isFindTigerMbeanServer() {
+ return findTigerMbeanServer;
+ }
+
+ /**
+ * Enables/disables the searching for the Java 5 platform MBeanServer
+ */
+ public void setFindTigerMbeanServer(boolean findTigerMbeanServer) {
+ this.findTigerMbeanServer = findTigerMbeanServer;
+ }
+
/**
* Formulate and return the MBean ObjectName of a custom control MBean
*
@@ -261,11 +276,16 @@
// create the mbean server
try{
if(useMBeanServer){
- // lets piggy back on another MBeanServer -
- // we could be in an appserver!
- List list=MBeanServerFactory.findMBeanServer(null);
- if(list!=null&&list.size()>0){
- result=(MBeanServer) list.get(0);
+ if (findTigerMbeanServer) {
+ result = findTigerMBeanServer();
+ }
+ if (result == null) {
+ // lets piggy back on another MBeanServer -
+ // we could be in an appserver!
+ List list=MBeanServerFactory.findMBeanServer(null);
+ if(list!=null&&list.size()>0){
+ result=(MBeanServer) list.get(0);
+ }
}
}
if(result==null&&createMBeanServer){
@@ -278,6 +298,49 @@
log.error("Failed to initialize MBeanServer",e);
}
return result;
+ }
+
+ public static MBeanServer findTigerMBeanServer() {
+ String name = "java.lang.management.ManagementFactory";
+ Class type = loadClass(name, ManagementContext.class.getClassLoader());
+ if (type != null) {
+ try {
+ Method method = type.getMethod("getPlatformMBeanServer", new Class[0]);
+ if (method != null) {
+ Object answer = method.invoke(null, new Object[0]);
+ if (answer instanceof MBeanServer) {
+ return (MBeanServer) answer;
+ }
+ else {
+ log.warn("Could not cast: " + answer + " into an MBeanServer. There must be some classloader strangeness in town");
+ }
+ }
+ else {
+ log.warn("Method getPlatformMBeanServer() does not appear visible on type: " + type.getName());
+ }
+ }
+ catch (Exception e) {
+ log.warn("Failed to call getPlatformMBeanServer() due to: " + e, e);
+ }
+ }
+ else {
+ log.trace("Class not found: " + name + " so probably running on Java 1.4");
+ }
+ return null;
+ }
+
+ private static Class loadClass(String name, ClassLoader loader) {
+ try {
+ return loader.loadClass(name);
+ }
+ catch (ClassNotFoundException e) {
+ try {
+ return Thread.currentThread().getContextClassLoader().loadClass(name);
+ }
+ catch (ClassNotFoundException e1) {
+ return null;
+ }
+ }
}
/**
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java Wed Apr 26 06:54:11 2006
@@ -16,7 +16,9 @@
*/
package org.apache.activemq.broker.region;
+import java.util.HashMap;
import java.util.Iterator;
+import java.util.Map;
import java.util.Set;
import javax.jms.JMSException;
@@ -109,6 +111,12 @@
}else{
log.debug("Destination doesn't exist: " + dest);
}
+ }
+ }
+
+ public Map getDestinationMap() {
+ synchronized(destinationsMutex){
+ return new HashMap(destinations);
}
}
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java Wed Apr 26 06:54:11 2006
@@ -349,6 +349,10 @@
return destination;
}
+ public String getDestination() {
+ return destination.getPhysicalName();
+ }
+
public UsageManager getUsageManager() {
return usageManager;
}
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Region.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Region.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Region.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Region.java Wed Apr 26 06:54:11 2006
@@ -25,6 +25,8 @@
import org.apache.activemq.command.MessageDispatchNotification;
import org.apache.activemq.command.RemoveSubscriptionInfo;
+import java.util.Map;
+
/**
* A Region is used to implement the different QOS options available to
* a broker. A Broker is composed of multiple message processing Regions that
@@ -56,6 +58,14 @@
* @throws Exception TODO
*/
public void removeDestination(ConnectionContext context, ActiveMQDestination destination, long timeout) throws Exception;
+
+ /**
+ * Returns a copy of the current destinations available in the region
+ *
+ * @return a copy of the regions currently active at the time of the call with the key the destination and the value the Destination.
+ */
+ public Map getDestinationMap();
+
/**
* Adds a consumer.
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/RegionBroker.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/RegionBroker.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/RegionBroker.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/RegionBroker.java Wed Apr 26 06:54:11 2006
@@ -97,11 +97,33 @@
tempTopicRegion = createTempTopicRegion(memoryManager, taskRunnerFactory);
}
+ public Map getDestinationMap() {
+ Map answer = getQueueRegion().getDestinationMap();
+ answer.putAll(getTopicRegion().getDestinationMap());
+ return answer;
+ }
+
public Broker getAdaptor(Class type){
if (type.isInstance(this)){
return this;
}
return null;
+ }
+
+ public Region getQueueRegion() {
+ return queueRegion;
+ }
+
+ public Region getTempQueueRegion() {
+ return tempQueueRegion;
+ }
+
+ public Region getTempTopicRegion() {
+ return tempTopicRegion;
+ }
+
+ public Region getTopicRegion() {
+ return topicRegion;
}
protected Region createTempTopicRegion(UsageManager memoryManager, TaskRunnerFactory taskRunnerFactory) {
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java?rev=397198&r1=397197&r2=397198&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Topic.java Wed Apr 26 06:54:11 2006
@@ -339,6 +339,10 @@
return destination;
}
+ public String getDestination() {
+ return destination.getPhysicalName();
+ }
+
public DispatchPolicy getDispatchPolicy() {
return dispatchPolicy;
}