First, write a class and annotate it:
package com.javatutor.spring.jmx;
import java.util.HashMap;
import java.util.Map;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;
@ManagedResource( objectName = "com.javatutor.spring.jmx:name=StringMap" )
public class StringMapImpl
{
private Map<String, String> map = new HashMap<String, String>();
@ManagedAttribute
public int getSize()
{
return map.size();
}
@ManagedOperation
public String get( String key )
{
return map.get( key );
}
@ManagedOperation
public String put( String key, String value )
{
return map.put( key, value );
}
public void remove( String key )
{
map.remove( key );
}
}
Next, write a spring config file:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="StringMap" class="com.javatutor.spring.jmx.StringMapImpl" />
<bean id="MBeanExporter"
class="org.springframework.jmx.export.MBeanExporter">
<property name="assembler" ref="MBeanInfoAssembler" />
<property name="autodetect" value="true" />
<property name="namingStrategy" ref="NamingStrategy" />
</bean>
<bean id="AnnotationJmxAttributeSource"
class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"
/>
<bean id="NamingStrategy"
class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
<property name="attributeSource" ref="AnnotationJmxAttributeSource" />
</bean>
<bean id="MBeanInfoAssembler"
class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
<property name="attributeSource" ref="AnnotationJmxAttributeSource" />
</bean>
</beans>
Now the client:
package com.javatutor;
import javax.swing.JOptionPane;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.javatutor.spring.jmx.StringMapImpl;
public class SpringWithJmxExample
{
public static void main( String[] args )
{
ApplicationContext beFac = new ClassPathXmlApplicationContext( "springJmx.xml"
);
StringMapImpl cacheBean = (StringMapImpl) beFac.getBean( "StringMap" );
cacheBean.put( "Key", "Value" );
System.out.println( cacheBean.get("Key") );
JOptionPane.showMessageDialog( null, "End" );
}
}
Start the program. Do not forgett to start with -Dcom.sun.management.jmxremote.
Start JConsole and enjoy.