org.springframework.jmx.export.assembler
Class MetadataMBeanInfoAssembler

java.lang.Object
  extended by org.springframework.jmx.export.assembler.AbstractMBeanInfoAssembler
      extended by org.springframework.jmx.export.assembler.AbstractReflectiveMBeanInfoAssembler
          extended by 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
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
 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, isExposeClassDescriptor, isUseStrictCasing, setDefaultCurrencyTimeLimit, setExposeClassDescriptor, 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)