`
zhaohaolin
  • 浏览: 1011087 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring与MX4J集成实现JMX管理 (转载)

 
阅读更多

MX4J是一个开源JMX管理框架,支持JSR3 (JMX) 和JSR160 (JMX Remote API)。通过Spring将MX4J集成到我们的应用系统中,可以通过HTTP协议适配,能够基于Web的方式来实现对应用系统的监控和管理。这里,使 用的版本分别为:

  • Spring 2.5
  • MX4J 3.0.2

MX4J对应的几个JAR文件,加入到CLASSPATH:

  • mx4j.jar
  • mx4j-impl.jar
  • mx4j-jmx.jar
  • mx4j-remote.jar
  • mx4j-rimpl.jar
  • mx4j-rjmx.jar
  • mx4j-tools.jar

首先,给出Spring的完整配置,如下所示:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  5.   
  6.     <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"  
  7.         depends-on="mbeanServer">  
  8.         <property name="beans">  
  9.             <map>  
  10.                 <entry key="CONFIG.SHIRDRN.ORG:name=config" value-ref="config" />  
  11.                 <entry key="MX4J.SOURCEFORGE.COM:name=httpAdaptor" value-ref="httpAdaptor" />  
  12.                 <!-- 
  13.                 <entry key="jdmk.sun.com:name=adaptorServer" value-ref="adaptorServer" /> 
  14.                 -->  
  15.             </map>  
  16.         </property>  
  17.         <property name="server" ref="mbeanServer" />  
  18.         <property name="assembler">  
  19.             <ref bean="assembler" />  
  20.         </property>  
  21.     </bean>  
  22.     <bean id="assembler"  
  23.         class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">  
  24.         <property name="managedInterfaces">  
  25.             <list>  
  26.                 <value>org.shirdrn.jmx.mx4j.SelectedMethodsInterface</value>  
  27.             </list>  
  28.         </property>  
  29.     </bean>  
  30.     <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean" />  
  31.     <bean id="httpAdaptor" class="mx4j.tools.adaptor.http.HttpAdaptor">  
  32.         <property name="processor">  
  33.             <ref bean="xsltProcessor" />  
  34.         </property>  
  35.         <property name="host">  
  36.             <value>172.20.9.23</value>  
  37.         </property>  
  38.         <property name="port" value="9988" />  
  39.     </bean>  
  40.     <bean id="xsltProcessor" class="mx4j.tools.adaptor.http.XSLTProcessor" />  
  41.     <bean id="config" class="org.shirdrn.jmx.mx4j.MyConfiguration" />  
  42.       
  43.     <!--  
  44.     <bean id="adaptorServer" class="com.sun.jdmk.comm.HtmlAdaptorServer">  
  45.         <property name="port">  
  46.             <value>9999</value>  
  47.         </property>  
  48.     </bean>  
  49.     -->  
  50.   
  51. </beans>   

上面配置中,比较核心的是MX4J的HTTP适配器类:mx4j.tools.adaptor.http.HttpAdaptor,它有一个 processor属性,使用MX4J已经实现的mx4j.tools.adaptor.http.XSLTProcessor来对其注入。 XSLTProcessor实现了MX4J定义的XML转换成为浏览器可以解析的格式的文档,就Web网页。

通过MX4J的源码可以看到,在mx4j-3.0.2/src/tools/mx4j/tools/adaptor/http/xsl目录下面,可以看到MX4J定义的一些XSLT模板,例如serverbydomain.xsl为Web控制台首页模板:

  1. <?xml version="1.0"?>  
  2. <!--  
  3.  Copyright (C) The MX4J Contributors.  
  4.  All rights reserved.  
  5.   
  6.  This software is distributed under the terms of the MX4J License version 1.0.  
  7.  See the terms of the MX4J License in the documentation provided with this software.  
  8.   
  9.  Author: Carlos Quiroz (tibu@users.sourceforge.net)  
  10.  Revision: $Revision: 1.2 $  
  11.                                                                                                                                                     -->  
  12. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
  13.    <xsl:output method="html" indent="yes" encoding="ISO-8859-1"/>  
  14.    <xsl:include href="common.xsl" mce_href="common.xsl"/>  
  15.    <xsl:include href="xalan-ext.xsl" mce_href="xalan-ext.xsl"/>  
  16.   
  17.    <xsl:param name="html.stylesheet">stylesheet.css</xsl:param>  
  18.    <xsl:param name="html.stylesheet.type">text/css</xsl:param>  
  19.    <xsl:param name="head.title">serverbydomain.title</xsl:param>  
  20.   
  21.    <!-- Invoked when a query error is produced -->  
  22.    <xsl:template match="Domain" name="error">  
  23.       <xsl:for-each select="Exception">  
  24.          <tr>  
  25.             <td class="serverbydomain_domainline" colspan="5">  
  26.                <xsl:call-template name="str">  
  27.                   <xsl:with-param name="id">serverbydomain.error.query</xsl:with-param>  
  28.                   <xsl:with-param name="p0">  
  29.                      <xsl:value-of select="@errorMsg"/>  
  30.                   </xsl:with-param>  
  31.                </xsl:call-template>  
  32.             </td>  
  33.          </tr>  
  34.       </xsl:for-each>  
  35.    </xsl:template>  
  36.   
  37.    <!-- Invoked to display each domain -->  
  38.    <xsl:template match="Domain" name="domain">  
  39.       <xsl:for-each select="Domain">  
  40.          <xsl:sort data-type="text" order="ascending" select="@name"/>  
  41.          <tr>  
  42.             <td class="serverbydomain_domainline" colspan="5">  
  43.                <xsl:call-template name="str">  
  44.                   <xsl:with-param name="id">serverbydomain.domain.label</xsl:with-param>  
  45.                   <xsl:with-param name="p0">  
  46.                      <xsl:value-of select="@name"/>  
  47.                   </xsl:with-param>  
  48.                </xsl:call-template>  
  49.             </td>  
  50.             <xsl:call-template name="mbean"/>  
  51.          </tr>  
  52.       </xsl:for-each>  
  53.    </xsl:template>  
  54.   
  55.    <!-- invoked for each mbean -->  
  56.    <xsl:template match="MBean" name="mbean">  
  57.       <xsl:for-each select="MBean">  
  58.          <xsl:sort data-type="text" order="ascending" select="@objectname"/>  
  59.          <xsl:variable name="classtype">  
  60.             <xsl:if test="(position() mod 2)=1">darkline</xsl:if>  
  61.             <xsl:if test="(position() mod 2)=0">clearline</xsl:if>  
  62.          </xsl:variable>  
  63.          <xsl:variable name="objectname">  
  64.             <xsl:call-template name="uri-encode">  
  65.                <xsl:with-param name="uri" select="@objectname"/>  
  66.             </xsl:call-template>  
  67.          </xsl:variable>  
  68.          <tr class="{$classtype}" width="100%">  
  69.             <td width="35%" align="left" class="serverbydomain_row">  
  70.                <a href="mbean?objectname={$objectname}" mce_href="mbean?objectname={$objectname}">  
  71.                   <xsl:value-of select="@objectname"/>  
  72.                </a>  
  73.             </td>  
  74.             <td width="20%" align="left" class="serverbydomain_row">  
  75.                <p>  
  76.                   <xsl:value-of select="@classname"/>  
  77.                </p>  
  78.             </td>  
  79.             <td width="35%" align="left" class="serverbydomain_row">  
  80.                <p>  
  81.                   <xsl:value-of select="@description"/>  
  82.                </p>  
  83.             </td>  
  84.             <td width="10%" align="right" class="serverbydomain_row">  
  85.                <p>  
  86.                   <a href="delete?objectname={$objectname}" mce_href="delete?objectname={$objectname}">  
  87.                      <xsl:call-template name="str">  
  88.                         <xsl:with-param name="id">serverbydomain.mbean.unregister</xsl:with-param>  
  89.                      </xsl:call-template>  
  90.                   </a>  
  91.                </p>  
  92.             </td>  
  93.          </tr>  
  94.       </xsl:for-each>  
  95.    </xsl:template>  
  96.   
  97.    <!-- Main template -->  
  98.    <xsl:template match="Server">  
  99.       <html>  
  100.          <xsl:call-template name="head"/>  
  101.          <body>  
  102.             <table width="100%" cellpadding="0" cellspacing="0" border="0">  
  103.                <tr width="100%">  
  104.                   <td>  
  105.                      <xsl:call-template name="toprow"/>  
  106.                      <xsl:call-template name="tabs">  
  107.                         <xsl:with-param name="selection">server</xsl:with-param>  
  108.                      </xsl:call-template>  
  109.                      <xsl:variable name="query">  
  110.                         <xsl:call-template name="str">  
  111.                            <xsl:with-param name="id">serverbydomain.server.query</xsl:with-param>  
  112.                         </xsl:call-template>  
  113.                      </xsl:variable>  
  114.                      <table width="100%" cellpadding="0" cellspacing="0" border="0">  
  115.   
  116.                         <tr>  
  117.                            <td class="page_title">  
  118.                               <xsl:call-template name="str">  
  119.                                  <xsl:with-param name="id">serverbydomain.server.title</xsl:with-param>  
  120.                               </xsl:call-template>  
  121.                            </td>  
  122.                            <form action="serverbydomain">  
  123.                               <td align="right" class="page_title">  
  124.                                  <xsl:call-template name="str">  
  125.                                     <xsl:with-param name="id">serverbydomain.server.filter</xsl:with-param>  
  126.                                  </xsl:call-template>  
  127.                                  <input type="text" name="querynames" value="*:*"/>  
  128.                                  <input type="submit" value="{$query}"/>  
  129.                               </td>  
  130.                            </form>  
  131.                         </tr>  
  132.                      </table>  
  133.                      <table width="100%" cellpadding="0" cellspacing="0" border="0">  
  134.                         <xsl:call-template name="domain"/>  
  135.                         <xsl:call-template name="error"/>  
  136.                      </table>  
  137.                      <xsl:call-template name="bottom"/>  
  138.                   </td>  
  139.                </tr>  
  140.             </table>  
  141.          </body>  
  142.       </html>  
  143.    </xsl:template>  
  144. </xsl:stylesheet>  

Spring配置中通过实例化一个HttpAdaptor,注册到MBean Server中,实现基于HTTP协议远程访问管理和监控。org.shirdrn.jmx.mx4j.MyConfiguration我们定义的一个 MBean,也注册到MBean Server中,实现JMX的管理与监控,代码如下所示:

  1. package org.shirdrn.jmx.mx4j;  
  2.   
  3. public class MyConfiguration {  
  4.     private long id = System.currentTimeMillis();  
  5.     private String name;  
  6.     public MyConfiguration() {  
  7.         super();  
  8.     }  
  9.     public MyConfiguration(long id, String name) {  
  10.         super();  
  11.         this.id = id;  
  12.         this.name = name;  
  13.     }  
  14.     public long getId() {  
  15.         return id;  
  16.     }  
  17.     public void setId(long id) {  
  18.         this.id = id;  
  19.     }  
  20.     public String getName() {  
  21.         return name;  
  22.     }  
  23.     public void setName(String name) {  
  24.         // 通过JMX管理调用时,更新id的值  
  25.         this.id = System.currentTimeMillis();  
  26.         this.name = name;  
  27.     }  
  28.     public String show() {  
  29.         StringBuffer sb = new StringBuffer().append("id=").append(id).append(  
  30.                 ", name=").append(name);  
  31.         System.out.println("show()=" + sb.toString());  
  32.         return sb.toString();  
  33.     }  
  34. }  

但是,Spring配置中的 org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler 对MBean暴露的操作进行了限制,主要是通过我们定义的接口 org.shirdrn.jmx.mx4j.SelectedMethodsInterface来指定需要将MBean的哪些内容暴露给JMX管理,接口 如下所示:

  1. package org.shirdrn.jmx.mx4j;  
  2.   
  3. public interface SelectedMethodsInterface {    
  4.     public long getId();    
  5.     public void setName(String name);  
  6.     public String getName();  
  7.     public void show();    
  8. }  

最后,我们可以初始化Spring的IOC容器,启动MX4J的HttpAdaptor服务,实现通过Web控制台的JMX管理,代码如下所示:

  1. package org.shirdrn.jmx.mx4j;  
  2.   
  3. import java.io.IOException;  
  4. import javax.management.MalformedObjectNameException;  
  5. import mx4j.tools.adaptor.http.HttpAdaptor;  
  6. import org.springframework.context.ApplicationContext;  
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  8.   
  9. public class JMXTest {  
  10.     public static void main(String[] args) throws IOException,  
  11.             MalformedObjectNameException, Exception {  
  12.         ApplicationContext ctx = new ClassPathXmlApplicationContext(  
  13.                 new String[] { "org/shirdrn/jmx/mx4j/applicationContext.xml" });  
  14.         HttpAdaptor httpAdaptor = (HttpAdaptor) ctx.getBean("httpAdaptor");  
  15.         httpAdaptor.start();  
  16.     }  
  17. }  

启动成功后,可以通过浏览http://192.168.1.102:9988 ,可以看到我们注册的MBean,并对其进行管理和监控。

分享到:
评论

相关推荐

    mx4j管理jmx的jar与spring结合使用

    在标题“mx4j管理jmx的jar与spring结合使用”中,我们关注的重点是MX4J如何与Spring协作来实现JMX的功能。MX4J提供的`mx4j-tools-2.1.1.jar`是MX4J的核心库,包含了用于JMX操作的各种工具和API。这个版本(2.1.1)...

    mx4j 开发包,JMX的实现

    mx4j是jmx的开源框架实现,可实现系统开发的微内核管理

    mx4j-jmx.jar

    mx4j-jmx.jar

    mx4j管理框架

    mx4j是对于jmx的一个具体实现,比较古老了,不知有无人需要

    [探究JMX] 4、Spring2.x集成MX4J

    NULL 博文链接:https://luisfigo.iteye.com/blog/703759

    jdom.jar;javax.servlet.jar;mx4j.jar

    MX4J是一个开源的Java Management Extensions (JMX) 实现,它允许开发者管理和监控Java应用程序。JMX是一种标准,用于在Java应用程序中管理资源,如内存、线程、系统属性等。MX4J提供了远程管理功能,允许通过网络...

    mx4j.jar

    mx4j.jarmx4j.jar

    mx4j-tools.jar

    mx4j-tools.jar

    mx4j-remote.jar

    mx4j-remote.jar

    mx4j-impl.jar

    mx4j-impl.jar

    MX4J-开源

    MX4J是一款强大的开源工具,专门用于实现Java Management Extensions(JMX)标准,该标准定义了管理和监控Java应用程序的方法。JMX允许开发者创建可管理的组件,并通过标准接口与管理系统进行交互,从而实现对应用...

    JMX应用技术架构系统(包括具体开发说明)

    # JMX应用技术架构系统 ## 1. 简介 ### 1.1 摘要 ...总结,JMX技术架构系统为Java应用提供了强大的管理和监控能力,结合MX4J,可以在分布式环境中轻松实现远程监控和管理,从而提升系统的可维护性和稳定性。

    mx4j-rjmx.jar

    mx4j-rjmx.jar

    mx4j-examples.jar

    mx4j-examples.jar

    mx4j-rimpl.jar

    mx4j-rimpl.jar

    DALSA MX4 Xtium-CL-MX4 SDK及driver

    Xtium-CL-MX4是与其配套的接口模块,它集成了数据传输和电源管理,确保与相机之间的高效通信,尤其适合于高帧率和大数据量的工业应用。 SDK(Software Development Kit)是开发者进行应用开发的重要工具,对于DALSA...

    JMX: Developer's Quick Start Guide

    JMX的设计目标之一是能够与现有的企业级管理和监控技术(例如简单的网络管理协议SNMP)进行集成。 #### 二、目录结构及环境搭建 本指南旨在快速介绍JMX编程的基础知识,并提供了足够的示例以便开发者能够快速上手...

    魅族 MX4Pro USB 驱动

    1. **数据传输**:使电脑能够识别并连接魅族MX4Pro,实现照片、音乐、视频等文件的上传和下载。 2. **设备充电**:提供正常的充电功能,确保手机在连接电脑时能获得电力。 3. **调试与开发**:对于开发者而言,USB...

    魅族MX4驱动及刷机工具

    魅族MX4的驱动程序确保了手机与计算机之间的通信,这对于进行刷机、数据备份或者开发者调试等工作至关重要。通常,这些驱动可能包括USB驱动,用于通过USB连接电脑;以及Fastboot驱动,用于在设备启动模式下执行命令...

Global site tag (gtag.js) - Google Analytics