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