Spring JMX的学习总结(三) 基于注释的JMX的使用
??? 具体实现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"?><beansxmlns="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" value-ref="monitorMetaMBeanManager"> </entry> </map> </property> <property name="server" ref="mbeanServer"/></bean></beans>
?