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"?>
<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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值