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 JDK 1.5+ 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

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()` Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).
    `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 a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).

      This method allows the bean instance to perform initialization only possible when all bean properties have been set and to throw an exception in the event of misconfiguration.

      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 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,
                                         Method getter,
                                         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)`