具体实现JMX的注释的类:
package com.easyway.jboss.jmx.spring.service;
/**
* 采用Spring的注释(Metadata)方式实现JMX的开发
* MbeanInfoAssembler接口
在后台,MbeanExporter委派一个org.springframework.jmx.export. assembler.MbeanInfoAssembler
接口的实现来负责为每个bean定义发布出来的管理接口。默认的实现
org.springframework.jmx.export.assembler. SimpleReflectiveMBeanInfoAssembler,
只是简单的定义一个接口发布所有的公共参数和方法,正如你在前面的例子中看到的一样。
Spring为MbeanInfoAssembler接口提供两个额外的实现,允许你通过源码级元数据或任意的接口
来控制管理接口。
*要标示一个bean发布给JMX,你应当用ManagedResource参数来注解这个bean类。
*在使用普通参数元数据方法的场合中,这个类可以在org.springframework.jmx.metadata
*包中找到。每个要发布为操作的方法应当用ManagedOperation属性来标示,
*每个要发布的参数应当用ManagedAttribute参数来标示。当标示参数时,
*你可以省略getter或setter来分别创建一个只写或只读的参数。
*
*
* 你同样注意到clientId和clientStatus属性都用ManagedAttribute来标示,但是clientStatus属性只标示了getter方法。
* 这将使得这两个属性都作为参数被包含在管理接口中,并且age参数是只读的。
* 最后,你会注意到pause()方法用ManagedOperation参数来标示而publicMessage()方法没有标示。
* 这将使得当使用MetadataMBeanInfoAssembler时,管理接口中只包含一个操作pause()。
*
* @author longgangbai
*
*
*
*@@org.springframework.jmx.export.annotation.ManagedResource(description="my Managed Bean",objectName="spring:bean=test")
*/
public class JMXMetaMBeanManager {
private int clientId;
/**
* @@org.springframework.jmx.export.metadata.ManagedAttribute
* (description="The clientId Attribute", currencyTimeLimit=20,
* defaultValue="0001")
*/
public int getClientId() {
return clientId;
}
/**
* @@org.springframework.jmx.export.metadata.ManagedAttribute
* (description="set The clientId Attribute", currencyTimeLimit=20,
* defaultValue="0001", persistPolicy="OnUpdate")
*/
public void setClientId(int clientId) {
this.clientId = clientId;
}
private int clientStatus;
/**
* @@org.springframework.jmx.export.annotation.ManagedOperation(description = "pause a single proccess")
*/
public void pause(String n) {
System.out.println("pause");
}
/**
* @@org.springframework.jmx.export.annotation.ManagedOperation(description = "shutting down…")
*/
public void monitor() {
System.out.println("shutting down…");
}
public void publicMessage() {
System.out.println("public Message to monitor server");
}
/**
* @@org.springframework.jmx.export.metadata.ManagedAttribute
* (description="The clientStatus Attribute", currencyTimeLimit=20,
* defaultValue="bar", persistPolicy="OnUpdate")
*/
public int getClientStatus() {
return clientStatus;
}
public void setClientStatus(int clientStatus) {
this.clientStatus = clientStatus;
}
}
配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!--
利用MetadataMBeanInfoAssembler,你能使用源码级元数据为你的bean定义管理接口。
元数据的读取被封装在org.springframework.jmx.export.metadata. JmxAttributeSource接口。
在该单元外,Spring JMX为这个接口提供两种支持:支持普通参数的
org.springframework.jmx.export.metadata. AttributesJmxAttributeSource
和支持JDK5.0注解的org.springframework. jmx.export.annotation.AnnotationJmxAttributeSource。
MetadataMBeanInfoAssembler必须要配置一个JmxAttributeSource的实现才能正确运行。
-->
<!-- 创建相关的Bean对象并设置参数 -->
<bean id="monitorMetaMBeanManager" class="com.easyway.jboss.jmx.spring.service.JMXMetaMBeanManager"/>
<!-- 创建一个MBeanServer对象,
-->
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
</bean>
<bean id="jmxAttributeSource" class="org.springframework.jmx.export.metadata.AttributesJmxAttributeSource">
<property name="attributes">
<bean class="org.springframework.metadata.commons.CommonsAttributes"></bean>
</property>
</bean>
<bean id="assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
<property name="attributeSource">
<ref local="jmxAttributeSource"/>
</property>
</bean>
<!--一个由 MBeanServerFactoryBean 创建的 MBeanServer 实例,它通过属性server提供给了 MBeanExporter。
当你提供了你自己的 MBeanServer 实例后,MBeanExporter 将使用该实例,且不再查找一个运行中的 MBeanServer。
设置相关的Bean的暴露为JMX
关系最大的是 exporter Bean。beans 属性使得 MBeanExporter 知道要将哪个Bean输出到JMX的 MBeanServer 上去。
缺省配置中,beans 里的 Map 中的条目的key被用作相应条目值所引用的Bean的 ObjectName。
-->
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="assembler">
<ref local="assembler"/>
</property>
<property name="beans">
<map>
<entry key="bean:name=monitorMetaMBeanManager" value-ref="monitorMetaMBeanManager">
</entry>
</map>
</property>
<property name="server" ref="mbeanServer"/>
</bean>
</beans>