001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.activemq.web; 018 019 import org.apache.activemq.broker.jmx.BrokerViewMBean; 020 import org.apache.activemq.broker.jmx.ConnectionViewMBean; 021 import org.apache.activemq.broker.jmx.ConnectorViewMBean; 022 import org.apache.activemq.broker.jmx.DestinationViewMBean; 023 import org.apache.activemq.broker.jmx.DurableSubscriptionViewMBean; 024 import org.apache.activemq.broker.jmx.ManagementContext; 025 import org.apache.activemq.broker.jmx.NetworkConnectorViewMBean; 026 import org.apache.activemq.broker.jmx.QueueViewMBean; 027 import org.apache.activemq.broker.jmx.SubscriptionViewMBean; 028 import org.apache.activemq.broker.jmx.TopicViewMBean; 029 import org.springframework.util.StringUtils; 030 import java.util.ArrayList; 031 import java.util.Collection; 032 import java.util.Collections; 033 import java.util.Iterator; 034 import java.util.List; 035 import java.util.Set; 036 import javax.management.ObjectName; 037 /** 038 * A useful base class for an implementation of {@link BrokerFacade} 039 * 040 * @version $Revision: 915387 $ 041 */ 042 public abstract class BrokerFacadeSupport implements BrokerFacade { 043 public abstract ManagementContext getManagementContext(); 044 045 public Collection<QueueViewMBean> getQueues() throws Exception { 046 BrokerViewMBean broker = getBrokerAdmin(); 047 if (broker == null) { 048 return Collections.EMPTY_LIST; 049 } 050 ObjectName[] queues = broker.getQueues(); 051 return getManagedObjects(queues, QueueViewMBean.class); 052 } 053 054 public Collection<TopicViewMBean> getTopics() throws Exception { 055 BrokerViewMBean broker = getBrokerAdmin(); 056 if (broker == null) { 057 return Collections.EMPTY_LIST; 058 } 059 ObjectName[] queues = broker.getTopics(); 060 return getManagedObjects(queues, TopicViewMBean.class); 061 } 062 063 public Collection<DurableSubscriptionViewMBean> getDurableTopicSubscribers() throws Exception { 064 BrokerViewMBean broker = getBrokerAdmin(); 065 if (broker == null) { 066 return Collections.EMPTY_LIST; 067 } 068 ObjectName[] queues = broker.getDurableTopicSubscribers(); 069 return getManagedObjects(queues, DurableSubscriptionViewMBean.class); 070 } 071 072 public QueueViewMBean getQueue(String name) throws Exception { 073 return (QueueViewMBean) getDestinationByName(getQueues(), name); 074 } 075 076 public TopicViewMBean getTopic(String name) throws Exception { 077 return (TopicViewMBean) getDestinationByName(getTopics(), name); 078 } 079 080 protected DestinationViewMBean getDestinationByName(Collection<? extends DestinationViewMBean> collection, 081 String name) { 082 Iterator<? extends DestinationViewMBean> iter = collection.iterator(); 083 while (iter.hasNext()) { 084 DestinationViewMBean destinationViewMBean = iter.next(); 085 if (name.equals(destinationViewMBean.getName())) { 086 return destinationViewMBean; 087 } 088 } 089 return null; 090 } 091 092 @SuppressWarnings("unchecked") 093 protected <T> Collection<T> getManagedObjects(ObjectName[] names, Class<T> type) { 094 List<T> answer = new ArrayList<T>(); 095 for (int i = 0; i < names.length; i++) { 096 ObjectName name = names[i]; 097 T value = (T) getManagementContext().newProxyInstance(name, type, true); 098 if (value != null) { 099 answer.add(value); 100 } 101 } 102 return answer; 103 } 104 105 106 107 @SuppressWarnings("unchecked") 108 public Collection<ConnectionViewMBean> getConnections() throws Exception { 109 String brokerName = getBrokerName(); 110 ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName + ",Type=Connection,*"); 111 System.out.println(query); 112 Set<ObjectName> queryResult = getManagementContext().queryNames(query, null); 113 return getManagedObjects(queryResult.toArray(new ObjectName[queryResult.size()]), ConnectionViewMBean.class); 114 } 115 116 @SuppressWarnings("unchecked") 117 public Collection<String> getConnections(String connectorName) throws Exception { 118 String brokerName = getBrokerName(); 119 ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName 120 + ",Type=Connection,ConnectorName=" + connectorName + ",*"); 121 Set<ObjectName> queryResult = getManagementContext().queryNames(query, null); 122 Collection<String> result = new ArrayList<String>(queryResult.size()); 123 for (ObjectName on : queryResult) { 124 String name = StringUtils.replace(on.getKeyProperty("Connection"), "_", ":"); 125 result.add(name); 126 } 127 return result; 128 } 129 130 @SuppressWarnings("unchecked") 131 public ConnectionViewMBean getConnection(String connectionName) throws Exception { 132 connectionName = StringUtils.replace(connectionName, ":", "_"); 133 String brokerName = getBrokerName(); 134 ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName 135 + ",Type=Connection,*,Connection=" + connectionName); 136 Set<ObjectName> queryResult = getManagementContext().queryNames(query, null); 137 if (queryResult.size() == 0) 138 return null; 139 ObjectName objectName = queryResult.iterator().next(); 140 return (ConnectionViewMBean) getManagementContext().newProxyInstance(objectName, 141 ConnectionViewMBean.class, true); 142 } 143 144 @SuppressWarnings("unchecked") 145 public Collection<String> getConnectors() throws Exception { 146 String brokerName = getBrokerName(); 147 ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName + ",Type=Connector,*"); 148 Set<ObjectName> queryResult = getManagementContext().queryNames(query, null); 149 Collection<String> result = new ArrayList<String>(queryResult.size()); 150 for (ObjectName on : queryResult) 151 result.add(on.getKeyProperty("ConnectorName")); 152 return result; 153 } 154 155 public ConnectorViewMBean getConnector(String name) throws Exception { 156 String brokerName = getBrokerName(); 157 ObjectName objectName = new ObjectName("org.apache.activemq:BrokerName=" + brokerName 158 + ",Type=Connector,ConnectorName=" + name); 159 return (ConnectorViewMBean) getManagementContext().newProxyInstance(objectName, 160 ConnectorViewMBean.class, true); 161 } 162 163 @SuppressWarnings("unchecked") 164 public Collection<NetworkConnectorViewMBean> getNetworkConnectors() throws Exception { 165 String brokerName = getBrokerName(); 166 ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName + ",Type=NetworkConnector,*"); 167 Set<ObjectName> queryResult = getManagementContext().queryNames(query, null); 168 return getManagedObjects(queryResult.toArray(new ObjectName[queryResult.size()]), 169 NetworkConnectorViewMBean.class); 170 } 171 172 @SuppressWarnings("unchecked") 173 public Collection<SubscriptionViewMBean> getQueueConsumers(String queueName) throws Exception { 174 String brokerName = getBrokerName(); 175 queueName = StringUtils.replace(queueName, "\"", "_"); 176 ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName 177 + ",Type=Subscription,destinationType=Queue,destinationName=" + queueName + ",*"); 178 Set<ObjectName> queryResult = getManagementContext().queryNames(query, null); 179 return getManagedObjects(queryResult.toArray(new ObjectName[queryResult.size()]), SubscriptionViewMBean.class); 180 } 181 182 @SuppressWarnings("unchecked") 183 public Collection<SubscriptionViewMBean> getConsumersOnConnection(String connectionName) throws Exception { 184 connectionName = StringUtils.replace(connectionName, ":", "_"); 185 String brokerName = getBrokerName(); 186 ObjectName query = new ObjectName("org.apache.activemq:BrokerName=" + brokerName 187 + ",Type=Subscription,clientId=" + connectionName + ",*"); 188 Set<ObjectName> queryResult = getManagementContext().queryNames(query, null); 189 return getManagedObjects(queryResult.toArray(new ObjectName[queryResult.size()]), SubscriptionViewMBean.class); 190 } 191 }