1.1 JMX概述
JMX--Java Management
Extensions,即Java管理擴充,是一個為應用程式、裝置、系統等植入管理功能的架構。JMX可以跨越一系列異構作業系統平台、系統體繫結構和網路傳輸協議,靈活的開發無縫整合的系統、網路和服務管理應用。
JMX體繫結構分為以下四個層次:
1)裝置層(Instrumentation
Level):主要定義了資訊模型。在JMX中,各種管理對象以管理構件的形式存在,需要管理時,向MBean伺服器進行註冊。該層還定義了通知機制以及一些輔助中繼資料類。
2)代理層(Agent
Level):主要定義了各種服務以及通訊模型。該層的核心是一個MBean伺服器,所有的管理構件都需要向它註冊,才能被管理。註冊在MBean伺服器上管理構件並不直接和遠程應用程式進行通訊,它們通過協議適配器和連接器進行通訊。而協議適配器和連接器也以管理構件的形式向MBean伺服器註冊才能提供相應的服務。
3)分布服務層(Distributed Service
Level):主要定義了能對代理層進行操作的管理介面和構件,這樣管理者就可以操作代理。然而,當前的JMX規範並沒有給出這一層的具體規範。
4)附加管理協議API:定義的API主要用來支援當前已經存在的網路管理協議,如SNMP、TMN、CIM/WBEM等。
1.2
裝置層(Instrumentation
Level)
該層定義了如何?JMX管理資源的規範。一個JMX管理資源可以是一個Java應用、一個服務或一個裝置,它們可以用Java開發,或者至少能用Java進行封裝,並且能被置入JMX架構中,從而成為JMX的一個管理構件(Managed
Bean),簡稱MBean。管理構件可以是標準的,也可以是動態,標準的管理構件遵從JavaBeans構件的設計模式;動態管理構件遵從特定的介面,提供了更大的靈活性。
該層還定義了通知機制以及實現管理構件的輔助中繼資料類。
1.2.1
管理構件(MBean)
在JMX規範中,管理構件定義如下:它是一個能代表管理資源的Java對象,遵從一定的設計模式,還需實現該規範定義的特定的介面。該定義了保證了所有的管理構件以一種標準的方式來表示被管理資源。
管理介面就是被管理資源暴露出的一些資訊,通過對這些資訊的修改就能控制被管理資源。一個管理構件的管理介面包括:
1)能被接觸的屬性值;
2)能夠執行的操作;
3)能發出的通知事件;
4)管理構件的構建器。
管理構件通過公用的方法以及遵從特定的設計模式封裝了屬性和操作,以便暴露給管理應用程式。例如,一個唯讀屬性在管理構件中只有Get方法,既有Get又有Set方法表示是一個可讀寫的屬性。
其餘的JMX的構件,例如JMX代理提供的各種服務,也是作為一個管理構件註冊到代理中才能提供相應的服務。
JMX對管理構件的儲存位置沒有任何限制,管理構件可以儲存在運行JMX代理的Java虛擬機器的類路徑的任何位置,也可以從網路上的任何位置匯入。
JMX定義了四種管理構件:標準、動態、開放和模型管理構件。每一種管理構件可以根據不同的環境需要進行制定。
1.標準管理構件
標準管理構件的設計和實現是最簡單的,它們的管理介面通過方法名來描述。標準管理構件的實現依靠一組命名規則,稱之為設計模式。這些命名規則定義了屬性和操作。檢查標準管理構件介面和應用設計模式的過程被稱為內省(Introspection)[22]。JMX代理通過內省來查看每一個註冊在MBean
伺服器上的管理構件的方法和超類,看它是否遵從一定設計模式,決定它是否代表了一個管理構件,並辨認出它的屬性和操作。
2.動態管理構件
動態管理構件提供了更大的靈活性,它可以在運行期暴露自己的管理介面。它的實現是通過實現一個特定的介面DynamicMBean(如)。
JMX代理通過getMBeanInfo方法來擷取該動態管理構件暴露的管理介面,該方法返回的對象是MbeanInfo類的執行個體,包含了屬性和操作的簽名。由於該方法的調用是發生在動態管理構件向MBean伺服器註冊以後,因此管理介面是在運行期擷取的。不同於標準管理構件,JMX代理不需要通過內省機制來確定動態管理構件的管理介面。由於DynamicMBean的介面是不變的,因此可以屏蔽實現細節。由於這種在運行期擷取管理介面的特性,動態管理構件提供了更大的靈活性。
3.開放管理構件
開放管理構件是一種專門化的動態管理構件,其中所有的與該管理構件相關的參數、傳回型別和屬性都圍繞一組預定義的資料類型(String、Integer、Float
等)來建立,並且通過一組特定的介面來進行自我描述。JMX代理通過獲得一個OpenMBeanInfo對象來擷取開放管理構件的管理介面,OpenMBeanInfo是MbeanInfo的子類。
4.模型管理構件
模型管理構件也是一種專門化的動態管理構件。它是預製的、通用的和動態 MBean
類,已經包含了所有必要預設行為的實現,並允許在運行時添加或覆蓋需要定製的那些實現。JMX規範規定該類必須實現為javax.management.modelmbean.RequiredModelMBean,管理者要做的就是執行個體化該類,並配置該構件的預設行為並註冊到JMX代理中,即可實現對資源的管理。JMX代理通過獲得一個ModelMBeanInfo對象來擷取管理介面。
模型管理構件具有以下新的特點[23]:
1)持久性
定義了持久機制,可以利用Java的序列化或JDBC來儲存模型MBean的狀態。
2)通知和日誌功能
能記錄每一個發出的通知,並能自動發出屬性變化通知。
3)屬性值緩衝
具有緩衝屬性值的能力。
1.2.2
通知模型
一個管理構件提供的管理介面允許代理對其管理資源進行控制和配置。然而,對管理複雜的分布式系統來說,這些介面只是提供了一部分功能。通常,管理應用程式需要對狀態變化或者當特別情況發生變化時作出反映。
為此,JMX定義了通知模型。通知模型僅僅涉及了在同一個JMX代理中的管理構件之間的事件傳播。JMX通知模型依靠以下幾個部分:
1)Notification,一個通用的事件類型,該類標識事件的類型,可以被直接使用,也可以根據傳遞的事件的需要而被擴充。
2)NotificationListener介面,接受通知的對象需實現此介面。
3)NotificationFilter介面,作為通知過濾器的對象需實現此介面,為通知監聽者提供了一個過濾通知的過濾器。
4)NotificationBroadcaster介面,通知寄件者需實現此介面,該介面允許希望得到通知的監聽者註冊。
發送一個通用類型的通知,任何一個監聽者都會得到該通知。因此,監聽者需提供過濾器來選擇所需要接受的通知。
任何類型的管理構件,標準的或動態,都可以作為一個通知寄件者,也可以作為一個通知監聽者,或兩者都是。
1.2.3
輔助中繼資料類
輔助中繼資料類用來描述管理構件。輔助中繼資料類不僅被用來內省標準管理構件,也被動態管理構件用來進行自我描述。這些類根據屬性、操作、構建器和通告描述了管理介面。JMX代理通過這些中繼資料類管理所有管理構件,而不管這些管理構件的類型。
部分輔助元類如下:
1)MBeanInfo--包含了屬性、操作、構建器和通知的資訊。
2)MBeanFeatureInfo--為下面類的超類。
3)MBeanAttributeInfo--用來描述管理構件中的屬性。
4)MBeanConstructorInfo--用來描述管理構件中的構建器。
5)MBeanOperationInfo--用來描述管理構件中的操作。
6)MBeanParameterInfo--用來描述管理構件操作或構建器的參數。
7)MBeanNotificationInfo--用來描述管理構件發出的通知。
1.3
代理層
代理層是一個運行在Java虛擬機器上的管理實體,它活躍在管理資源和管理者之間,用來直接管理資源,並使這些資源可以被遠端管理程式所控制。代理層由一個MBean伺服器和一系列處理被管理資源的服務所組成。表示了代理層的組成:
1.3.1 MBean伺服器
Mbean伺服器為代理層的核心,裝置層的所有管理構件都在其註冊,管理者只用通過它才能訪問管理構件。
管理構件可以通過以下三種方法執行個體化和註冊:
1)通過另一個管理構件
2)管理代理程式本身
3)遠程應用程式
註冊一個管理構件時,必須提供一個唯一的對象名。管理應用程式用這個對象名進行標識管理構件並對其操作。這些操作包括:
1)探索管理構件的管理介面
2)讀寫屬性值
3)執行管理構件中定義的操作
4)獲得管理構件發出的通告
5)基於對象名和屬性值來查詢管理構件
1.3.2
協議適配器和連接器
MBean伺服器依賴於協議適配器和連接器來和運行該代理的Java虛擬機器之外的管理應用程式進行通訊。協議適配器通過特定的協議提供了一張註冊在MBean伺服器的管理構件的視圖。例如,一個HTML適配器可以將所有註冊過的管理構件顯示在Web
頁面上。不同的協議,提供不同的視圖。
連接器還必須提供管理應用一方的介面以使代理和管理應用程式進行通訊,即針對不同的協議,連接器必須提供同樣的遠程介面來封裝通訊過程。當遠程應用程式使用這個介面時,就可以通過網路透明的和代理進行互動,而忽略協議本身。
適配器和連接器使MBean伺服器與管理應用程式能進行通訊。因此,一個代理要被管理,它必須提供至少一個協議適配器或者連接器。面臨多種管理應用時,代理可以包含各種不同的協議適配器和連接器。
當前已經實現和將要實現的協議適配器和連接器包括:
1)RMI連接器
2)SNMP協議適配器
3)IIOP協議適配器
4)HTML協議適配器
5)HTTP連接器
1.3.3
代理服務
代理服務可以對註冊的管理構件執行管理功能。通過引入智能管理,JMX可以協助我們建立強有力的管理解決方案。代理服務本身也是作為管理構件而存在,也可以被MBean伺服器控制。
JMX規範定義了代理服務有:
1)動態類裝載--通過管理小程式服務可以獲得並執行個體化新的類,還可以使位於網路上的類庫本地化。
2)監視服務--監視管理構件的屬性值變化,並將這些變化通知給所有的監聽者。
3)時間服務--定時發送一個訊息或作為一個調度器使用。
4)關係服務--定義並維持管理構件之間的相互關係。
1.動態類裝載
動態類裝載是通過m-let(management
applet)服務來實現的,它可以從網路上的任何URL處下載並執行個體化管理構件,然後向MBean伺服器註冊。在一個M-let服務過程中,首先是下載一個m-let文字檔,該檔案是XML格式的檔案,檔案的內容標識了管理構件的所有資訊,比如構件名稱、在MBean伺服器中唯一標識該構件的對象名等。然後根據這個檔案的內容,m-let服務完成剩餘的任務。例示這一過程:
2.監視服務
通過使用監視服務,管理構件的屬性值就會被定期監視,從而保證始終處於一個特定的範圍。當監視的屬性值的變化超出了預期定義的範圍,一個特定的通告就會發出。JMX規範當前規定了三種監視器:
1)計數器監視器,監視計數器類型的屬性值,通常為整型,且只能按一定規律遞增。
2)度量監視器,監視度量類型的屬性值,通常為實數,值能增能減。
3)字串監視器,監視字串類型的屬性值。
每一個監視器都是作為一個標準管理構件存在的,需要提供服務時,可以由相應的管理構件或遠端管理應用程式動態建立並配置註冊使用。
例示了計數器監視器的使用方式:
3.時間服務
時間服務可以在制定的時間和日期發出通告,也可以週期性周期性的發出通告,依賴於管理應用程式的配置。時間服務也是一個管理構件,它能協助管理應用程式建立一個可配置的備忘錄,從而實現智能管理服務。
4.關係服務
JMX規範定義了管理構件之間的關聯式模式。一個關係是使用者定義的管理構件之間的N維聯絡。
關聯式模式定義如下一些術語:
1)角色:就是是一個關係中的一類成員資格,它含有一個角色值。
2)角色資訊:描述一個關係中的一個角色。
3)關聯類型:由角色資訊組成,作為建立和維持關係的模板。
4)關係:管理構件之間的當前聯絡,且必須滿足一個關聯類型的要求。
5)角色值:在一個關係中當前能滿足給定角色的管理構件的列表。
6)關係服務:是一個管理構件,能接觸和維持所有關聯類型和關係執行個體之間的一致性。
在關係服務中,管理構件之間的關係由通過關聯類型確定的關係執行個體來維護。僅僅只有註冊到MBean伺服器上並且能被對象名標識的管理構件才能成為一個關係的成員。關係服務從來就不直接操作它的成員--管理構件,為了方便尋找它僅僅提供了對象名。
關係服務能鎖定不合理關聯類型的建立,同樣,不合理的關係的建立也會被鎖定。角色值的修正也要遵守一致性檢查。
由於關係是定義在註冊的管理構件之間的聯絡,所以當其中的管理構件卸載時,就會更改關係。關係服務會自動更改角色值。所有對關係執行個體的操作比如建立、更新、刪除等都會使關係服務發出通告,通告會提供有關這次操作的資訊。
JMX關聯式模式只能保證所有的管理構件滿足它的設計角色,也就是說,不允許一個管理構件同時出現在許多關係中。
1.4
分布服務層
當前,SUN並沒有給出這一層的具體規範,下面給出的只是一個簡要描述。
該層規定了實現JMX應用管理平台的介面。這一層定義了能對代理層進行操作的管理介面和組件。這些組件能:
1)為管理應用程式提供一個介面,以便它通過一個連接器能透明和代理層或者JMX管理資源進行互動。
2)通過各種協議的映射(如SNMP、HTML等),提供了一個JMX代理和所有可管理組件的視圖。
3)分布管理資訊,以便構造一個分布式系統,也就是將高層管理平台的管理資訊向其下眾多的JMX代理髮布。
4)收集多個JMX
代理端的管理資訊並根據管理終端使用者的需要篩選使用者感興趣的資訊並形成邏輯視圖送給相應的終端使用者。
5)提供了安全保證。
通過管理應用程式層和另一管理代理程式和以及他的裝置層的聯合,就可以為我們提供一個完整的網路管理的解決方案。這個解決方案為我們帶來了獨一無二的一些優點:輕便、根據需要部署、動態服務、還有安全性。
1.5 附加管理協議API
該層提供了一些API來支援當前已經存在的一些管理協議。
這些附加的協議API並沒有定義管理應用的功能,或者管理平台的體繫結構,他們僅僅定義了標準的Java API和現存的網路管理技術通訊,例如SNMP。
網路管理平台和應用的開發人員可以用這些API來和他們的管理環境進行互動,並將這個互動過程封裝在一個JMX管理資源中。例如,通過SNMP可以對一個運行有SNMP代理的交換器進行管理,並將這些管理介面封裝成為一個管理構件。在動態網路管理中,可以隨時更換這些管理構件以適應需求。
這些API可以幫組開發人員根據最通常的工業標準來部署他們的管理平台和應用。新的網路管理的解決方案可以和現存的基礎結構合為一體,這樣,現存的網路管理也能很好的利用基於Java技術的網路管理應用。
這些API目前在JCP(Java Community Process)內作為獨立的JSR(Java Specification
Request)開發。
他們包括:
1)SNMP Manager API
2)CIM/WBEM manager and
protocol API
1.6
JMX的當前實現及應用
自從SUN發布了JMX規範,許多大公司紛紛行動起來,實現規範或者實現相應的基於JMX的網路管理系統,下面列出了當前的主要實現及應用情況:
1)SUN為JMX規範了作出了相應的參考實現,並在此基礎上開發了一個全新的用於網路管理的產品JDMK(Java動態管理工具集),其中定義了資源的開發過程和方法、動態JMX代理的實現、遠端管理應用的實現。同時,JDMK也提供了一個完整的體繫結構用來構造分布式的網路管理系統,並提供了多種協議適配器和連接器,如SNMP協議適配器、HTML協議適配器、HTTP連接器、RMI連接器。
2)IBM Tivoli實現了JMX規範的產品為TivoliJMX,它為JAVA管理應用程式和網路提供了架構、設計模式、一些API集和一些服務。
3)Adventnet開發的關於JMX的產品為AdventNet Agent Toolkit,它使得定義新的SNMP MIB、開發JMX和Java
SNMP Agent的過程自動化。
4)JBoss實現的J2EE應用伺服器以JMX為微核心,各個模組以管理構件的形式提供相應的服務。
5)BEA的Weblogic應用伺服器也將JMX技術作為自己的管理基礎。
6)金蝶的Apusic也是一個以JMX為核心開發出的J2EE應用伺服器。
1.7
小結
本文詳細介紹了JMX規範。JMX體繫結構分為四層,即裝置層、代理層、分布服務層和附加協議API。但SUN當前只實現了前兩層的具體規範,其餘的規範還在制定當中。JMX代理要和遠程應用程式通訊,需要提供至少一個連接器和協議適配器。