Spring与MX4J集成实现JMX管理
来源:互联网 发布:美国大学不要面试知乎 编辑:程序博客网 时间:2024/05/19 03:30
MX4J是一个开源JMX管理框架,支持JSR3 (JMX) 和JSR160 (JMX Remote API)。通过spring将MX4J集成到我们的应用系统中,可以通过HTTP协议适配,能够基于Web的方式来实现对应用系统的监控和管理。这里,使用的版本分别为:
MX4J对应的几个JAR文件,加入到CLASSPATH:
- mx4j.jar
- mx4j-impl.jar
- mx4j-jmx.jar
- mx4j-remote.jar
- mx4j-rimpl.jar
- mx4j-rjmx.jar
- mx4j-tools.jar
首先,给出Spring的完整配置,如下所示:
- <?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">
-
- <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"
- depends-on="mbeanServer">
- <property name="beans">
- <map>
- <entry key="CONFIG.SHIRDRN.ORG:name=config" value-ref="config" />
- <entry key="MX4J.SOURCEFORGE.COM:name=httpAdaptor" value-ref="httpAdaptor" />
-
-
-
- </map>
- </property>
- <property name="server" ref="mbeanServer" />
- <property name="assembler">
- <ref bean="assembler" />
- </property>
- </bean>
- <bean id="assembler"
- class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
- <property name="managedInterfaces">
- <list>
- <value>org.shirdrn.jmx.mx4j.SelectedMethodsInterface</value>
- </list>
- </property>
- </bean>
- <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean" />
- <bean id="httpAdaptor" class="mx4j.tools.adaptor.http.HttpAdaptor">
- <property name="processor">
- <ref bean="xsltProcessor" />
- </property>
- <property name="host">
- <value>192.168.1.102</value>
- </property>
- <property name="port" value="9988" />
- </bean>
- <bean id="xsltProcessor" class="mx4j.tools.adaptor.http.XSLTProcessor" />
- <bean id="config" class="org.shirdrn.jmx.mx4j.MyConfiguration" />
-
- <!--
- <bean id="adaptorServer" class="com.sun.jdmk.comm.HtmlAdaptorServer">
- <property name="port">
- <value>9999</value>
- </property>
- </bean>
- -->
-
- </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控制台首页模板:
Spring配置中通过实例化一个HttpAdaptor,注册到MBean Server中,实现基于HTTP协议远程访问管理和监控。org.shirdrn.jmx.mx4j.MyConfiguration我们定义的一个MBean,也注册到MBean Server中,实现JMX的管理与监控,代码如下所示:
- package org.shirdrn.jmx.mx4j;
-
- public class MyConfiguration {
- private long id = System.currentTimeMillis();
- private String name;
- public MyConfiguration() {
- super();
- }
- public MyConfiguration(long id, String name) {
- super();
- this.id = id;
- this.name = name;
- }
- public long getId() {
- return id;
- }
- public void setId(long id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
-
- this.id = System.currentTimeMillis();
- this.name = name;
- }
- public String show() {
- StringBuffer sb = new StringBuffer().append("id=").append(id).append(
- ", name=").append(name);
- System.out.println("show()=" + sb.toString());
- return sb.toString();
- }
- }
但是,Spring配置中的org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler对MBean暴露的操作进行了限制,主要是通过我们定义的接口org.shirdrn.jmx.mx4j.SelectedMethodsInterface来指定需要将MBean的哪些内容暴露给JMX管理,接口如下所示:
- package org.shirdrn.jmx.mx4j;
-
- public interface SelectedMethodsInterface {
- public long getId();
- public void setName(String name);
- public String getName();
- public void show();
- }
最后,我们可以初始化Spring的IOC容器,启动MX4J的HttpAdaptor服务,实现通过Web控制台的JMX管理,代码如下所示:
- package org.shirdrn.jmx.mx4j;
-
- import <a href="http://lib.csdn.net/base/17" class='replace_word' title="Java EE知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.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[] { "org/shirdrn/jmx/mx4j/applicationContext.xml" });
- HttpAdaptor httpAdaptor = (HttpAdaptor) ctx.getBean("httpAdaptor");
- httpAdaptor.start();
- }
- }
启动成功后,可以通过浏览http://192.168.1.102:9988,可以看到我们注册的MBean,并对其进行管理和监控。
0 0