JMX学习笔记一

开发环境: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或以后版本,笔者就是因为导入版本不对导致耽误了一定时间。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值