小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Spring與MX4J集成實(shí)現(xiàn)JMX管理

 開心豆豆2010 2011-07-15
MX4J是一個(gè)開源JMX管理框架,支持JSR3 (JMX) 和JSR160 (JMX Remote API)。通過Spring將MX4J集成到我們的應(yīng)用系統(tǒng)中,可以通過HTTP協(xié)議適配,能夠基于Web的方式來(lái)實(shí)現(xiàn)對(duì)應(yīng)用系統(tǒng)的監(jiān)控和管理。這里,使 用的版本分別為:
  • Spring 2.5
  • MX4J 3.0.2

MX4J對(duì)應(yīng)的幾個(gè)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./schema/beans"  
  3.     xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:p="http://www./schema/p"  
  4.     xsi:schemaLocation="http://www./schema/beans http://www./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,它有一個(gè) processor屬性,使用MX4J已經(jīng)實(shí)現(xiàn)的mx4j.tools.adaptor.http.XSLTProcessor來(lái)對(duì)其注入。 XSLTProcessor實(shí)現(xiàn)了MX4J定義的XML轉(zhuǎn)換成為瀏覽器可以解析的格式的文檔,就Web網(wǎng)頁(yè)。

通過MX4J的源碼可以看到,在mx4j-3.0.2/src/tools/mx4j/tools/adaptor/http/xsl目錄下面,可以看到MX4J定義的一些XSLT模板,例如serverbydomain.xsl為Web控制臺(tái)首頁(yè)模板:

  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./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配置中通過實(shí)例化一個(gè)HttpAdaptor,注冊(cè)到MBean Server中,實(shí)現(xiàn)基于HTTP協(xié)議遠(yuǎn)程訪問管理和監(jiān)控。org.shirdrn.jmx.mx4j.MyConfiguration我們定義的一個(gè) MBean,也注冊(cè)到MBean Server中,實(shí)現(xiàn)JMX的管理與監(jiān)控,代碼如下所示:

  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管理調(diào)用時(shí),更新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 對(duì)MBean暴露的操作進(jìn)行了限制,主要是通過我們定義的接口 org.shirdrn.jmx.mx4j.SelectedMethodsInterface來(lái)指定需要將MBean的哪些內(nèi)容暴露給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容器,啟動(dòng)MX4J的HttpAdaptor服務(wù),實(shí)現(xiàn)通過Web控制臺(tái)的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. }  

啟動(dòng)成功后,可以通過瀏覽http://192.168.1.102:9988,可以看到我們注冊(cè)的MBean,并對(duì)其進(jìn)行管理和監(jiān)控。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多