溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JMX架構(gòu)的了解(轉(zhuǎn))

發(fā)布時間:2020-08-14 08:57:01 來源:ITPUB博客 閱讀:132 作者:rainytag 欄目:編程語言
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)圖:


JMX架構(gòu)的了解(轉(zhuǎn))

從圖中看出,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@]
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI