org.springframework.jmx.export.assembler

## Class MetadataMBeanInfoAssembler

- java.lang.Object
- - org.springframework.jmx.export.assembler.AbstractMBeanInfoAssembler
  - - org.springframework.jmx.export.assembler.AbstractReflectiveMBeanInfoAssembler
    - - org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler

- All Implemented Interfaces:
    InitializingBean, AutodetectCapableMBeanInfoAssembler, MBeanInfoAssembler

      public class MetadataMBeanInfoAssembler
      extends AbstractReflectiveMBeanInfoAssembler
      implements AutodetectCapableMBeanInfoAssembler, InitializingBean

  Implementation of the `MBeanInfoAssembler` interface that reads the management interface information from source level metadata.

  Uses the `JmxAttributeSource` strategy interface, so that metadata can be read using any supported implementation. Out of the box, Spring provides an implementation based on annotations: `AnnotationJmxAttributeSource`.

  Since:
    1.2
  Author:
    Rob Harrop, Juergen Hoeller, Jennifer Hickey
  See Also:
    `setAttributeSource(org.springframework.jmx.export.metadata.JmxAttributeSource)`, `AnnotationJmxAttributeSource`

- - ### Field Summary

    - ### Fields inherited from class org.springframework.jmx.export.assembler.AbstractReflectiveMBeanInfoAssembler

      `ATTRIBUTE_OPERATION_VISIBILITY, FIELD_CLASS, FIELD_CURRENCY_TIME_LIMIT, FIELD_DEFAULT, FIELD_DISPLAY_NAME, FIELD_GET_METHOD, FIELD_LOG, FIELD_LOG_FILE, FIELD_METRIC_CATEGORY, FIELD_METRIC_TYPE, FIELD_PERSIST_LOCATION, FIELD_PERSIST_NAME, FIELD_PERSIST_PERIOD, FIELD_PERSIST_POLICY, FIELD_ROLE, FIELD_SET_METHOD, FIELD_UNITS, FIELD_VISIBILITY, ROLE_GETTER, ROLE_OPERATION, ROLE_SETTER`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MetadataMBeanInfoAssembler()` Create a new `MetadataMBeanInfoAssembler` which needs to be configured through the `setAttributeSource(org.springframework.jmx.export.metadata.JmxAttributeSource)` method.
    `MetadataMBeanInfoAssembler(JmxAttributeSource attributeSource)` Create a new `MetadataMBeanInfoAssembler` for the given `JmxAttributeSource`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()` Invoked by the containing `BeanFactory` after it has set all bean properties and satisfied `BeanFactoryAware`, `ApplicationContextAware` etc.
    `protected void` | `checkManagedBean(Object managedBean)` Throws an IllegalArgumentException if it encounters a JDK dynamic proxy.
    `protected String` | `getAttributeDescription(PropertyDescriptor propertyDescriptor, String beanKey)` Creates a description for the attribute corresponding to this property descriptor.
    `protected String` | `getDescription(Object managedBean, String beanKey)` Reads managed resource description from the source level metadata.
    `protected ModelMBeanNotificationInfo[]` | `getNotificationInfo(Object managedBean, String beanKey)` Reads the `ManagedNotification` metadata from the `Class` of the managed resource and generates and returns the corresponding `ModelMBeanNotificationInfo` metadata.
    `protected String` | `getOperationDescription(Method method, String beanKey)` Retrieves the description for the supplied `Method` from the metadata.
    `protected MBeanParameterInfo[]` | `getOperationParameters(Method method, String beanKey)` Reads `MBeanParameterInfo` from the `ManagedOperationParameter` attributes attached to a method.
    `boolean` | `includeBean(Class<?> beanClass, String beanName)` Used for autodetection of beans.
    `protected boolean` | `includeOperation(Method method, String beanKey)` Votes on the inclusion of an operation.
    `protected boolean` | `includeReadAttribute(Method method, String beanKey)` Vote on the inclusion of an attribute accessor.
    `protected boolean` | `includeWriteAttribute(Method method, String beanKey)` Votes on the inclusion of an attribute mutator.
    `protected void` | `populateAttributeDescriptor(Descriptor desc, Method getter, Method setter, String beanKey)` Adds descriptor fields from the `ManagedAttribute` attribute or the `ManagedMetric` attribute to the attribute descriptor.
    `protected void` | `populateMBeanDescriptor(Descriptor desc, Object managedBean, String beanKey)` Adds descriptor fields from the `ManagedResource` attribute to the MBean descriptor.
    `protected void` | `populateOperationDescriptor(Descriptor desc, Method method, String beanKey)` Adds descriptor fields from the `ManagedAttribute` attribute to the attribute descriptor.
    `void` | `setAttributeSource(JmxAttributeSource attributeSource)` Set the `JmxAttributeSource` implementation to use for reading the metadata from the bean class.

    - ### Methods inherited from class org.springframework.jmx.export.assembler.AbstractReflectiveMBeanInfoAssembler

      `applyCurrencyTimeLimit, applyDefaultCurrencyTimeLimit, createModelMBeanOperationInfo, getAttributeInfo, getClassForDescriptor, getDefaultCurrencyTimeLimit, getOperationInfo, getParameterNameDiscoverer, isExposeClassDescriptor, isUseStrictCasing, setDefaultCurrencyTimeLimit, setExposeClassDescriptor, setParameterNameDiscoverer, setUseStrictCasing`

    - ### Methods inherited from class org.springframework.jmx.export.assembler.AbstractMBeanInfoAssembler

      `getClassName, getClassToExpose, getClassToExpose, getConstructorInfo, getMBeanInfo, getTargetClass`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.springframework.jmx.export.assembler.MBeanInfoAssembler

      `getMBeanInfo`

- - ### Constructor Detail

    - #### MetadataMBeanInfoAssembler

          public MetadataMBeanInfoAssembler()

      Create a new `MetadataMBeanInfoAssembler` which needs to be configured through the `setAttributeSource(org.springframework.jmx.export.metadata.JmxAttributeSource)` method.

    - #### MetadataMBeanInfoAssembler

          public MetadataMBeanInfoAssembler(JmxAttributeSource attributeSource)

      Create a new `MetadataMBeanInfoAssembler` for the given `JmxAttributeSource`.
      Parameters:
        `attributeSource` - the JmxAttributeSource to use

  - ### Method Detail

    - #### setAttributeSource

          public void setAttributeSource(JmxAttributeSource attributeSource)

      Set the `JmxAttributeSource` implementation to use for reading the metadata from the bean class.
      See Also:
        `AnnotationJmxAttributeSource`

    - #### afterPropertiesSet

          public void afterPropertiesSet()

      Description copied from interface: `InitializingBean`
      Invoked by the containing `BeanFactory` after it has set all bean properties and satisfied `BeanFactoryAware`, `ApplicationContextAware` etc.

      This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.

      Specified by:
        `afterPropertiesSet` in interface `InitializingBean`

    - #### checkManagedBean

          protected void checkManagedBean(Object managedBean)
                                   throws IllegalArgumentException

      Throws an IllegalArgumentException if it encounters a JDK dynamic proxy. Metadata can only be read from target classes and CGLIB proxies!
      Overrides:
        `checkManagedBean` in class `AbstractMBeanInfoAssembler`
      Parameters:
        `managedBean` - the bean that will be exposed (might be an AOP proxy)
      Throws:
        `IllegalArgumentException` - the bean is not valid for exposure

    - #### includeBean

          public boolean includeBean(Class<?> beanClass,
                                     String beanName)

      Used for autodetection of beans. Checks to see if the bean's class has a `ManagedResource` attribute. If so, it will add it to the list of included beans.
      Specified by:
        `includeBean` in interface `AutodetectCapableMBeanInfoAssembler`
      Parameters:
        `beanClass` - the class of the bean
        `beanName` - the name of the bean in the bean factory

    - #### includeReadAttribute

          protected boolean includeReadAttribute(Method method,
                                                 String beanKey)

      Vote on the inclusion of an attribute accessor.
      Specified by:
        `includeReadAttribute` in class `AbstractReflectiveMBeanInfoAssembler`
      Parameters:
        `method` - the accessor method
        `beanKey` - the key associated with the MBean in the beans map
      Returns:
        whether the method has the appropriate metadata

    - #### includeWriteAttribute

          protected boolean includeWriteAttribute(Method method,
                                                  String beanKey)

      Votes on the inclusion of an attribute mutator.
      Specified by:
        `includeWriteAttribute` in class `AbstractReflectiveMBeanInfoAssembler`
      Parameters:
        `method` - the mutator method
        `beanKey` - the key associated with the MBean in the beans map
      Returns:
        whether the method has the appropriate metadata

    - #### includeOperation

          protected boolean includeOperation(Method method,
                                             String beanKey)

      Votes on the inclusion of an operation.
      Specified by:
        `includeOperation` in class `AbstractReflectiveMBeanInfoAssembler`
      Parameters:
        `method` - the operation method
        `beanKey` - the key associated with the MBean in the beans map
      Returns:
        whether the method has the appropriate metadata

    - #### getDescription

          protected String getDescription(Object managedBean,
                                          String beanKey)

      Reads managed resource description from the source level metadata. Returns an empty `String` if no description can be found.
      Overrides:
        `getDescription` in class `AbstractMBeanInfoAssembler`
      Parameters:
        `managedBean` - the bean instance (might be an AOP proxy)
        `beanKey` - the key associated with the MBean in the beans map of the `MBeanExporter`

    - #### getAttributeDescription

          protected String getAttributeDescription(PropertyDescriptor propertyDescriptor,
                                                   String beanKey)

      Creates a description for the attribute corresponding to this property descriptor. Attempts to create the description using metadata from either the getter or setter attributes, otherwise uses the property name.
      Overrides:
        `getAttributeDescription` in class `AbstractReflectiveMBeanInfoAssembler`
      Parameters:
        `propertyDescriptor` - the PropertyDescriptor for the attribute
        `beanKey` - the key associated with the MBean in the beans map of the `MBeanExporter`
      Returns:
        the description for the attribute

    - #### getOperationDescription

          protected String getOperationDescription(Method method,
                                                   String beanKey)

      Retrieves the description for the supplied `Method` from the metadata. Uses the method name is no description is present in the metadata.
      Overrides:
        `getOperationDescription` in class `AbstractReflectiveMBeanInfoAssembler`
      Parameters:
        `method` - the operation method
        `beanKey` - the key associated with the MBean in the beans map of the `MBeanExporter`
      Returns:
        the description for the operation

    - #### getOperationParameters

          protected MBeanParameterInfo[] getOperationParameters(Method method,
                                                                String beanKey)

      Reads `MBeanParameterInfo` from the `ManagedOperationParameter` attributes attached to a method. Returns an empty array of `MBeanParameterInfo` if no attributes are found.
      Overrides:
        `getOperationParameters` in class `AbstractReflectiveMBeanInfoAssembler`
      Parameters:
        `method` - the `Method` to get the parameter information for
        `beanKey` - the key associated with the MBean in the beans map of the `MBeanExporter`
      Returns:
        the `MBeanParameterInfo` array

    - #### getNotificationInfo

          protected ModelMBeanNotificationInfo[] getNotificationInfo(Object managedBean,
                                                                     String beanKey)

      Reads the `ManagedNotification` metadata from the `Class` of the managed resource and generates and returns the corresponding `ModelMBeanNotificationInfo` metadata.
      Overrides:
        `getNotificationInfo` in class `AbstractMBeanInfoAssembler`
      Parameters:
        `managedBean` - the bean instance (might be an AOP proxy)
        `beanKey` - the key associated with the MBean in the beans map of the `MBeanExporter`
      Returns:
        the notification metadata

    - #### populateMBeanDescriptor

          protected void populateMBeanDescriptor(Descriptor desc,
                                                 Object managedBean,
                                                 String beanKey)

      Adds descriptor fields from the `ManagedResource` attribute to the MBean descriptor. Specifically, adds the `currencyTimeLimit`, `persistPolicy`, `persistPeriod`, `persistLocation` and `persistName` descriptor fields if they are present in the metadata.
      Overrides:
        `populateMBeanDescriptor` in class `AbstractReflectiveMBeanInfoAssembler`
      Parameters:
        `desc` - the `Descriptor` for the MBean resource.
        `managedBean` - the bean instance (might be an AOP proxy)
        `beanKey` - the key associated with the MBean in the beans map of the `MBeanExporter`
      See Also:
        `AbstractReflectiveMBeanInfoAssembler.setDefaultCurrencyTimeLimit(Integer)`, `AbstractReflectiveMBeanInfoAssembler.applyDefaultCurrencyTimeLimit(javax.management.Descriptor)`

    - #### populateAttributeDescriptor

          protected void populateAttributeDescriptor(Descriptor desc,
                                                     @Nullable
                                                     Method getter,
                                                     @Nullable
                                                     Method setter,
                                                     String beanKey)

      Adds descriptor fields from the `ManagedAttribute` attribute or the `ManagedMetric` attribute to the attribute descriptor.
      Overrides:
        `populateAttributeDescriptor` in class `AbstractReflectiveMBeanInfoAssembler`
      Parameters:
        `desc` - the attribute descriptor
        `getter` - the accessor method for the attribute
        `setter` - the mutator method for the attribute
        `beanKey` - the key associated with the MBean in the beans map of the `MBeanExporter`
      See Also:
        `AbstractReflectiveMBeanInfoAssembler.setDefaultCurrencyTimeLimit(Integer)`, `AbstractReflectiveMBeanInfoAssembler.applyDefaultCurrencyTimeLimit(javax.management.Descriptor)`

    - #### populateOperationDescriptor

          protected void populateOperationDescriptor(Descriptor desc,
                                                     Method method,
                                                     String beanKey)

      Adds descriptor fields from the `ManagedAttribute` attribute to the attribute descriptor. Specifically, adds the `currencyTimeLimit` descriptor field if it is present in the metadata.
      Overrides:
        `populateOperationDescriptor` in class `AbstractReflectiveMBeanInfoAssembler`
      Parameters:
        `desc` - the operation descriptor
        `method` - the method corresponding to the operation
        `beanKey` - the key associated with the MBean in the beans map of the `MBeanExporter`
      See Also:
        `AbstractReflectiveMBeanInfoAssembler.setDefaultCurrencyTimeLimit(Integer)`, `AbstractReflectiveMBeanInfoAssembler.applyDefaultCurrencyTimeLimit(javax.management.Descriptor)`