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

相關文章
相關標籤/搜索