package com.revolsys.jmx; import java.io.IOException; import java.net.MalformedURLException; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeMap; import javax.management.AttributeNotFoundException; import javax.management.InstanceNotFoundException; import javax.management.IntrospectionException; import javax.management.MBeanAttributeInfo; import javax.management.MBeanException; import javax.management.MBeanInfo; import javax.management.MBeanServer; import javax.management.MBeanServerConnection; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.ReflectionException; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; /** * Submit a job for the business application mapTileByLocation using a URL as * the location of the batch job requests data. Wait for job processing to be * completed. Get the results, extract the map names, remove duplicates, sort * the resulting list and display the short list of map names. */ public class JmxUtil { public static void close(final JMXConnector jmxConnector) { if (jmxConnector != null) { try { jmxConnector.close(); } catch (final IOException e) { e.printStackTrace(); } } } public static JMXConnector getJmxConnector(final String connectorString) { return getJmxConnector(connectorString, "", ""); } public static JMXConnector getJmxConnector(final String connectorString, final String userName, final String password) { final HashMap<String, String[]> environment = new HashMap<>(); final String[] jmxCredentials = new String[] { userName, password }; environment.put(JMXConnector.CREDENTIALS, jmxCredentials); // Get JMXServiceURL of JMX Connector (must be known in advance) JMXServiceURL jmxServiceUrl; JMXConnector jmxConnector = null; try { jmxServiceUrl = new JMXServiceURL(connectorString); jmxConnector = JMXConnectorFactory.connect(jmxServiceUrl, environment); } catch (final MalformedURLException e) { e.printStackTrace(); } catch (final IOException e) { e.printStackTrace(); } return jmxConnector; } public static MBeanAttributeInfo getMBeanAttribute(final MBeanServerConnection connection, final String nameString, final String attributeName) { MBeanAttributeInfo attribute = null; ObjectName objectName; try { objectName = new ObjectName(nameString); MBeanInfo mBeanInfo; mBeanInfo = connection.getMBeanInfo(objectName); final MBeanAttributeInfo[] attributes = mBeanInfo.getAttributes(); for (final MBeanAttributeInfo thisAttribute : attributes) { if (thisAttribute.getName().equals(attributeName)) { attribute = thisAttribute; break; } } } catch (final InstanceNotFoundException e) { e.printStackTrace(); } catch (final IntrospectionException e) { e.printStackTrace(); } catch (final ReflectionException e) { e.printStackTrace(); } catch (final IOException e) { e.printStackTrace(); } catch (final MalformedObjectNameException e) { e.printStackTrace(); } catch (final NullPointerException e) { e.printStackTrace(); } return attribute; } @SuppressWarnings("unchecked") public static Map<String, MBeanAttributeInfo[]> getMBeanAttributes(final MBeanServer mBeanServer, final String objectNameString) { Map<String, MBeanAttributeInfo[]> attributesMap = null; Set<ObjectName> objectNames; try { objectNames = mBeanServer.queryNames(new ObjectName(objectNameString), null); attributesMap = new TreeMap<>(); for (final ObjectName objectName : objectNames) { MBeanInfo mBeanInfo; mBeanInfo = mBeanServer.getMBeanInfo(objectName); final MBeanAttributeInfo[] attributes = mBeanInfo.getAttributes(); attributesMap.put(objectName.getCanonicalName(), attributes); } } catch (final InstanceNotFoundException e) { e.printStackTrace(); } catch (final IntrospectionException e) { e.printStackTrace(); } catch (final ReflectionException e) { e.printStackTrace(); } catch (final MalformedObjectNameException e) { e.printStackTrace(); } catch (final NullPointerException e) { e.printStackTrace(); } return attributesMap; } @SuppressWarnings("unchecked") public static Map<String, MBeanAttributeInfo[]> getMBeanAttributes( final MBeanServerConnection connection, final String objectNameString) { Map<String, MBeanAttributeInfo[]> attributesMap = null; Set<ObjectName> objectNames; try { objectNames = connection.queryNames(new ObjectName(objectNameString), null); attributesMap = new TreeMap<>(); for (final ObjectName objectName : objectNames) { MBeanInfo mBeanInfo; mBeanInfo = connection.getMBeanInfo(objectName); final MBeanAttributeInfo[] attributes = mBeanInfo.getAttributes(); attributesMap.put(objectName.getCanonicalName(), attributes); } } catch (final InstanceNotFoundException e) { e.printStackTrace(); } catch (final IntrospectionException e) { e.printStackTrace(); } catch (final ReflectionException e) { e.printStackTrace(); } catch (final MalformedObjectNameException e) { e.printStackTrace(); } catch (final NullPointerException e) { e.printStackTrace(); } catch (final IOException e) { e.printStackTrace(); } return attributesMap; } public static Object getMBeanAttributeValue(final MBeanServerConnection connection, final ObjectName objName, final String attributeName) { Object attributeValue = "Unavailable"; try { attributeValue = connection.getAttribute(objName, attributeName); } catch (final AttributeNotFoundException e) { // e.printStackTrace(); } catch (final MBeanException e) { // e.printStackTrace(); } catch (final InstanceNotFoundException e) { // e.printStackTrace(); } catch (final ReflectionException e) { // e.printStackTrace(); } catch (final IOException e) { // e.printStackTrace(); } catch (final NullPointerException e) { // e.printStackTrace(); } catch (final Exception e) { // e.printStackTrace(); } return attributeValue; } public static Object getMBeanAttributeValue(final MBeanServerConnection connection, final String nameString, final String attributeName) { Object attributeValue = null; ObjectName objName; try { objName = new ObjectName(nameString); attributeValue = getMBeanAttributeValue(connection, objName, attributeName); } catch (final MalformedObjectNameException e) { e.printStackTrace(); } catch (final NullPointerException e) { e.printStackTrace(); } return attributeValue; } public static MBeanServerConnection getMbeanServerConnection(final JMXConnector jmxConnector) { MBeanServerConnection mBeanServerConnection = null; if (jmxConnector != null) { try { mBeanServerConnection = jmxConnector.getMBeanServerConnection(); } catch (final IOException e) { e.printStackTrace(); } } return mBeanServerConnection; } public static void printAttributesMapValues(final MBeanServerConnection connection, final Map<String, MBeanAttributeInfo[]> attributesMap) { for (final String objectNameStr : attributesMap.keySet()) { System.out.println("\nobjectName=" + objectNameStr); final MBeanAttributeInfo[] attributes = attributesMap.get(objectNameStr); ObjectName objectName; try { objectName = new ObjectName(objectNameStr); for (final MBeanAttributeInfo attribute : attributes) { final String attributeName = attribute.getName(); System.out.print(" name=" + attributeName); final String attributeType = attribute.getType(); System.out.print(" type=" + attributeType); if (attribute.isReadable()) { Object attributeValue = null; attributeValue = JmxUtil.getMBeanAttributeValue(connection, objectName, attributeName); if (attributeValue != null) { System.out.print(" value=" + attributeValue); } } System.out.println(""); } } catch (final MalformedObjectNameException e) { e.printStackTrace(); } catch (final NullPointerException e) { e.printStackTrace(); } } } public static void printAttributeValue(final MBeanServerConnection connection, final String objectNameString, final MBeanAttributeInfo attribute) { final String attributeName = attribute.getName(); System.out.println("objectName=" + objectNameString + " " + attributeName + "=" + JmxUtil.getMBeanAttributeValue(connection, objectNameString, attributeName)); } }