生成 JMX 通知
清單 2. WebAppServerMXBean 類的這個實現(xiàn),包括 給應用服務添加新的 WebModule 時,要調(diào)用的 addWebModule() 方法。
public class WebAppServerMXBeanImpl
extends NEStandardMBean
implements WebAppServerMXBean {
// Implementation details removed -- see
// full source code
private ArrayList webModules =
new ArrayList();
private String adminEMail;
public void setAdminEMail(String adminEMail){
String oldEMail = this.adminEMail;
this.adminEMail = adminEMail;
// create and send a notification.
Notification notif = new Notification(
"jmxbp.attribute_changed", "hello", 1,
System.currentTimeMillis(),
"attribute: AdminEMail, old value: " +
oldEMail + ", new value: " + adminEMail);
sendNotification(notif);
}
// non-MBean methods.
public void addWebModule(String objectName){
webModules.add(objectName);
// create and send a notification.
Notification notif = new Notification(
"jmxbp.child_added", "hello", 1,
System.currentTimeMillis(), "test message");
sendNotification(notif);
}
}
使用 JMX 通知是 SOMA 的關(guān)鍵設計原則之一。在面向服務的設計中,您需要獲得托管資源的能力,以便與管理系統(tǒng)進行簡易的通信。 JMX 通知允許您,更容易地生成要處理的應用程序事件。另外,正確使用通知機制,可以減輕潛在的性能問題,具體方法是,讓管理系統(tǒng)頻繁地輪詢應用程序,看看有無變化。
聚會時間
最佳實踐 5 :分離管理和業(yè)務關(guān)系。有一個良好的設計實踐是, 把需要托管的業(yè)務對象,從管理它們的管理接口中分離出去。許多當前的 JMX 最佳實踐,并沒有使這種分離表現(xiàn)為顯式的,這就導致了把業(yè)務層和 JMX 接口相結(jié)合的應用程序的開發(fā)。
把這兩個方面相混合,可能會帶來一些嚴重的后果,比如需要為一個類的每個實例注冊一個 JMX MBean 。另一方面,分離管理和業(yè)務,允許管理接口獨立于所定義的業(yè)務對象而變化。
您可以應用一系列非常確實的設計模式,來輔助對您管理層的建模工作 ( 參見參考資料 ) 。例如, SeparateMBean 模式 ( 參見 圖 5 ) 描述了,與必須托管的,從業(yè)務對象分離的單獨對象的, MBean 的創(chuàng)建。創(chuàng)建業(yè)務對象時,它們要維持一個引用,引用了充當它們管理方的,單獨的 MBean 對象。
圖 5. SeparateMBean 設計模式
SeparateMBean 模式描述的是,與必須托管的業(yè)務對象分離的,單獨對象的 Mbean 的創(chuàng)建。每個業(yè)務對象維護一個充當它們管理方的,單獨 MBean 對象的引用。
盡管我們的例子沒有包括 ServletMXBean 的真正實現(xiàn),但實際上是可以使用 SeparateMBean 模式的,在該模式中, MXBean 是由 Servlet 對象更新的。
在 Web 服務管理接口中獲得正確的粒度級別時,其他設計模式可能會對您有所幫助。因為每個 Mbean 都有與注冊和查找相關(guān)的開銷,設計過多的 Mbean 會影響性能。通過使用級聯(lián)模式,您可以使這種性能影響變?yōu)樽钚。⑾蚬芾響贸绦蛱峁└哟至6鹊慕涌凇?/P>
還有一件事情也很重要,即,要把 JMX 管理接口看作是管理數(shù)據(jù)的庫,而不是管理邏輯的庫。當您需要監(jiān)控應用程序的闕值違規(guī)時,應把這種邏輯放入管理系統(tǒng),而不是放入托管應用程序中。這樣做可以提供更多的靈活性,以便在部署應用程序之后,更新服務級別的監(jiān)控。
隨著所部署體系結(jié)構(gòu)的復雜程度和分布式程度的增加, IT 將需要一個更加靈活而開放的體系結(jié)構(gòu),來管理 SOA 組件。諸如 JMX 這樣的管理技術(shù),為實現(xiàn) J2EE 應用程序的易管理性提供了具體的解決方案,但是它們并不能滿足需要。
為了實現(xiàn) SOMA ,您必須將 SOA 原則應用于管理,這需要考慮每個應用程序,對易管理性的要求。然后,管理功能就組成了資源的管理模型。擁有一組通用管理模型,是構(gòu)建跨廠商實現(xiàn)的,標準管理接口的關(guān)鍵。
在 Web 服務技術(shù)領(lǐng)域的經(jīng)驗中,強調(diào)設計中互操作性的重要性,而且在您使用 JMX 技術(shù)時,應該注意選擇正確的數(shù)據(jù)類型,來緩解這些問題。另外,您可以期待 JSR 77 中提供的功能,能夠幫助您,在您的應用程序中構(gòu)建管理功能。然而,使用 JMX 開發(fā)您的應用程序,需要花費更多的工夫。它要求圍繞您的易管理性需求,進行仔細地規(guī)劃,還要求仔細地分離管理和業(yè)務問題,從而使您的設計具有最大的靈活性。
最近引入的 JSR 255 把目標定為更新 JMX 和 JMX Remote API ,從而從可用性的角度改善現(xiàn)有的接口 ( 參見資源 ) 。我們希望,經(jīng)過修訂的規(guī)范可以結(jié)合這里給出的最佳實踐,或者能夠讓使用這些最佳實踐變得更加容易。我們還要清楚如何努力,去引入單獨的 JSR ,以探討,用于搭建從 JMX 到 Web 服務標準(比如 SOAP )的橋梁的可用方法。
通過結(jié)合一些方法,以及這里討論的 JMX 技術(shù),您可以更加高效地公開使用 JMX 的、帶有 WSDM 的應用程序或者其他管理接口。最后,您將能夠設計更多管理感知的、能夠滿足業(yè)務需求的應用程序。
想要了解關(guān)于 JMX 技術(shù)的更多信息,您可以訪問 HP 的 Dev Resource Central ,在那里,您可以找到有關(guān)這個主題的大量技術(shù)資源、文章和指南(參見 參考資料 )。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |