MBeanProxyFactoryBean + MetadataMBeanInfoAssembler
I have successfully exported a bean using MetadataMBeanInfoAssembler. Here is my object:
Code:
@ManagedResource(description = "Manage")
public class Mbean implements Configurer, BeanNameAware {
private String name;
@Override
@SuppressWarnings("unchecked")
@ManagedOperation(description = "Get Levels")
public Map<String, String> getLevels() {
Map<String, String> levels = new HashMap<String, String>();
return levels;
}
As you can see, the "getLevels" method is an operation. Here is my spring config to export the object, it is working well:
HTML Code:
<bean id="configurer" class="com.Mbean" />
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="assembler" ref="assembler" />
<property name="namingStrategy" ref="namingStrategy" />
<property name="autodetect" value="true" />
</bean>
<bean id="jmxAttributeSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />
<bean id="assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
<property name="attributeSource" ref="jmxAttributeSource" />
</bean>
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
<property name="attributeSource" ref="jmxAttributeSource" />
</bean>
The problem is when connecting to this object client-side. Whenever i attempt to use the getLevels() method, the MBeanProxyFactoryBean automatically assumes that Levels is an attribute, because it starts with "get", when in fact I have it marked, both on my object and in the jmx repository, as an operation. Is there a way to enhance the MBeanProxyFactoryBean to interpret it correctly? As a workaround, i changed the method from "getLevels()" to "findLevels()", and it works fine. Is it possible for the MBeanProxyFactoryBean to also use a configurable AttributeSource to determine whether an invocation should be for an attribute or on operation?