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.console.util; 018 019import org.apache.activemq.console.filter.*; 020 021import javax.management.Attribute; 022import javax.management.AttributeList; 023import javax.management.MBeanServerConnection; 024import javax.management.ObjectName; 025import java.util.*; 026 027 028public final class JmxMBeansUtil { 029 030 private JmxMBeansUtil() { 031 } 032 033 public static List getAllBrokers(MBeanServerConnection jmxConnection) throws Exception { 034 return (new MBeansObjectNameQueryFilter(jmxConnection)).query("type=Broker,brokerName=*"); 035 } 036 037 public static List getBrokersByName(MBeanServerConnection jmxConnection, String brokerName) throws Exception { 038 return (new MBeansObjectNameQueryFilter(jmxConnection)).query("type=Broker,brokerName=" + brokerName); 039 } 040 041 public static List getAllBrokers(MBeanServerConnection jmxConnection, Set attributes) throws Exception { 042 return (new MBeansAttributeQueryFilter(jmxConnection, attributes, new MBeansObjectNameQueryFilter(jmxConnection))).query("type=Broker"); 043 } 044 045 public static List getBrokersByName(MBeanServerConnection jmxConnection, String brokerName, Set attributes) throws Exception { 046 return (new MBeansAttributeQueryFilter(jmxConnection, attributes, new MBeansObjectNameQueryFilter(jmxConnection))).query("type=Broker,brokerName=" + brokerName); 047 } 048 049 public static List x_queryMBeans(MBeanServerConnection jmxConnection, List queryList) throws Exception { 050 // If there is no query defined get all mbeans 051 if (queryList == null || queryList.size() == 0) { 052 return createMBeansObjectNameQuery(jmxConnection).query(""); 053 054 // Parse through all the query strings 055 } else { 056 return createMBeansObjectNameQuery(jmxConnection).query(queryList); 057 } 058 } 059 060 public static Map<Object, List> queryMBeansAsMap(MBeanServerConnection jmxConnection, List queryList, Set attributes) throws Exception { 061 Map<Object, List> answer = new HashMap<Object, List>(); 062 List<AttributeList> mbeans = queryMBeans(jmxConnection, queryList, attributes); 063 for (AttributeList mbean : mbeans) { 064 for(Attribute attr: mbean.asList()) { 065 if (attr.getName().equals(MBeansAttributeQueryFilter.KEY_OBJECT_NAME_ATTRIBUTE)) { 066 answer.put(attr.getValue(), mbean); 067 } 068 } 069 } 070 return answer; 071 } 072 073 074 public static List queryMBeans(MBeanServerConnection jmxConnection, List queryList, Set attributes) throws Exception { 075 // If there is no query defined get all mbeans 076 if (queryList == null || queryList.size() == 0) { 077 return createMBeansAttributeQuery(jmxConnection, attributes).query(""); 078 079 // Parse through all the query strings 080 } else { 081 return createMBeansAttributeQuery(jmxConnection, attributes).query(queryList); 082 } 083 } 084 085 public static List queryMBeans(MBeanServerConnection jmxConnection, String queryString) throws Exception { 086 return createMBeansObjectNameQuery(jmxConnection).query(queryString); 087 } 088 089 public static List queryMBeans(MBeanServerConnection jmxConnection, String queryString, Set attributes) throws Exception { 090 return createMBeansAttributeQuery(jmxConnection, attributes).query(queryString); 091 } 092 093 public static List filterMBeansView(List mbeans, Set viewFilter) throws Exception { 094 return new PropertiesViewFilter(viewFilter, new MapTransformFilter(new StubQueryFilter(mbeans))).query(""); 095 } 096 097 public static String createQueryString(String query, String param) { 098 return query.replaceAll("%1", param); 099 } 100 101 public static String createQueryString(String query, List params) { 102 String output = query; 103 int count = 1; 104 for (Iterator i = params.iterator(); i.hasNext();) { 105 output = output.replaceAll("%" + count++, i.next().toString()); 106 } 107 108 return output; 109 } 110 111 public static QueryFilter createMBeansObjectNameQuery(MBeanServerConnection jmxConnection) { 112 return new MBeansObjectNameQueryFilter(jmxConnection); 113 } 114 115 public static QueryFilter createMBeansAttributeQuery(MBeanServerConnection jmxConnection, Set attributes) { 116 // Let use be able to accept wildcard queries 117 // Use regular expressions to filter the query result 118 // Retrieve the attributes needed 119 // Retrieve the mbeans object name specified by the query 120 return new MBeansAttributeQueryFilter(jmxConnection, attributes, new MBeansObjectNameQueryFilter(jmxConnection)); 121 } 122 123 public static QueryFilter createMessageQueryFilter(MBeanServerConnection jmxConnection, ObjectName destName) { 124 return new WildcardToMsgSelectorTransformFilter(new MessagesQueryFilter(jmxConnection, destName)); 125 } 126 127 public static List filterMessagesView(List messages, Set groupViews, Set attributeViews) throws Exception { 128 return (new PropertiesViewFilter(attributeViews, new GroupPropertiesViewFilter(groupViews, new MapTransformFilter(new StubQueryFilter(messages))))).query(""); 129 } 130}