4、Spring2.x集成MX4J

送分小仙女□ 提交于 2019-12-05 23:04:21

一、简介

      Spring的JMX支持提供了一些特性,让你能透明地将Spring应用程序集成到JMX基础实施中去。

确切地说,Spring的JMX支持提供了四种核心特性:

  • 将任意Spring Bean自动注册为JMX MBean
  • 灵活操纵Bean管理接口的机制
  • 通过远程JSR-160连接器对MBean的声明式暴露
  • 对本地和远程MBean资源的简单代理

二、准备工作

      1、 引入Spring2.5所需开发包

      2、 引入mx4j-tools.jar包

      3、 开发环境MyEclipse8.0

三、代码实例

3.1 applicationcontext.xml代码

 <?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">  
  
     <!-- MBeanExporter -->    
     <bean id="exporter"    
         class="org.springframework.jmx.export.MBeanExporter"    
         depends-on="mbeanServer">    
         <property name="beans">    
             <map>    
               <entry key="LuisFigo:name=config"    
                     value-ref="config" />    
                 <entry key="MX4J:name=HttpAdaptor"    
                     value-ref="httpAdaptor" />    
             </map>    
         </property>    
         <property name="server" ref="mbeanServer" />    
         <property name="assembler">    
             <bean id="assembler"    
                 class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">    
                 <property name="attributeSource">    
                     <bean id="attributeSource"    
                         class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />    
                 </property>    
           </bean>    
        </property>    
   </bean>    
    <!-- MBeanServerFactoryBean -->    
     <bean id="mbeanServer"    
         class="org.springframework.jmx.support.MBeanServerFactoryBean">    
     </bean>    
     
     <!-- HttpAdaptor & XSLTProcessor -->    
     <bean id="httpAdaptor"    
         class="mx4j.tools.adaptor.http.HttpAdaptor">    
         <property name="processor">    
             <!-- XSLTProcessor -->    
             <bean id="xsltProcessor"    
                 class="mx4j.tools.adaptor.http.XSLTProcessor" />    
         </property>    
         <property name="port" value="8000" />    
     </bean>    
     <bean id="config"    
         class="com.muyu.jmx.Config">    
     </bean>    
</beans>    

       Spring的JMX框架的核心类是MBeanExporter,这个类负责获取Spring Bean,然后将其注册到一个JMX MBeanServer上,要将一个Bean中的属性和方法暴露成为一个JMX MBean中的属性和操作,你只要在配置文件中简单的配置MBeanExporter一个实例,并根据上面的配置文件中的配置方法将bean传入即可。 Assembler用于管理bean暴露的接口,Spring JMX提供了一套全面的以及可扩展的机制来控制bean的管理接口。我们这个例子使用MetadataMBeanInfoAssembler,能够用源码级元数据给你的Bean定义管理接口。AnnotationJmxAttributeSource说明我们用注解的方式来管理接口。

3.2 config代码

    package com.muyu.jmx;  
      
    import org.springframework.jmx.export.annotation.ManagedAttribute;  
    import org.springframework.jmx.export.annotation.ManagedOperation;  
    import org.springframework.jmx.export.annotation.ManagedOperationParameter;  
    import org.springframework.jmx.export.annotation.ManagedOperationParameters;  
    import org.springframework.jmx.export.annotation.ManagedResource;  
      
    @ManagedResource(description = "config")  
    public class Config {  
      
        private String configLocation;  
          
        @ManagedAttribute(description = "configLocation 对应的值")  
        public String getConfigLocation() {  
            return configLocation;  
        }  
      
        @ManagedOperation(description = "控制台输出configLocation信息")  
        public void printConfigLocation() {  
            System.out.println(configLocation);  
        }  
      
        @ManagedOperation(description = "控制台输出i_ConfigLocation信息")  
        @ManagedOperationParameters(@ManagedOperationParameter(name="i_ConfigLocation", description="第一个参数"))  
        public void printConfigLocation(String i_ConfigLocation) {  
            System.out.println(i_ConfigLocation);  
        }  
          
        @ManagedAttribute(description = "赋值给configLocation")  
        public void setConfigLocation(String i_ConfigLocation) {  
            this.configLocation = i_ConfigLocation;  
        }  
      
    }  

3.3 jmxtest代码

    package com.muyu.jmx;  
      
    import java.io.IOException;  
    import javax.management.MalformedObjectNameException;  
    import mx4j.tools.adaptor.http.HttpAdaptor;  
    import org.springframework.context.ApplicationContext;  
    import org.springframework.context.support.ClassPathXmlApplicationContext;  
      
    public class JMXTest {  
        public static void main(String[] args) throws IOException,  
                MalformedObjectNameException, Exception {  
            ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml"});  
            HttpAdaptor httpAdaptor = (HttpAdaptor) ctx.getBean("httpAdaptor");  
            httpAdaptor.start();  
        }  
    }  

 说明:

       applicationContext.xml配置文件中已经设置httpAdaptor端口号为8000,运行JMXTest后,通过web浏览器登录http://localhost:8000 图1所示,点击LuisFigo:name=config进入图2页面,就可以访问或者通过暴露的接口操作config了。

四、总结

      本节只是介绍了Spring怎样集成MX4J来管理注册的bean(当然这里的bean只是普通的Spring bean,Spring框架采用dynamicMBean来实现JMX),Spring还可以通过JSR-160连接器来构建服务器端和客户端的连接。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!