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 */ 017package org.apache.activemq.broker.jmx; 018 019import java.util.Hashtable; 020 021import javax.management.MalformedObjectNameException; 022import javax.management.ObjectName; 023 024import org.apache.activemq.broker.region.policy.AbortSlowConsumerStrategy; 025import org.apache.activemq.command.ActiveMQDestination; 026import org.apache.activemq.command.ConsumerInfo; 027import org.apache.activemq.command.ProducerInfo; 028import org.apache.activemq.transaction.XATransaction; 029import org.apache.activemq.util.JMXSupport; 030 031public class BrokerMBeanSupport { 032 033 // MBean Name Creation 034 035 public static ObjectName createBrokerObjectName(String jmxDomainName, String brokerName) throws MalformedObjectNameException { 036 String objectNameStr = jmxDomainName + ":type=Broker,brokerName="; 037 objectNameStr += JMXSupport.encodeObjectNamePart(brokerName); 038 return new ObjectName(objectNameStr); 039 } 040 041 public static ObjectName createDestinationName(ObjectName brokerObjectName, ActiveMQDestination destination) throws MalformedObjectNameException { 042 return createDestinationName(brokerObjectName.toString(), destination); 043 } 044 045 public static ObjectName createDestinationName(String brokerObjectName, ActiveMQDestination destination) throws MalformedObjectNameException { 046 String objectNameStr = brokerObjectName; 047 objectNameStr += createDestinationProperties(destination); 048 return new ObjectName(objectNameStr); 049 } 050 051 public static ObjectName createDestinationName(String brokerObjectName, String type, String name) throws MalformedObjectNameException { 052 String objectNameStr = brokerObjectName; 053 objectNameStr += createDestinationProperties(type, name); 054 return new ObjectName(objectNameStr); 055 } 056 057 private static String createDestinationProperties(ActiveMQDestination destination){ 058 String result = ""; 059 if (destination != null){ 060 result = createDestinationProperties(destination.getDestinationTypeAsString(), destination.getPhysicalName()); 061 } 062 return result; 063 } 064 065 private static String createDestinationProperties(String type, String name){ 066 return ",destinationType="+ JMXSupport.encodeObjectNamePart(type) + 067 ",destinationName=" + JMXSupport.encodeObjectNamePart(name); 068 } 069 070 public static ObjectName createSubscriptionName(ObjectName brokerObjectName, String connectionClientId, ConsumerInfo info) throws MalformedObjectNameException { 071 return createSubscriptionName(brokerObjectName.toString(), connectionClientId, info); 072 } 073 074 public static ObjectName createSubscriptionName(String brokerObjectName, String connectionClientId, ConsumerInfo info) throws MalformedObjectNameException { 075 String objectNameStr = brokerObjectName; 076 objectNameStr += createDestinationProperties(info.getDestination()) + ",endpoint=Consumer"; 077 objectNameStr += ",clientId=" + JMXSupport.encodeObjectNamePart(connectionClientId); 078 objectNameStr += ",consumerId="; 079 080 if (info.isDurable()){ 081 objectNameStr += "Durable(" + JMXSupport.encodeObjectNamePart(connectionClientId + ":" + info.getSubscriptionName()) +")"; 082 } else { 083 objectNameStr += JMXSupport.encodeObjectNamePart(info.getConsumerId().toString()); 084 } 085 086 return new ObjectName(objectNameStr); 087 } 088 089 public static ObjectName createProducerName(ObjectName brokerObjectName, String connectionClientId, ProducerInfo info) throws MalformedObjectNameException { 090 return createProducerName(brokerObjectName.toString(), connectionClientId, info); 091 } 092 093 public static ObjectName createProducerName(String brokerObjectName, String connectionClientId, ProducerInfo producerInfo) throws MalformedObjectNameException { 094 String objectNameStr = brokerObjectName; 095 096 if (producerInfo.getDestination() == null) { 097 objectNameStr += ",endpoint=dynamicProducer"; 098 } else { 099 objectNameStr += createDestinationProperties(producerInfo.getDestination()) + ",endpoint=Producer"; 100 } 101 102 objectNameStr += ",clientId=" + JMXSupport.encodeObjectNamePart(connectionClientId); 103 objectNameStr += ",producerId=" + JMXSupport.encodeObjectNamePart(producerInfo.getProducerId().toString()); 104 105 return new ObjectName(objectNameStr); 106 } 107 108 public static ObjectName createXATransactionName(ObjectName brokerObjectName, XATransaction transaction) throws MalformedObjectNameException { 109 return createXATransactionName(brokerObjectName.toString(), transaction); 110 } 111 112 public static ObjectName createXATransactionName(String brokerObjectName, XATransaction transaction) throws MalformedObjectNameException { 113 String objectNameStr = brokerObjectName; 114 115 objectNameStr += "," + "transactionType=RecoveredXaTransaction"; 116 objectNameStr += "," + "xid=" + JMXSupport.encodeObjectNamePart(transaction.getTransactionId().toString()); 117 118 return new ObjectName(objectNameStr); 119 } 120 121 public static ObjectName createLog4JConfigViewName(String brokerObjectName) throws MalformedObjectNameException { 122 String objectNameStr = brokerObjectName; 123 124 objectNameStr += "," + "service=Log4JConfiguration"; 125 126 return new ObjectName(objectNameStr); 127 } 128 129 public static ObjectName createPersistenceAdapterName(String brokerObjectName, String name) throws MalformedObjectNameException { 130 String objectNameStr = brokerObjectName; 131 132 objectNameStr += "," + "service=PersistenceAdapter"; 133 objectNameStr += "," + "instanceName=" + JMXSupport.encodeObjectNamePart(name); 134 135 return new ObjectName(objectNameStr); 136 } 137 138 public static ObjectName createAbortSlowConsumerStrategyName(ObjectName brokerObjectName, AbortSlowConsumerStrategy strategy) throws MalformedObjectNameException { 139 return createAbortSlowConsumerStrategyName(brokerObjectName.toString(), strategy); 140 } 141 142 public static ObjectName createAbortSlowConsumerStrategyName(String brokerObjectName, AbortSlowConsumerStrategy strategy) throws MalformedObjectNameException { 143 String objectNameStr = brokerObjectName; 144 objectNameStr += ",service=SlowConsumerStrategy,instanceName="+ JMXSupport.encodeObjectNamePart(strategy.getName()); 145 ObjectName objectName = new ObjectName(objectNameStr); 146 return objectName; 147 } 148 149 public static ObjectName createConnectorName(ObjectName brokerObjectName, String type, String name) throws MalformedObjectNameException { 150 return createConnectorName(brokerObjectName.toString(), type, name); 151 } 152 153 public static ObjectName createConnectorName(String brokerObjectName, String type, String name) throws MalformedObjectNameException { 154 String objectNameStr = brokerObjectName; 155 objectNameStr += ",connector=" + type + ",connectorName="+ JMXSupport.encodeObjectNamePart(name); 156 ObjectName objectName = new ObjectName(objectNameStr); 157 return objectName; 158 } 159 160 public static ObjectName createNetworkConnectorName(ObjectName brokerObjectName, String type, String name) throws MalformedObjectNameException { 161 return createNetworkConnectorName(brokerObjectName.toString(), type, name); 162 } 163 164 public static ObjectName createVirtualDestinationSelectorCacheName(ObjectName brokerObjectName, String type, String name) throws MalformedObjectNameException { 165 String objectNameStr = brokerObjectName.toString(); 166 objectNameStr += ",service=" + type + ",virtualDestinationSelectoCache="+ JMXSupport.encodeObjectNamePart(name); 167 ObjectName objectName = new ObjectName(objectNameStr); 168 return objectName; 169 } 170 171 public static ObjectName createNetworkConnectorName(String brokerObjectName, String type, String name) throws MalformedObjectNameException { 172 String objectNameStr = brokerObjectName; 173 objectNameStr += ",connector=" + type + ",networkConnectorName="+ JMXSupport.encodeObjectNamePart(name); 174 ObjectName objectName = new ObjectName(objectNameStr); 175 return objectName; 176 } 177 178 public static ObjectName createConnectionViewByType(ObjectName connectorName, String type, String name) throws MalformedObjectNameException { 179 String objectNameStr = connectorName.toString(); 180 objectNameStr += ",connectionViewType=" + JMXSupport.encodeObjectNamePart(type); 181 objectNameStr += ",connectionName="+ JMXSupport.encodeObjectNamePart(name); 182 return new ObjectName(objectNameStr); 183 } 184 185 public static ObjectName createNetworkBridgeObjectName(ObjectName connectorName, String remoteAddress) throws MalformedObjectNameException { 186 Hashtable<String, String> map = new Hashtable<String, String>(connectorName.getKeyPropertyList()); 187 map.put("networkBridge", JMXSupport.encodeObjectNamePart(remoteAddress)); 188 return new ObjectName(connectorName.getDomain(), map); 189 } 190 191 public static ObjectName createNetworkOutBoundDestinationObjectName(ObjectName networkName, ActiveMQDestination destination) throws MalformedObjectNameException { 192 String str = networkName.toString(); 193 str += ",direction=outbound" + createDestinationProperties(destination); 194 return new ObjectName(str); 195 196 } 197 198 public static ObjectName createNetworkInBoundDestinationObjectName(ObjectName networkName, ActiveMQDestination destination) throws MalformedObjectNameException { 199 String str = networkName.toString(); 200 str += ",direction=inbound" + createDestinationProperties(destination); 201 return new ObjectName(str); 202 203 } 204 205 206 public static ObjectName createProxyConnectorName(ObjectName brokerObjectName, String type, String name) throws MalformedObjectNameException { 207 return createProxyConnectorName(brokerObjectName.toString(), type, name); 208 } 209 210 public static ObjectName createProxyConnectorName(String brokerObjectName, String type, String name) throws MalformedObjectNameException { 211 String objectNameStr = brokerObjectName; 212 objectNameStr += ",connector=" + type + ",proxyConnectorName="+ JMXSupport.encodeObjectNamePart(name); 213 ObjectName objectName = new ObjectName(objectNameStr); 214 return objectName; 215 } 216 217 public static ObjectName createJmsConnectorName(ObjectName brokerObjectName, String type, String name) throws MalformedObjectNameException { 218 return createJmsConnectorName(brokerObjectName.toString(), type, name); 219 } 220 221 public static ObjectName createJmsConnectorName(String brokerObjectName, String type, String name) throws MalformedObjectNameException { 222 String objectNameStr = brokerObjectName; 223 objectNameStr += ",connector=" + type + ",jmsConnectors="+ JMXSupport.encodeObjectNamePart(name); 224 ObjectName objectName = new ObjectName(objectNameStr); 225 return objectName; 226 } 227 228 public static ObjectName createJobSchedulerServiceName(ObjectName brokerObjectName) throws MalformedObjectNameException { 229 return createJobSchedulerServiceName(brokerObjectName.toString()); 230 } 231 232 public static ObjectName createJobSchedulerServiceName(String brokerObjectName) throws MalformedObjectNameException { 233 String objectNameStr = brokerObjectName; 234 objectNameStr += ",service=JobScheduler,name=JMS"; 235 ObjectName objectName = new ObjectName(objectNameStr); 236 return objectName; 237 } 238 239 public static ObjectName createHealthServiceName(ObjectName brokerObjectName) throws MalformedObjectNameException { 240 return createHealthServiceName(brokerObjectName.toString()); 241 } 242 243 public static ObjectName createHealthServiceName(String brokerObjectName) throws MalformedObjectNameException { 244 String objectNameStr = brokerObjectName; 245 objectNameStr += ",service=Health"; 246 ObjectName objectName = new ObjectName(objectNameStr); 247 return objectName; 248 } 249 250 // MBean Query Creation 251 252 public static ObjectName createConnectionQuery(String jmxDomainName, String brokerName, String name) throws MalformedObjectNameException { 253 ObjectName brokerMBeanName = createBrokerObjectName(jmxDomainName, brokerName); 254 return createConnectionQuery(brokerMBeanName.toString(), name); 255 } 256 257 public static ObjectName createConnectionQuery(String brokerMBeanName, String name) throws MalformedObjectNameException { 258 return new ObjectName(brokerMBeanName + "," 259 + "connector=*," + "connectorName=*," + "connectionViewType=*," 260 + "connectionName=" + JMXSupport.encodeObjectNamePart(name)); 261 } 262 263 public static ObjectName createQueueQuery(String brokerMBeanName) throws MalformedObjectNameException { 264 return createConnectionQuery(brokerMBeanName, "*"); 265 } 266 267 public static ObjectName createQueueQuery(String brokerMBeanName, String destinationName) throws MalformedObjectNameException { 268 return new ObjectName(brokerMBeanName + "," 269 + "destinationType=Queue," 270 + "destinationName=" + JMXSupport.encodeObjectNamePart(destinationName)); 271 } 272 273 public static ObjectName createTopicQuery(String brokerMBeanName) throws MalformedObjectNameException { 274 return createConnectionQuery(brokerMBeanName, "*"); 275 } 276 277 public static ObjectName createTopicQuery(String brokerMBeanName, String destinationName) throws MalformedObjectNameException { 278 return new ObjectName(brokerMBeanName + "," 279 + "destinationType=Topic," 280 + "destinationName=" + JMXSupport.encodeObjectNamePart(destinationName)); 281 } 282 283 public static ObjectName createConsumerQueury(String jmxDomainName, String clientId) throws MalformedObjectNameException { 284 return createConsumerQueury(jmxDomainName, null, clientId); 285 } 286 287 public static ObjectName createConsumerQueury(String jmxDomainName, String brokerName, String clientId) throws MalformedObjectNameException { 288 return new ObjectName(jmxDomainName + ":type=Broker,brokerName=" 289 + (brokerName != null ? brokerName : "*") + "," 290 + "destinationType=*,destinationName=*," 291 + "endpoint=Consumer," 292 + "clientId=" + JMXSupport.encodeObjectNamePart(clientId) + "," 293 + "consumerId=*"); 294 } 295 296 public static ObjectName createProducerQueury(String jmxDomainName, String clientId) throws MalformedObjectNameException { 297 return createProducerQueury(jmxDomainName, null, clientId); 298 } 299 300 public static ObjectName createProducerQueury(String jmxDomainName, String brokerName, String clientId) throws MalformedObjectNameException { 301 return new ObjectName(jmxDomainName + ":type=Broker,brokerName=" 302 + (brokerName != null ? brokerName : "*") + "," 303 + "destinationType=*,destinationName=*," 304 + "endpoint=Producer," 305 + "clientId=" + JMXSupport.encodeObjectNamePart(clientId) + "," 306 + "producerId=*"); 307 } 308 309}