MBean的學習

參考: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中的資源。

相關文章
相關標籤/搜索