mirror of https://github.com/apache/activemq.git
tidied up subscription objectNames
git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@384492 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9718909422
commit
6c0df67be6
|
@ -22,7 +22,6 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.management.InstanceNotFoundException;
|
||||
import javax.management.MBeanServer;
|
||||
import javax.management.MalformedObjectNameException;
|
||||
|
@ -34,7 +33,6 @@ 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.BrokerService;
|
||||
import org.apache.activemq.broker.ConnectionContext;
|
||||
|
@ -62,10 +60,8 @@ import org.apache.activemq.util.ServiceStopper;
|
|||
import org.apache.activemq.util.SubscriptionKey;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
|
||||
import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArraySet;
|
||||
|
||||
public class ManagedRegionBroker extends RegionBroker{
|
||||
private static final Log log=LogFactory.getLog(ManagedRegionBroker.class);
|
||||
private final MBeanServer mbeanServer;
|
||||
|
@ -83,12 +79,12 @@ public class ManagedRegionBroker extends RegionBroker{
|
|||
private final Map subscriptionKeys=new ConcurrentHashMap();
|
||||
private final Map subscriptionMap=new ConcurrentHashMap();
|
||||
private final Set registeredMBeans=new CopyOnWriteArraySet();
|
||||
|
||||
/* This is the first broker in the broker interceptor chain. */
|
||||
private Broker contextBroker;
|
||||
|
||||
public ManagedRegionBroker(BrokerService brokerService,MBeanServer mbeanServer,ObjectName brokerObjectName,
|
||||
TaskRunnerFactory taskRunnerFactory,UsageManager memoryManager,PersistenceAdapter adapter) throws IOException{
|
||||
TaskRunnerFactory taskRunnerFactory,UsageManager memoryManager,PersistenceAdapter adapter)
|
||||
throws IOException{
|
||||
super(brokerService,taskRunnerFactory,memoryManager,adapter);
|
||||
this.mbeanServer=mbeanServer;
|
||||
this.brokerObjectName=brokerObjectName;
|
||||
|
@ -98,23 +94,18 @@ public class ManagedRegionBroker extends RegionBroker{
|
|||
super.start();
|
||||
// build all existing durable subscriptions
|
||||
buildExistingSubscriptions();
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected void doStop(ServiceStopper stopper){
|
||||
super.doStop(stopper);
|
||||
|
||||
// lets remove any mbeans not yet removed
|
||||
for(Iterator iter=registeredMBeans.iterator();iter.hasNext();){
|
||||
ObjectName name=(ObjectName) iter.next();
|
||||
try{
|
||||
mbeanServer.unregisterMBean(name);
|
||||
}
|
||||
catch (InstanceNotFoundException e) {
|
||||
}catch(InstanceNotFoundException e){
|
||||
log.warn("The MBean: "+name+" is no longer registered with JMX");
|
||||
}
|
||||
catch (Exception e) {
|
||||
}catch(Exception e){
|
||||
stopper.onException(this,e);
|
||||
}
|
||||
}
|
||||
|
@ -164,32 +155,30 @@ public class ManagedRegionBroker extends RegionBroker{
|
|||
}
|
||||
|
||||
public void registerSubscription(ConnectionContext context,Subscription sub){
|
||||
SubscriptionKey key = new SubscriptionKey(context.getClientId(),sub.getConsumerInfo().getSubcriptionName());
|
||||
Hashtable map=brokerObjectName.getKeyPropertyList();
|
||||
String name = key.toString();
|
||||
String name="";
|
||||
SubscriptionKey key=new SubscriptionKey(context.getClientId(),sub.getConsumerInfo().getSubcriptionName());
|
||||
if(sub.getConsumerInfo().isDurable()){
|
||||
name=key.toString();
|
||||
}
|
||||
if(sub.getConsumerInfo()!=null&&sub.getConsumerInfo().getConsumerId()!=null){
|
||||
name+="."+sub.getConsumerInfo().getConsumerId();
|
||||
}
|
||||
try{
|
||||
|
||||
ObjectName objectName = new ObjectName(
|
||||
brokerObjectName.getDomain()+":"+
|
||||
"BrokerName="+map.get("BrokerName")+","+
|
||||
"Type=Subscription,"+
|
||||
"active=true,"+
|
||||
"name="+JMXSupport.encodeObjectNamePart(name)+""
|
||||
);
|
||||
|
||||
ObjectName objectName=new ObjectName(brokerObjectName.getDomain()+":"+"BrokerName="+map.get("BrokerName")
|
||||
+","+"Type=Subscription,"+"active=true,"+"name="+JMXSupport.encodeObjectNamePart(name)+"");
|
||||
SubscriptionView view;
|
||||
if(sub.getConsumerInfo().isDurable()){
|
||||
view=new DurableSubscriptionView(this,context.getClientId(),sub);
|
||||
}else{
|
||||
if(sub instanceof TopicSubscription){
|
||||
view=new TopicSubscriptionView(context.getClientId(),(TopicSubscription) sub);
|
||||
}
|
||||
else {
|
||||
}else{
|
||||
view=new SubscriptionView(context.getClientId(),sub);
|
||||
}
|
||||
}
|
||||
subscriptionMap.put(sub,objectName);
|
||||
registerSubscription(objectName,sub.getConsumerInfo(),key,view);
|
||||
subscriptionMap.put(sub,objectName);
|
||||
}catch(Exception e){
|
||||
log.error("Failed to register subscription "+sub,e);
|
||||
}
|
||||
|
@ -233,7 +222,8 @@ public class ManagedRegionBroker extends RegionBroker{
|
|||
mbeanServer.unregisterMBean(key);
|
||||
}
|
||||
|
||||
protected void registerSubscription(ObjectName key,ConsumerInfo info,SubscriptionKey subscriptionKey,SubscriptionView view) throws Exception{
|
||||
protected void registerSubscription(ObjectName key,ConsumerInfo info,SubscriptionKey subscriptionKey,
|
||||
SubscriptionView view) throws Exception{
|
||||
ActiveMQDestination dest=info.getDestination();
|
||||
if(dest.isQueue()){
|
||||
if(dest.isTemporary()){
|
||||
|
@ -285,8 +275,6 @@ public class ManagedRegionBroker extends RegionBroker{
|
|||
info.setDestination(new ActiveMQTopic(view.getDestinationName()));
|
||||
addInactiveSubscription(subscriptionKey,info);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
protected void buildExistingSubscriptions() throws Exception{
|
||||
|
@ -300,7 +288,6 @@ public class ManagedRegionBroker extends RegionBroker{
|
|||
SubscriptionInfo[] infos=store.getAllSubscriptions();
|
||||
if(infos!=null){
|
||||
for(int i=0;i<infos.length;i++){
|
||||
|
||||
SubscriptionInfo info=infos[i];
|
||||
log.debug("Restoring durable subscription: "+infos);
|
||||
SubscriptionKey key=new SubscriptionKey(info);
|
||||
|
@ -321,14 +308,9 @@ public class ManagedRegionBroker extends RegionBroker{
|
|||
protected void addInactiveSubscription(SubscriptionKey key,SubscriptionInfo info){
|
||||
Hashtable map=brokerObjectName.getKeyPropertyList();
|
||||
try{
|
||||
ObjectName objectName = new ObjectName(
|
||||
brokerObjectName.getDomain()+":"+
|
||||
"BrokerName="+map.get("BrokerName")+","+
|
||||
"Type=Subscription,"+
|
||||
"active=false,"+
|
||||
"name="+JMXSupport.encodeObjectNamePart(key.toString())+""
|
||||
);
|
||||
|
||||
ObjectName objectName=new ObjectName(brokerObjectName.getDomain()+":"+"BrokerName="+map.get("BrokerName")
|
||||
+","+"Type=Subscription,"+"active=false,"+"name="
|
||||
+JMXSupport.encodeObjectNamePart(key.toString())+"");
|
||||
SubscriptionView view=new InactiveDurableSubscriptionView(this,key.getClientId(),info);
|
||||
registeredMBeans.add(objectName);
|
||||
mbeanServer.registerMBean(view,objectName);
|
||||
|
@ -369,8 +351,6 @@ public class ManagedRegionBroker extends RegionBroker{
|
|||
try{
|
||||
ActiveMQTopic topic=new ActiveMQTopic(view.getDestinationName());
|
||||
TopicMessageStore store=adaptor.createTopicMessageStore(topic);
|
||||
|
||||
|
||||
store.recover(new MessageRecoveryListener(){
|
||||
public void recoverMessage(Message message) throws Exception{
|
||||
result.add(message);
|
||||
|
@ -390,14 +370,17 @@ public class ManagedRegionBroker extends RegionBroker{
|
|||
Set set=topics.keySet();
|
||||
return (ObjectName[]) set.toArray(new ObjectName[set.size()]);
|
||||
}
|
||||
|
||||
protected ObjectName[] getQueues(){
|
||||
Set set=queues.keySet();
|
||||
return (ObjectName[]) set.toArray(new ObjectName[set.size()]);
|
||||
}
|
||||
|
||||
protected ObjectName[] getTemporaryTopics(){
|
||||
Set set=temporaryTopics.keySet();
|
||||
return (ObjectName[]) set.toArray(new ObjectName[set.size()]);
|
||||
}
|
||||
|
||||
protected ObjectName[] getTemporaryQueues(){
|
||||
Set set=temporaryQueues.keySet();
|
||||
return (ObjectName[]) set.toArray(new ObjectName[set.size()]);
|
||||
|
@ -407,18 +390,22 @@ public class ManagedRegionBroker extends RegionBroker{
|
|||
Set set=topicSubscribers.keySet();
|
||||
return (ObjectName[]) set.toArray(new ObjectName[set.size()]);
|
||||
}
|
||||
|
||||
protected ObjectName[] getDurableTopicSubscribers(){
|
||||
Set set=durableTopicSubscribers.keySet();
|
||||
return (ObjectName[]) set.toArray(new ObjectName[set.size()]);
|
||||
}
|
||||
|
||||
protected ObjectName[] getQueueSubscribers(){
|
||||
Set set=queueSubscribers.keySet();
|
||||
return (ObjectName[]) set.toArray(new ObjectName[set.size()]);
|
||||
}
|
||||
|
||||
protected ObjectName[] getTemporaryTopicSubscribers(){
|
||||
Set set=temporaryTopicSubscribers.keySet();
|
||||
return (ObjectName[]) set.toArray(new ObjectName[set.size()]);
|
||||
}
|
||||
|
||||
protected ObjectName[] getTemporaryQueueSubscribers(){
|
||||
Set set=temporaryQueueSubscribers.keySet();
|
||||
return (ObjectName[]) set.toArray(new ObjectName[set.size()]);
|
||||
|
@ -440,12 +427,9 @@ public class ManagedRegionBroker extends RegionBroker{
|
|||
protected ObjectName createObjectName(ActiveMQDestination destName) throws MalformedObjectNameException{
|
||||
// Build the object name for the destination
|
||||
Hashtable map=brokerObjectName.getKeyPropertyList();
|
||||
ObjectName objectName = new ObjectName(
|
||||
brokerObjectName.getDomain()+":"+
|
||||
"BrokerName="+map.get("BrokerName")+","+
|
||||
"Type="+JMXSupport.encodeObjectNamePart(destName.getDestinationTypeAsString())+","+
|
||||
"Destination="+JMXSupport.encodeObjectNamePart(destName.getPhysicalName())
|
||||
);
|
||||
ObjectName objectName=new ObjectName(brokerObjectName.getDomain()+":"+"BrokerName="+map.get("BrokerName")+","
|
||||
+"Type="+JMXSupport.encodeObjectNamePart(destName.getDestinationTypeAsString())+","
|
||||
+"Destination="+JMXSupport.encodeObjectNamePart(destName.getPhysicalName()));
|
||||
return objectName;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue