參考:http://tuhaitao.iteye.com/blog/786391html
這裏以MBean對象進行演示向服務器註冊,調用的過程。java
1.MBean接口,接口名必須以MBean結尾服務器
1 package gofAndJavaSourceStudy.jmxstudy.jmxImpl; 2 3 public interface HelloMBean { 4 //管理屬性 5 public void setName(String name); 6 7 public String getName(); 8 9 //管理操做 10 public String print(); 11 }
2.實現這個接口,定義屬性和行爲oracle
1 package gofAndJavaSourceStudy.jmxstudy.jmxImpl; 2 3 import java.lang.management.ManagementFactory; 4 5 import javax.management.Attribute; 6 import javax.management.MBeanServer; 7 import javax.management.ObjectName; 8 9 //MBean的接口和實現類必須位於同一個包中 10 11 public class Hello implements HelloMBean { 12 public String name; 13 14 public void setName(String name) { 15 // TODO Auto-generated method stub 16 this.name = name; 17 } 18 19 public String getName() { 20 // TODO Auto-generated method stub 21 return name; 22 } 23 24 public String print() { 25 // TODO Auto-generated method stub 26 String result = "Hello," + name + "!!"; 27 System.out.println(result); 28 return result; 29 } 30 31 public static void main(String args[]) throws Exception { 32 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); // 獲取MBeanServer 33 ObjectName name = new ObjectName("fjs:type=hello"); // 構造一個名字 34 Hello hello = new Hello(); // 建立須要註冊的對象 35 mbs.registerMBean(hello, name); // 註冊這個對象 36 37 mbs.setAttribute(name, new Attribute("Name", "bianjie")); //屬性首字母必須大寫 38 mbs.invoke(name, "print", null, null); //第三個參數爲Object[],爲傳入的參數值,第四個參數爲String[],指明參數類型 39 Thread.sleep(Long.MAX_VALUE); 40 } 41 42 }
main方法中演示了申請服務器,向服務器註冊MBean以及調用的過程。經過objectname,咱們能夠得到對象的屬性,傳參調用方法等等。工具
幾個須要注意的點:1.MBean接口和實現類必須位於同一包下2.Thread.sleep()必須有,阻塞線程,不然服務器和對象的生命週期都結束了,也就無管理可言了。因此運用在監控服務器上的應用程序。性能
3.幾個工具測試
oracle java mission control :能夠鏈接虛擬機,並監控虛擬機的各項指標狀態,遠程管理應用。從此能夠深刻研究,應該對性能測試,虛擬機調優做用很是大this
簡單調用了一下上面註冊的MBeanspa
---------------------------線程
二.關於JMX與JNDI的比較,參考:http://www.bitscn.com/pdb/java/200805/141680.html
操做對象:JMX和JNDI均可以對Java類和對象進行查找和定位(JMX中還支持對MBean的查找,並有特定的Query類)。可是在實際應用中,JMX通常用於系統重要的功能性組件;JNDI用來查找部署在服務器中的各個應用程序中的資源,例如servlet、EJB和POJO等,並會爲每一個應用程序創建獨立的隔離的Context.各個Context中,只能定位在這個Context中的資源。