JMX学习(2)

JMX Hello World实例的开发

1. 准备开发环境:我使用的是JDK 1.7.0_60 版本,下载JMX 参考实现相关包,oracle下载地址http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#7657-jmx-1.2.1-oth-JPR
   下载"
Java Management Extension (JMX) 1.2.1",
     解压后 jmx-1_2_1-bin目录下有jmxri.jar和jmxtools.jar,
   
将jmxtool.jar拷贝出来放入classpath,  它里面有一个要用到的Html适配器HtmlAdaptorServer类



  

 我将 jmxtool.jar 拷贝到 C:\Java\jdk1.7.0_60\lib目录下,也可以放到其他目录下,方便后续项目引入该jar包


2. 开发标准MBean

   进入MyEclispse, 新建 java项目  HelloMBean

   在包demo.mbean下 新建HelloWorldMBean接口
    

    

  新建实现类 HelloWorld.java

   

   

   一个标准MBean完成

   必须把MBean注册到Agent才能使用,下面完成一个Agent

   定义JMX Agent:HelloAgent,完成三个任务:
    1)、创建MBean Server实例。
    2)、创建HTML适配器和HTML客户端连接。
    3)、注册一个新的HelloWorld的MBean实例。

    

    在包demo.agent下新建类 HelloAgent

    
    


      先创建一个MBean Server实例和一个Html适配器实例,MBean Server使用工厂类创建,创建的时候传入字符串作为MBean Server的域名,域名是区别MBean Server的标识。
      然后实例化HelloWorld MBean,并在MBean Server中注册。注册的时候使用一个ObjectName实例,ObjectName类在JMX中为MBean提供了一套命名系统,是注册在MBean Server中的唯一标识。它有两部分组成:
    1)域名:这个域名通常和MBean Server的域名一致,如果不一致,则意味着与其他MBean隔离。本例中的域名为HelloAgent
    2)零个或多个key=value串,中间用逗号隔开,这个串用来区别MBean,也可以为MBean提供信息。

    项目代码完成后如下图:

     

     jmxtools.jar 是通过手动加入,否则Html适配器HtmlAdaptorServer类无法使用。

     

    

      运行项目HelloMBean。HelloAgent类有main方法,直接运行就可以了,成功就会出现“HelloAgent is running”。然后打开浏览器,输入:http://localhost:9092/,因为代码中Html的适配器端口设置为9092。
     


     点击 name=helloWorld1  
     
 

 点击 name=htmladapter,port=9092
 
  


  还能看到type为 MBeanServerDelegate   的 MBean
  



    下面修改MBeanServer的创建方式,方便通过JConsole来查看MBean

    将 HelloAgent文件中的 

         mbs = MBeanServerFactory.createMBeanServer("HelloAgent"); 
    修改为
        mbs = ManagementFactory.getPlatformMBeanServer();

     

     通过getPlatformMBeanServer并未创建名字为 HelloAgent的MBeanServer,所以

    将 helloWorldName = new ObjectName("HellAgent:name=helloWorld1");

    修改为 helloWorldName = new ObjectName("JmxMBean:name=helloWorld1");  JmxMBean 也就是前面说过的域名可以是除HelloAgent外任意名字;

    将 adapterName = new ObjectName("HelloAgent:name=htmladapter,port=9092");

    修改为 adapterName = new ObjectName("JmxMBean:name=htmladapter,port=9092");

    运行程序后,再运行JConsole.exe,可以看到
     


     选择本地连接 demo.agent.HelloAget,连接:
     
     
      以不安全方式连接后, 可以看到JmxMBean中的helloWorld1和 htmladapter的属性及操作

     
    

     

     MBean通知
    加入通知代码到HelloWorld的MBean,JMX提供了两种方法使MBean可以作为其他MBean的监听对象。第一种是实现javax.management.NotificationBroadcaster接口,第二种时继承javax.management.NotificationBroadcasterSupport类。
    实现接口的好处是你还可以继承其他类,继承类的好处是你不需要写实现接口的方法代码。我们选择使用继承类的方法,HelloWorld类代码修改成如下:

    


      在setGreeting方法中增加了一些代码,首先实例化一个通知,然后发送这个通知,也就是说在greeting属性设置的时候,发送通知到对此次事件感兴趣的对象。实例化通话需要5个参数,第一个是这个通知的标识符,第二个是参数是通知源,也就是产生通知的MBean,第三个是个序列号,第四个是发送时间,第五个是发送的消息字符串。
      修改HelloAgent,代码如下:
 
 
   

        在构造器中增加了“hw.addNotificationListener(this, null, null);”这行代码,它就是把HelloAgent加入到HelloWorld MBean的监听列表中。还增加了一个方法handleNotification,这个是实现了NotificationListener接口的方法,当HelloWorld Mbean的greeting属性被设置的时候,就会调用这个方法,其实是很简单的一个观察者模式。 

       运行项目后, 再运行JConsole.exe,可以看到JmxMBean下有了通知:
      

      点击右下方的 订阅按钮
      


      修改属性Greeting,刷新, 可以看到 通知中有了消息:  可以清除,取消订阅通知
      
      


  参考资料:

   JMX In Action

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值