JMX学习笔记一

来源:互联网 发布:程序员入门教程百度云 编辑:程序博客网 时间:2024/06/05 05:54

开发环境:Eclipse Standard/SDK,JDK版本:6.0

基于JMX开发需要五个包:jmxri.jar,jmxremote.jar,jmissl.jar,jmxtools.jar,jmxremote_optional.jar,其中jmxri.jar,jmxremote.jar,jmissl.jar是必须的,jmxtools.jar,jmxremote_optional.jar如果用到就需要加入。在jkd5.0以后jmxri.jar,jmxremote.jar,jmissl.jar已经内嵌进jdk中,不需要额外加入。

开发最简单的JMX例子需要3步:

1、建立需要管理接口(比如:GlobleConfigsMBean)

2、建立需要管理的对象(比如:GlobleConfigs)并实习GlobleConfigsMBean接口

3、建立Agent类,进行管理对象的注册和适配器的监听

新建java project,然后将下载jmxtools-1.2.jar并加入classpath

下面是具体代码:

1、管理接口

package wangchao.config; public interfaceGlobleConfigsMBean {          public String getIpDir();           public void setIpDir(String ipDir);}


2、需要管理的对象

package wangchao.config; public class GlobleConfigs implements GlobleConfigsMBean{               private String ipDir;                public String getIpDir(){                               returnipDir;               }                public voidsetIpDir(String ipDir) {                               this.ipDir= ipDir;               }              }


3、Agent类

packagewangchao.config; importjava.lang.management.ManagementFactory;importjavax.management.MBeanServer;importjavax.management.ObjectName;importcom.sun.jdmk.comm.HtmlAdaptorServer; public classGlobleConfigsAgent {          public static void main(String[] args)throws Exception {                    //管理对象注册,和适配器监听                    MBeanServer mbServer =ManagementFactory.getPlatformMBeanServer();                    ObjectName objName = new ObjectName("setting:name=ip1");     //这里【setting】和【ip1】名字随便取                    GlobleConfigs conf = newGlobleConfigs();                    conf.setIpDir("192.168.196.17");                    mbServer.registerMBean(conf,objName);                    ObjectName adapterName = newObjectName("GlobleConfigsAgent:name=htmladapter,port=8081");                    HtmlAdaptorServer adapter =new HtmlAdaptorServer();                    mbServer.registerMBean(adapter,adapterName);                    adapter.start();                    System.out.println("start.....");                                       //验证修改的值是否实时改变                    for (int i = 0; i < 100;i++) {                               Thread.sleep(2000);                               System.out.println(conf.getIpDir());                    }          }}

OK,代码写完。运行GlobleConfigsAgent,然后访问:localhost:8082,如图:

 


点击name=ip1,对ip1的值进行重新设置,注意控制台输出。

注意1:

你可能发现:GlobleConfigsAgent中设置ObjectName adapterName = newObjectName("GlobleConfigsAgent:name=htmladapter,port=8081")中有个port=8081,为什么访问的的是8082呢?其实这里的port=8081没什么意义,只是GlobleConfigsAgent这个键的值而已,页面展示用的。真正的访问端口在HtmlAdaptorServer adapter = newHtmlAdaptorServer(8083)配置,如果不配置默认是8082。

注意2:

管理接口命名必须是:需管理对象类名+MBean,否则报如下错误

         javax.management.NotCompliantMBeanException:MBean class wangchao.config.GlobleConfigs does not implement DynamicMBean,neither follows the Standard MBean conventions

         比如:这里的管理接口是GlobleConfigsMBean,GlobleConfigs+MBean,改成IGlobleConfigsMBean会报错

注意3:

网上也有很多关于JMX入门的文章和笔记,但是也有一些有问题,比如有人说“com.sun.jdmk.trace.Trace找不到,将jxmri.jar加入到classpath即可,这就有问题,因为Tracejmxtools.jar里面。在运行过程中:如果报java.lang.NoClassDefFoundError:com/sun/jdmk/trace/Trace错误;检查是否导入jmxtools.jar包,其次检查jmxtools.jar的版本对不对,应该是jmxtools-1.2.jar或以后版本,笔者就是因为导入版本不对导致耽误了一定时间。