org.springframework.jmx.support

Class JmxUtils

  • java.lang.Object
    • org.springframework.jmx.support.JmxUtils


  • public abstract class JmxUtils
    extends java.lang.Object
    Collection of generic utility methods to support Spring JMX. Includes a convenient method to locate an MBeanServer.
    Since:
    1.2
    Author:
    Rob Harrop, Juergen Hoeller
    See Also:
    locateMBeanServer()
    • Field Summary

      Fields 
      Modifier and Type Field and Description
      static java.lang.String IDENTITY_OBJECT_NAME_KEY
      The key used when extending an existing ObjectName with the identity hash code of its corresponding managed resource.
    • Constructor Summary

      Constructors 
      Constructor and Description
      JmxUtils() 
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method and Description
      static javax.management.ObjectName appendIdentityToObjectName(javax.management.ObjectName objectName, java.lang.Object managedResource)
      Append an additional key/value pair to an existing ObjectName with the key being the static value identity and the value being the identity hash code of the managed resource being exposed on the supplied ObjectName.
      static java.lang.String getAttributeName(java.beans.PropertyDescriptor property, boolean useStrictCasing)
      Return the JMX attribute name to use for the given JavaBeans property.
      static java.lang.Class<?> getClassToExpose(java.lang.Class<?> clazz)
      Return the class or interface to expose for the given bean class.
      static java.lang.Class<?> getClassToExpose(java.lang.Object managedBean)
      Return the class or interface to expose for the given bean.
      static java.lang.Class<?> getMBeanInterface(java.lang.Class<?> clazz)
      Return the Standard MBean interface for the given class, if any (that is, an interface whose name matches the class name of the given class but with suffix "MBean").
      static java.lang.String[] getMethodSignature(java.lang.reflect.Method method)
      Create a String[] representing the argument signature of a method.
      static java.lang.Class<?> getMXBeanInterface(java.lang.Class<?> clazz)
      Return the Java 6 MXBean interface exists for the given class, if any (that is, an interface whose name ends with "MXBean" and/or carries an appropriate MXBean annotation).
      static boolean isMBean(java.lang.Class<?> clazz)
      Determine whether the given bean class qualifies as an MBean as-is.
      static javax.management.MBeanServer locateMBeanServer()
      Attempt to find a locally running MBeanServer.
      static javax.management.MBeanServer locateMBeanServer(java.lang.String agentId)
      Attempt to find a locally running MBeanServer.
      static java.lang.Class<?>[] parameterInfoToTypes(javax.management.MBeanParameterInfo[] paramInfo)
      Convert an array of MBeanParameterInfo into an array of Class instances corresponding to the parameters.
      static java.lang.Class<?>[] parameterInfoToTypes(javax.management.MBeanParameterInfo[] paramInfo, java.lang.ClassLoader classLoader)
      Convert an array of MBeanParameterInfo into an array of Class instances corresponding to the parameters.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • IDENTITY_OBJECT_NAME_KEY

        public static final java.lang.String IDENTITY_OBJECT_NAME_KEY
        The key used when extending an existing ObjectName with the identity hash code of its corresponding managed resource.
        See Also:
        Constant Field Values
    • Constructor Detail

      • JmxUtils

        public JmxUtils()
    • Method Detail

      • locateMBeanServer

        public static javax.management.MBeanServer locateMBeanServer()
                                                              throws MBeanServerNotFoundException
        Attempt to find a locally running MBeanServer. Fails if no MBeanServer can be found. Logs a warning if more than one MBeanServer found, returning the first one from the list.
        Returns:
        the MBeanServer if found
        Throws:
        MBeanServerNotFoundException - if no MBeanServer could be found
        See Also:
        MBeanServerFactory.findMBeanServer(java.lang.String)
      • locateMBeanServer

        public static javax.management.MBeanServer locateMBeanServer(@Nullable
                                                                     java.lang.String agentId)
                                                              throws MBeanServerNotFoundException
        Attempt to find a locally running MBeanServer. Fails if no MBeanServer can be found. Logs a warning if more than one MBeanServer found, returning the first one from the list.
        Parameters:
        agentId - the agent identifier of the MBeanServer to retrieve. If this parameter is null, all registered MBeanServers are considered. If the empty String is given, the platform MBeanServer will be returned.
        Returns:
        the MBeanServer if found
        Throws:
        MBeanServerNotFoundException - if no MBeanServer could be found
        See Also:
        MBeanServerFactory.findMBeanServer(String)
      • parameterInfoToTypes

        @Nullable
        public static java.lang.Class<?>[] parameterInfoToTypes(@Nullable
                                                                          javax.management.MBeanParameterInfo[] paramInfo)
                                                                   throws java.lang.ClassNotFoundException
        Convert an array of MBeanParameterInfo into an array of Class instances corresponding to the parameters.
        Parameters:
        paramInfo - the JMX parameter info
        Returns:
        the parameter types as classes
        Throws:
        java.lang.ClassNotFoundException - if a parameter type could not be resolved
      • parameterInfoToTypes

        @Nullable
        public static java.lang.Class<?>[] parameterInfoToTypes(@Nullable
                                                                          javax.management.MBeanParameterInfo[] paramInfo,
                                                                          @Nullable
                                                                          java.lang.ClassLoader classLoader)
                                                                   throws java.lang.ClassNotFoundException
        Convert an array of MBeanParameterInfo into an array of Class instances corresponding to the parameters.
        Parameters:
        paramInfo - the JMX parameter info
        classLoader - the ClassLoader to use for loading parameter types
        Returns:
        the parameter types as classes
        Throws:
        java.lang.ClassNotFoundException - if a parameter type could not be resolved
      • getMethodSignature

        public static java.lang.String[] getMethodSignature(java.lang.reflect.Method method)
        Create a String[] representing the argument signature of a method. Each element in the array is the fully qualified class name of the corresponding argument in the methods signature.
        Parameters:
        method - the method to build an argument signature for
        Returns:
        the signature as array of argument types
      • getAttributeName

        public static java.lang.String getAttributeName(java.beans.PropertyDescriptor property,
                                                        boolean useStrictCasing)
        Return the JMX attribute name to use for the given JavaBeans property.

        When using strict casing, a JavaBean property with a getter method such as getFoo() translates to an attribute called Foo. With strict casing disabled, getFoo() would translate to just foo.

        Parameters:
        property - the JavaBeans property descriptor
        useStrictCasing - whether to use strict casing
        Returns:
        the JMX attribute name to use
      • appendIdentityToObjectName

        public static javax.management.ObjectName appendIdentityToObjectName(javax.management.ObjectName objectName,
                                                                             java.lang.Object managedResource)
                                                                      throws javax.management.MalformedObjectNameException
        Append an additional key/value pair to an existing ObjectName with the key being the static value identity and the value being the identity hash code of the managed resource being exposed on the supplied ObjectName. This can be used to provide a unique ObjectName for each distinct instance of a particular bean or class. Useful when generating ObjectNames at runtime for a set of managed resources based on the template value supplied by a ObjectNamingStrategy.
        Parameters:
        objectName - the original JMX ObjectName
        managedResource - the MBean instance
        Returns:
        an ObjectName with the MBean identity added
        Throws:
        javax.management.MalformedObjectNameException - in case of an invalid object name specification
        See Also:
        ObjectUtils.getIdentityHexString(Object)
      • getClassToExpose

        public static java.lang.Class<?> getClassToExpose(java.lang.Object managedBean)
        Return the class or interface to expose for the given bean. This is the class that will be searched for attributes and operations (for example, checked for annotations).

        This implementation returns the superclass for a CGLIB proxy and the class of the given bean else (for a JDK proxy or a plain bean class).

        Parameters:
        managedBean - the bean instance (might be an AOP proxy)
        Returns:
        the bean class to expose
        See Also:
        ClassUtils.getUserClass(Object)
      • getClassToExpose

        public static java.lang.Class<?> getClassToExpose(java.lang.Class<?> clazz)
        Return the class or interface to expose for the given bean class. This is the class that will be searched for attributes and operations (for example, checked for annotations).

        This implementation returns the superclass for a CGLIB proxy and the class of the given bean else (for a JDK proxy or a plain bean class).

        Parameters:
        clazz - the bean class (might be an AOP proxy class)
        Returns:
        the bean class to expose
        See Also:
        ClassUtils.getUserClass(Class)
      • isMBean

        public static boolean isMBean(@Nullable
                                      java.lang.Class<?> clazz)
        Determine whether the given bean class qualifies as an MBean as-is.

        This implementation checks for DynamicMBean classes as well as classes with corresponding "*MBean" interface (Standard MBeans) or corresponding "*MXBean" interface (Java 6 MXBeans).

        Parameters:
        clazz - the bean class to analyze
        Returns:
        whether the class qualifies as an MBean
        See Also:
        MBeanExporter.isMBean(Class)
      • getMBeanInterface

        @Nullable
        public static java.lang.Class<?> getMBeanInterface(@Nullable
                                                                     java.lang.Class<?> clazz)
        Return the Standard MBean interface for the given class, if any (that is, an interface whose name matches the class name of the given class but with suffix "MBean").
        Parameters:
        clazz - the class to check
        Returns:
        the Standard MBean interface for the given class
      • getMXBeanInterface

        @Nullable
        public static java.lang.Class<?> getMXBeanInterface(@Nullable
                                                                      java.lang.Class<?> clazz)
        Return the Java 6 MXBean interface exists for the given class, if any (that is, an interface whose name ends with "MXBean" and/or carries an appropriate MXBean annotation).
        Parameters:
        clazz - the class to check
        Returns:
        whether there is an MXBean interface for the given class