Package 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:
  `org.springframework.beans.factory.InitializingBean`, `AutodetectCapableMBeanInfoAssembler`, `MBeanInfoAssembler`

public class MetadataMBeanInfoAssembler extends AbstractReflectiveMBeanInfoAssembler implements AutodetectCapableMBeanInfoAssembler, org.springframework.beans.factory.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
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

Modifier and Type
Method
Description
`void`
`afterPropertiesSet()`
`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 auto-detection 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 Details

### 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 Details

### 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()

Specified by:
  `afterPropertiesSet` in interface `org.springframework.beans.factory.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 auto-detection 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)`