首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring 2.x jmx 及施用(2)mbean注册方式

2012-11-01 
Spring 2.x jmx 及应用(2)mbean注册方式spring提供了灵活的MBean方式除了之前介绍过的Annotation还有Metad

Spring 2.x jmx 及应用(2)mbean注册方式
spring提供了灵活的MBean方式
除了之前介绍过的Annotation

还有Metadata方式,类似于Annotation
这种方式在创建javadoc时候会给予警告但不会影响doc的创建

package com.xmlasia.spring.test.jmx;/** * @@org.springframework.jmx.export.metadata.ManagedResource  * (description="My Managed Bean",objectName="spring:bean=test") * */public class CommentMBeanManager {private int clientStatus;/** * @@org.springframework.jmx.export.metadata.ManagedOperation  * (description="pause a single proccess") *  */public void pause(String n) {System.out.println("pause");}/** * @@org.springframework.jmx.export.metadata.ManagedOperation  * (description="shut down the proccess") */public void monitor() {System.out.println("shutting down...");}public void publicMessage() {System.out.println("publicMessage");}/** * @@org.springframework.jmx.export.metadata.ManagedAttribute  * (description="client status") */public int getClientStatus() {return clientStatus;}public void setClientStatus(int clientStatus) {this.clientStatus = clientStatus;}}

使用这种方式需要改变attributeSource的实现类
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><!-- mbean --><bean id="mbeanManager"/><!-- JMX configuration --><bean id="mbeanServer"/></property></bean><bean id="assembler"ref="attributeSource" /></bean><bean id="mBeanExporter"ref="mbeanServer" /><property name="assembler" ref="assembler" /> <property name="beans">              <!-- 将mbean注册到mBeanExporter -->            <map>            <entry key="mbean:name=testBean"            value-ref="mbeanManager" />            </map> </property>  </bean></beans>

其他照旧不需修改

如果你有很多mbean spring也提供了很好的解决方法
你只需在修改mBeanExporter的属性autodetect=true
<bean id="mBeanExporter"ref="mbeanServer" /><property name="assembler" ref="assembler" /><property name="autodetect" value="true" /></bean>

spring会搜索context中所有被ManagedResource标记的mbean自动进行注册


另一种方式类似于标准的jmx mbean实现,用interface来定义将要暴露的Attribute和Operation
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><!-- mbean --><bean id="mbeanManager"/><!-- JMX configuration --><bean id="mbeanServer"ref="mbeanServer" /><property name="assembler" ref="assembler" /><property name="beans"><!-- 将mbean注册到mBeanExporter --><map><entry key="mbean:name=testBean"value-ref="mbeanManager" /></map></property></bean></beans>

我们可以通过refactor快速的将CommentMBeanManager的方法和属性抽取到ICommentMBeanManager中。
注意managedInterfaces是一个Class[]的类型不用担心很多接口的问题。

最后注册mbean是有3种行为的分别是
REGISTRATION_FAIL_ON_EXISTING mbean已经存在将会抛出InstanceAlreadyExistsException异常
REGISTRATION_IGNORE_EXISTING 忽视后来注册的mbean
REGISTRATION_REPLACE_EXISTING 覆盖掉之前注册的mbean
通过MBeanExporter的registrationBehaviorName属性进行设定
 <bean id="mBeanExporter" ref="mbeanServer"/>          <property name="assembler" ref="assembler"/>           <property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/>     </bean>  


同样用jconsole进行测试

要了解springjmx前还是要需要掌握jdk对jmx定义,jmx在维护application方法是有很好的应用的。
继续挖掘中
1 楼 SINCE1978 2011-11-22   为何我的spring-context-3.0.3.RELEASE.jar包相应目录下没有AttributesJmxAttributeSource类?
但是2.5.6版本的spring则有。难道spring在2版本和3版本之间变了吗?

热点排行