JMX学习笔记(一)-MBean

来源:http://blog.csdn.net/qiao000_000/article/details/6061808java

JMX        即 Java Management Extensions   Java管理扩展
MBean   即 managed beans                         被管理的Beans

一个MBean是一个被管理的Java对象,有点相似于JavaBean,一个设备、一个应用或者任何资源均可以被表示为MBean,MBean会暴露一个接口对外,这个接口能够读取或者写入一些对象中的属性,一般一个MBean须要定义一个接口,以MBean结尾, 例如: EchoMBean, 格式为XXXMBean,这个是规范,必须得遵照。例如:ide

 

 

Java代码  复制代码
  1. package com.haitao.jmx;   
  2.   
  3. /**  
  4.  * JMX MBean Interface  
  5.  *   
  6.  * @author haitao.tu  
  7.  *   
  8.  */  
  9. public interface EchoMBean {   
  10.   
  11.     public void print(String yourName);   
  12.   
  13. }  

很简单的,在EchoMBean接口中,定义了一个print方法,带一个yourName的String类型参数,只有接口貌似没什么用,下边咱们实现这个接口函数

 

 

Java代码  复制代码
  1. package com.haitao.jmx;   
  2.   
  3. /**  
  4.  * Implements of JMX EchoMBean  
  5.  *   
  6.  * @author haitao.tu  
  7.  *  
  8.  */  
  9. public class Echo implements EchoMBean {   
  10.   
  11.     @Override  
  12.     public void print(String yourName) {   
  13.         System.out.println("Hi " + yourName + "!");   
  14.     }   
  15.        
  16. }  

Echo实现了EchoMBean接口,很简单咱们只是print了hi yourName!

按照JMX的定义,是被管理的对象,如今咱们只是定义了该对象,并无被管理,接着咱们让这个Echo类的实例对象被管理起来:spa

Java代码  复制代码
  1. package com.haitao.jmx;   
  2.   
  3. import java.lang.management.ManagementFactory;   
  4.   
  5. import javax.management.MBeanServer;   
  6. import javax.management.ObjectName;   
  7.   
  8. /**  
  9.  * JMX App Demo  
  10.  *   
  11.  * @author haitao.tu  
  12.  */  
  13. public class App {   
  14.        
  15.     public static void main(String[] args) throws Exception {   
  16.         // 建立MBeanServer   
  17.         MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();   
  18.            
  19.         // 新建MBean ObjectName, 在MBeanServer里标识注册的MBean   
  20.         ObjectName name = new ObjectName("com.haitao.jmx:type=Echo");   
  21.            
  22.         // 建立MBean   
  23.         Echo mbean = new Echo();   
  24.            
  25.         // 在MBeanServer里注册MBean, 标识为ObjectName(com.tenpay.jmx:type=Echo)   
  26.         mbs.registerMBean(mbean, name);   
  27.   
  28.            
  29.         // 在MBeanServer里调用已注册的EchoMBean的print方法   
  30.         mbs.invoke(name, "print", new Object[] { "haitao.tu"}, new String[] {"java.lang.String"});   
  31.            
  32.         Thread.sleep(Long.MAX_VALUE);   
  33.     }   
  34.   
  35. }  

1. 首先咱们在App类中向ManagementFactory申请了一个MBeanServer对象
2. 接着咱们即然要使Echo的实例对象被管理起来,咱们就须要给这个对象一个标识,这个标识是ObjectName.注意这个ObjectName构造函数,这里使用了(包名:type=类名)的形式.
3. 而后咱们经过mbs.registerMBean方法注册了echo,并传入了ObjectName在MBeanServer中标识该MBean.
4. 随后咱们经过mbs.invoke方法调用了已经注册的Echo的print方法,经过ObjectName找到该MBean, 并经过最后两个参数,传入print方法执行的参数,与参数的类型。
5. 最后咱们sleep主线程,等待其余线程的调用.

经过这个例子咱们能够看出,MBean的好处,在Echo的实例对象未被管理以前,咱们只能经过Echo对象的句柄,来调用Echo里的public方法,在被管理以后,咱们能够经过MBeanServer的句柄mbs来调用Echo对象的print方法。.net

相关文章
相关标签/搜索