当前位置:  首页  >  服务器技术  >  Linux/unix  >  Linux教程

Spring与JMX集成

Spring与JMX集成,实现方式灵活而且简单,主要体现在:1、可以自动探测实现MBean接口的MBean对象,而且可以将一个普通的SpringBean注册为MBean;2、定制管理MBean的接口,根据需要暴露特定管理MBean的操作;3、使用注解定义MBean管理接口;4、可以实现对
Spring与JMX集成,实现方式灵活而且简单,主要体现在:

1、可以自动探测实现MBean接口的MBean对象,而且可以将一个普通的Spring Bean注册为MBean;

2、定制管理MBean的接口,根据需要暴露特定管理MBean的操作;

3、使用注解定义MBean管理接口;

4、可以实现对本地和远程MBean的代理。 

标准MBean管理

对于实现标准MBean接口MBean资源,在Spring中可以设置不同的探测模式,主要是通过MBeanExporter来实现。例如,定义MBean管理接口:

  1. package org.shirdrn.spring.jmx.autodetect;  
  2.   
  3. public interface MyObjectMBean {  
  4.     public long getId();  
  5.     public void setId(long id);  
  6.     public String getName();  
  7.     public void setName(String name);  
  8.     public String show();  
  9. }  

对应的MBean实现,如下所示:

  1. package org.shirdrn.spring.jmx.autodetect;  
  2.   
  3. import org.apache.log4j.Logger;  
  4.   
  5. public class MyObject implements MyObjectMBean {  
  6.       
  7.     private static final Logger LOG = Logger.getLogger(MyObject.class);  
  8.     private long id;  
  9.     private String name;  
  10.       
  11.     public MyObject() {  
  12.         super();  
  13.     }  
  14.       
  15.     public MyObject(long id, String name) {  
  16.         super();  
  17.         this.id = id;  
  18.         this.name = name;  
  19.     }  
  20.   
  21.     public long getId() {  
  22.         return id;  
  23.     }  
  24.   
  25.     public void setId(long id) {  
  26.         this.id = id;  
  27.     }  
  28.   
  29.     public String getName() {  
  30.         return name;  
  31.     }  
  32.   
  33.     public void setName(String name) {  
  34.         this.name = name;  
  35.     }  
  36.   
  37.     public String show() {  
  38.         StringBuffer sb = new StringBuffer().append("id=").append(id).append(  
  39.                 ", name=").append(name);  
  40.         LOG.info("show()=" + sb.toString());  
  41.         return sb.toString();  
  42.     }  
  43. }  

上面是一个标准MBean的实现,可以使用JavaSE 6平台的JMX服务来管理,但是在Spring集成的环境下,也可以重用这些MBean实现,例如下面是一个典型的配置:

  1. xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  6.     <bean id="mbServer" class="org.springframework.jmx.export.MBeanExporter">  
  7.         <property name="autodetectModeName">  
  8.             <value>AUTODETECT_ALLvalue>  
  9.         property>  
  10.     bean>  
  11.     <bean name="mydomain:myobj=MyObjectMBean" class="org.shirdrn.spring.jmx.autodetect.MyObject">  
  12.         <property name="id">  
  13.             <value>90000000001value>  
  14.         property>  
  15.         <property name="name">  
  16.             <value>shirdrnvalue>  
  17.         property>  
  18.     bean>  
  19. beans>  

上面配置中,MBeanExporter会查找本地MBean Server,指定的探测模式autodetectModeName为AUTODETECT_ALL,这也是MBeanExporter的默认值(这个属性完全可以省略,不用配置),无需手动向MBean Server进行注册,便能管理配置的MBean对象“mydomain:myobj=MyObjectMBean”。

对于探测模式autodetectModeName属性,Spring提供了4个取值:

AUTODETECT_NONE           不启用自动探测,需要手动向MBean Server进行注册,即通过MBeanExporter的beans属性进入注册;

AUTODETECT_MBEAN         在当前IOC容器中进行查找MBean组件;

AUTODETECT_ASSEMBLER  设置根据MBeanInfoAssembler的策略进行探测;

AUTODETECT_ALL               自动探测,是AUTODETECT_MBEAN和AUTODETECT_ASSEMBLER的并集。

另外,Spring的MBeanExporter也提供了autodetect属性,取值为true和false,指定对MBean组件的探测行为。

 

普通Spring Bean管理

对于一个普通的Spring Bean,也可以作为MBean来进行管理,Spring可以很好地支持。如下面一个普通的Java类:

  1. package org.shirdrn.spring.jmx;  
  2.   
  3. import org.apache.log4j.Logger;  
  4.   
  5. public class MyJavaObject {  
  6.   
  7.     private static final Logger LOG = Logger.getLogger(MyJavaObject.class);  
  8.     private long id;  
  9.     private String name;  
  10.   
  11.     public MyJavaObject() {  
  12.         super();  
  13.     }  
  14.   
  15.     public MyJavaObject(long id, String name) {  
  16.         super();  
  17.         this.id = id;  
  18.         this.name = name;  
  19.     }  
  20.   
  21.     public long getId() {  
  22.         return id;  
  23.     }  
  24.   
  25.     public void setId(long id) {  
  26.         this.id = id;  
  27.     }  
  28.   
  29.     public String getName() {  
  30.         return name;  
  31.     }  
  32.   
  33.     public void setName(String name) {  
  34.         this.name = name;  
  35.     }  
  36.   
  37.     public String show() {  
  38.         StringBuffer sb = new StringBuffer().append("id=").append(id).append(  
  39.                 ", name=").append(name);  
  40.         LOG.info("show()=" + sb.toString());  
  41.         return sb.toString();  
  42.     }  
  43. }  

它并没有实现MBean管理接口,可以通过MBeanExporter的beans属性进行注册,配置如下所示:

  1. "1.0" encoding="UTF-8"?>  
  2.     xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  5.     "mbServer" class="org.springframework.jmx.export.MBeanExporter">  
  6.         "beans">  
  7.               
  8.                 "mydomain:myjavaobj=MyJavaObject" value-ref="myobj"/>  
  9.               
  10.           
  11.       
  12.     "myobj" class="org.shirdrn.spring.jmx.MyJavaObject">  
  13.         "id">  
  14.             90000000001  
  15.           
  16.         "name">  
  17.             shirdrn  
  18.           
  19.       
  20.   

因为org.shirdrn.spring.jmx.MyJavaObject没有对应的MBean接口,所以默认情况下,该类中public的成员都会暴露出来,通过MBean Server可以管理。实际上,系统中MBean的某些属性或方法可能不需要暴露给外部进行管理,为了克服这种缺点,Spring提供了基于方法列表和接口定制的功能,可以将你所感兴趣的属性或方法暴露给外部管理。

吐了个 "CAO" !
扫码关注 PHP1 官方微信号
PHP1.CN | 中国最专业的PHP中文社区 | 凯发国际娱乐 | 凯发国际娱乐下载 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP问答
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有