国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

擴展 Spring 的 JMX 支持

2019-11-18 13:46:36
字體:
來源:轉載
供稿:網友

  SPRing 框架將體系結構依靠性降至最低,并且將應用程序中得組成部分進行了具體化,但是應用程序仍然是需要治理的。幸運的是,Spring 1.2 包括高級的 JMX 集成支持,并且 JMX 為應用程序提供了一種實用的治理基礎架構。在本文中,Claude Duguay 從 Spring JMX 更進一步,向您展示了如何為方法和屬性透明地增加通知事件。最后得到的代碼使您可以監視狀態變化,同時不會搞亂 java? 對象。

  雖然 Spring 框架的 JMX 治理基礎架構的默認配置已經很不錯了,但是仍然有定制的余地,非凡是涉及 Model MBean 提供的更高層功能時。在本文中,我使用了一種相對簡單的操作 —— 為基于 Spring 的應用程序的方法和屬性增加通知事件 —— 以幫助您熟悉對 Spring JMX 的定制。從頭到尾完成我的例子后,您將可以根據自己應用程序的需要調整 Spring JMX 治理基礎架構。

  我首先對 JMX API、Spring 框架和 Spring JMX 進行簡單回顧,然后轉入開發擴展。第一個擴展讓我可以用一個外部 xml 格式配置 MBean 元數據,這個格式(像 Hibernate 映射文件)可以與 Java 對象一起存儲在類路徑中。我的第二個擴展為 ModelMBean 類增加一個簡單的命名規范,以透明地配置定制的通知消息。在屬性改變時或者調用了特定的方法之前或者之后觸發新的通知消息。

  文章的最后是一個基于 mockup 服務對象的實際例子,需要治理它的啟動和停止方法和讀寫屬性。我用一個專門為此設計的小型客戶機/服務器應用程序測試了這個實現。應用服務器是一個標準 Java 5.0 MBeanServer,并補充了源自 MX4J 開放源碼項目的 HTTP 適配器。

  JMX 概述

  Java Management Extensions(JMX)是治理和監視網絡上的服務的、基于 Java 的標準。JMX API 的核心是受管 bean,即 MBean。MBean 為受管資源(如應用程序、服務和設備)提供了設施層。簡而言之,MBean 提供了一種靈活的、基于適配器的體系結構,用于開放基于 Java 的(或者 Java 包裝的)資源的屬性和操作。開放后,就可以用瀏覽器和 HTTP 連接或者通過像 SMTP 或者 SOAP 這樣的協議監視和治理這些資源。

  編寫和部署的 MBean 是通過 MBeanServer 接口開放的,以使不同的應用程序視圖具有交互性。MBeanServer 實例還可以結合到任意的聯合關系中,構成更復雜的分布式環境。

  JMX 標準提供了四種不同的 MBean:
  • Standard MBean 直接實現用于治理對象的方法,既可以通過實現一個由程序員定義的、類名以 “MBean” 結束的接口,也可以使用一個以一個類作為構造函數參數的 Standard MBean 實例,加上一個可選的接口類規范。這個接口可以開放用于治理的部分對象方法。

  • Dynamic MBean 用屬性訪問器動態地訪問屬性,并用一個一般化的 invoke() 方法調用方法。可用的方法是在 MBeanInfo 接口中指定的。這種方式更靈活,但是不具有像 Standard MBean 那樣的類型安全性。它極大地降低了耦合性,可治理的 POJO(純粹的老式 Java 對象)不需要實現特定的接口。

  • Model MBean 提供了一個改進的抽象層,并擴展了 Dynamic MBean 模型以進一步減少對給定實現的依靠性。這對于可能使用多個版本的 JVM 或者需要用松散耦合治理第三方類的情況會有幫助。Dynamic MBean 與 Model MBean 之間的主要區別是,在 Model MBean 中有額外的元數據。

  • Open MBean 是受限的 Model MBean,它限制類型為固定的一組類型,以得到最大的可移植性。通過限制數據類型,可以使用更多的適配器,并且像 SMTP 這樣的技術可以更輕易適應 Java 應用程序的治理。這種變體還指定了數組和表等標準結構以改進復合對象的治理。

  假如要同時控制客戶機和服務器,那么 Standard MBean 是最輕易實現的一種變體。它們的優點是有類型,但是假如在更一般化的治理控制臺環境中使用時會缺少一些靈活性。假如計劃使用 Dynamic MBean,那么您也可以更一步使用 Model MBean,在大多數情況下它會改善抽象層而幾乎不會增加復雜性。Open MBean 是是可移植性最高的一種變體,假如需要開放復合對象,那么它是惟一的方法。不幸的是,在 Open MBean 中開放復合結構所需要的代碼數量過多,只有在需要高級的商業治理解決方案時才合算。

  JMX 還支持使用帶過濾器和廣播器的事件模型的通知。為此目的,Standard MBean 需要聲明一個 MBeanInfo 元數據描述。 Standard MBean 實現通常在內部構造這些內容,開發人員不能直接看到它們。在本文后面,您會看到如何用 Model MBean 元數據的 XML 描述符格式和 Spring 的 JMX 支持進行實際上透明的配置。

  Spring 提供幫助

  像 J2EE 一樣,Spring 框架在一個體系結構中提供了許多強大的 Java 開發功能。與 J2EE 不同的是,Spring 開放型的技術來源提供了范圍廣泛的選擇,不再有依靠性的負擔。例如,Spring 的對象關系映射工具可以復制 Enterprise JavaBean 的行為,同時不會導致不靈活。雖然 EJB 規范限制了這種方式,但是 Spring 提供了大量技術接口,使您可以選擇最適合應用程序要求的接口,或者在需要時創建自己的接口。與此類似,利用 Spring 的動態代理類為 Java 對象增加事務性或者安全限制,使它們保持整潔并針對應用程序空間而不是基礎架構要求。

  Spring 的支持 AOP 的、以復合為中心的(IOC)bean 可以很大程度上使基礎架構和業務對象彼此分離。因此,橫切關注點(如日志、事務和安全)不會再干擾應用程序代碼。

  IOC(控制反轉)是減少耦合度的主要策略。Spring 的 IOC 實現使用依靠性注入有效地將控制從應用程序代碼 “反轉”到 Spring 容器。Spring 不是在創建時將類耦合到應用程序的對象圖,它使您可以用 XML 或者屬性文件(盡管 XML 被認為是最好的方法)配置類及它們的依靠性。然后用標準訪問器將引用“注入”到類所依靠的對象中。可以將它看成具體化復合(externalizing composition),在典型應用程序中,它的比重遠遠大于繼續。

  AOP 是在應用程序開發中治理橫切關注點的要害。就像在傳統面向對象編程中實現的那樣,這些關注點是作為單獨的實例處理的,有可能在應用程序類中產生互不相關的代碼(就是混亂)。 Spring 使用 AOP 規范和一個 XML 配置文件具體化橫切關注點,因而保持了 Java 代碼的純潔性。

  介紹 Spring JMX

  Spring 1.2 中的 JMX 支持使用輕易配置的 bean 代理提供了自動 MBeanServer 注冊,并支持標準 JSR-160 遠程連接器。在最簡單的情況下,可以用 Spring JMX 以 MBeanEXPorter 類注冊對象。Spring 自動識別 StandardMBean 或者用 ModelMBean 代理包裝對象,在默認情況下使用內省。可以以顯式引用使用 BeanExporter 以聲明 bean,或者可以用默認策略或更復雜的策略自動檢測 bean。

  Spring 1.2 提供的大量裝配器使得透明地構造 MBean 成為可能,包括使用內省、Standard MBean 接口、元數據(使用類級別注釋)和顯式聲明的方法名。Spring 的基于導出器和裝配器的模型輕易擴展,并在創建注冊的 MBean 時提供所需要的控制能力。

  JMX 使用 ObjectName 語言注冊和訪問治理對象。假如選擇使用自動注冊,那么 Spring 提供了不同的命名策略。使用“鍵”命名策略時,可以使用一個屬性把 MBean 名與 NameObject 實例關聯起來。假如實現 ManagedResource 接口,那么可以使用元數據命名規范。由于 Spring 高度靈活的體系結構和大量擴展點,還可以實現自已的策略。

  在默認情況下,Spring 會發現運行的 MBeanServer 實例,假如沒有實例在運行或者沒有顯式聲明的話,它會創建一個默認實例。用 Spring 配置直接實例化自己的 MBeanServer 與使用各種連接器同樣輕易。Spring 通過客戶機和服務器連接提供控制,并提供客戶機代理以協助客戶端編程。

  所有這些功能都是 Spring 1.2 默認提供的。雖然 Spring JMX 提供了大量選項,但是默認的導出器對于許多項目來說已經足夠了,使您可以很快地投入運行。不過,使用 JMX 時,在使用隱式 MBean 構造時會注重到一些特性。結果,可能會慢慢地從 Standard MBean 轉移到 Model MBean,它答應對應用程序的屬性、操作和通知元數據施加更多的控制。要保留松散耦合的好處(也就是 Spring 靈活的體系結構內在的優點),需要在 Java 對象之外實現這個控制。

  Spring 的 IOC 使得從外部連接(wire)對象依靠性輕易了,在 Spring 的體系結構中很輕易利用這種優點。IOC 保持對象依靠性的可注入性,這使得增加、替換或者補充對象的行為(包括 Spring 的 JMX 支持)變得輕而易舉。在本文的其余部分,我將重點放到擴展 Spring JMX 以得到更細化的應用程序治理,而不會搞亂應用程序代碼或者破壞 Spring 固有的靈活性。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长垣县| 繁峙县| 黄大仙区| 桐乡市| 湾仔区| 东乌珠穆沁旗| 海兴县| 那坡县| 正安县| 阿荣旗| 开鲁县| 循化| 普兰县| 庐江县| 康乐县| 鄂伦春自治旗| 行唐县| 阿荣旗| 泸定县| 比如县| 绥江县| 渝中区| 建阳市| 皮山县| 昆明市| 台中市| 平舆县| 兴隆县| 洪江市| 吴桥县| 河津市| 泌阳县| 新巴尔虎右旗| 固始县| 东明县| 通城县| 凌海市| 固原市| 内乡县| 丘北县| 吴川市|