JMX架構(gòu)的了解(轉(zhuǎn))
JMX應(yīng)該說是關(guān)于網(wǎng)絡(luò)應(yīng)用管理的的框架,如果你開發(fā)了一個比較復(fù)雜的系統(tǒng),無疑你要提供這個系統(tǒng)的自身管理 系統(tǒng),JMX更多應(yīng)用是體現(xiàn)在Server上,如果你要使用java開發(fā)一個自己Server或復(fù)雜的應(yīng)用系統(tǒng),那么推薦你基于JMX架構(gòu)來開發(fā), JBoss 3.0 weblogic等就是基于JMX開發(fā)的符合J2EE規(guī)范的
服務(wù)器軟件。
了解JMX可以使你深入了解J2EE服務(wù)器, 為什么我們平時說 "EJB"是個比較"Weight"的方案選擇,其中一個原因是J2EE服務(wù)器軟件本身 也是你的系統(tǒng)中一部分,它作為你系統(tǒng)的容器,對你的系統(tǒng)有至關(guān)重要的作用,如果無法直接介入 管理或“調(diào)教”它,那么無疑你的系統(tǒng)本身存在著隱含的危險, 現(xiàn)在,通過JMX,你現(xiàn)在可以深入到你J2EE容器內(nèi)部的管理了。 (好像國內(nèi)出現(xiàn)了第一個自己J2ee服務(wù)器,不知道那是不是基于JMX開發(fā)的?)
J2EE并不能概括所有的應(yīng)用領(lǐng)域,比如對速度和性能要求極高的游戲或股票行情等系統(tǒng)就需要自己直接來開發(fā)Server, 如果是能夠基于JMX開發(fā),那么可以說就大大提高編寫管理程序的效率,可以將你的模塊變成JMX的MBean,可以通過Agent在程序內(nèi)部或者通過 WEB管理頁面對你的MBean模塊進行初始化 重啟 以及參數(shù)設(shè)置。
JMX的好處還有:可以方便整合連接現(xiàn)有的Java技術(shù),如JNDI JDBC JTS及其它。特別是能夠使用Jini的查詢 發(fā)現(xiàn)機制以及協(xié)議,我們知道,Jini提供了一種服務(wù)的查詢和發(fā)現(xiàn)機制,這些services都可以通過JMX 來實現(xiàn)管理。
現(xiàn)在我們開始JMX的了解:
1.到j(luò)ava.sun.com首頁的JMX頁面,下載JMX的規(guī)定說明和Samples程序。
2.按照J(rèn)MX的說明進行一次Tutorial,了解如何加入 刪除 配置一個MBean,Tutorial中是以SimpleMBean為例,那么我們能否建立一個自己的MBean?
我們來做一個Hello 的MBean,這里有一個小關(guān)鍵點,你的class取名有個規(guī)則, 需要以MBean為結(jié)尾,如這里我們?nèi)∶麨镠elloMbean:
public interface HelloMBean {
// management attributes
public String getName();
public void setName(String name);
// management operations
public void print();
}
在這個Class里,有一個隱含attributes: name, 提供了set和get的方法,同時有一個操作方法print():
再定義一個concrete類:
public class Hello implements HelloMBean {
private String name = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void print() {
System.out.println("Hello, " + name + "!!" );
}
}
這樣一個簡單的MBean就做好了,我們可以通過admin界面加入這個Hello,
再按 Tutorial啟動BaseAgent,在Agent Administration中參考Simple填入:
Domain: Standard_Hello_MBeans
Keys : name=Hello,number=1
Java Class: Hello
將出現(xiàn)Create Successful信息。進入MBean View 給Name賦值,點按Apply ,然后再按print,這是你的Hello中的方法,在控制臺你會看到輸出。
是不是很驚奇Hello中的 attributes 和operations能被動態(tài)的訪問和控制? 已經(jīng)隱約感到JMX的架構(gòu)原理了吧?
下面再深入明確一些概念:
上面HelloMBean資源是通過admin這樣的HTTP WEB界面管理,這種管理資源方式是屬于JMX的Distributed服務(wù)層, JMX 通過Distributed層能夠部署和管理MBean資源。就象上面的例子,是通過HtmlAdaptor提供的HTTP WEB界面來方面的維護管理HelloMBean.
那么我們能否在程序中自動管理和部署我的MBean?當(dāng)然可以,這是通過Agent層來完成,現(xiàn)在我們已經(jīng)有了這個層次,MBean所在的資源層,
最外面的Distributed服務(wù)層,Distributed服務(wù)層是通過Agent層來訪問MBean資源的,看看下面來自Sun公司JMX規(guī)定的架構(gòu)圖:
從圖中看出,Agent Level(Agent層)包括MBean Server和Agent Services,那么我們來做一個上面例子HelloMBean的Agent:
// CREATE the MBeanServer
//
System.out.println("
CREATE the MBeanServer.");
MBeanServer server = MBeanServerFactory.createMBeanServer();
// CREATE Registe HelloMBean
//
System.out.println("
CREATE, REGISTER a new Hello Standard_MBean:");
HelloMBean helloMBean = new Hello();
ObjectName hello_name = null;
try {
hello_name = new ObjectName("Standard_Hello_MBeans:name=Hello,number=1");
System.out.println(" OBJECT NAME = " + hello_name);
//將HelloMBean注冊到MBeanServer中去
server.registerMBean(helloMBean, hello_name);
}
catch (Exception e) {
e.printStackTrace();
return;
}
向MBeanServer注冊后,以后JMX就知道有了這個HelloMBean資源。
管理一個agent的MBean資源或使用它提供的服務(wù)必須通過一個protocol adaptor 或者connector,adaptor 或者connector屬于Distributed layer level(Distributed服務(wù)層),我們上面例子中通過HTTP WEB界面管理HelloMBean就是瀏覽器通過HtmlAdaptor這個adaptor來實現(xiàn)的。
通過本篇文章,你應(yīng)該大體了解了JMX的架構(gòu)和一些原理和應(yīng)用,再深入可以研究SUN的JMX Specification.
[@more@]