MBean的學習


參考:http://tuhaitao.iteye.com/blog/786391

這里以MBean對象進行演示向服務器注冊,調用的過程。

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.實現這個接口,定義屬性和行為

 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 :可以連接虛擬機,並監控虛擬機的各項指標狀態,遠程管理應用。今后可以深入研究,應該對性能測試,虛擬機調優作用非常大

簡單調用了一下上面注冊的MBean

---------------------------

二.關於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中的資源。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM