Java管理扩展
什么是JMX?
Java管理擴(kuò)展(JMX)是一種API,用于管理或監(jiān)視各種資源,例如應(yīng)用程序,設(shè)備,服務(wù),當(dāng)然還有JVM。 通過Java社區(qū)流程(JCP)開發(fā),JMX技術(shù)被構(gòu)建為Java Specification Request 3。
JMX技術(shù)提供了遠(yuǎn)程訪問,因此可以從遠(yuǎn)程計(jì)算機(jī)上實(shí)現(xiàn)應(yīng)用程序的管理。 JMX的用途非常廣泛,包括以下內(nèi)容:
- 在應(yīng)用程序配置中進(jìn)行更改,或僅檢查當(dāng)前配置(在與遠(yuǎn)程計(jì)算機(jī)打交道時(shí)很有用)。
- 提取和累積數(shù)據(jù)以用于資源使用情況的統(tǒng)計(jì)分析或應(yīng)用程序行為監(jiān)視
- 有關(guān)狀態(tài)更改或檢測(cè)到的錯(cuò)誤的通知
JVM資源由一系列Java對(duì)象(稱為受管Bean或簡(jiǎn)稱為MBean)來檢測(cè)。 這些Bean已在托管對(duì)象服務(wù)器(MBean Server)中注冊(cè)。 該服務(wù)器可以在支持Java編程語言的大多數(shù)設(shè)備上運(yùn)行,并充當(dāng)管理代理。 JMX代理是我們用來管理已檢測(cè)資源的工具。 代理由MBean服務(wù)器(MBean注冊(cè)的位置)和提供處理MBean手段的服務(wù)組成。 管理基礎(chǔ)結(jié)構(gòu)不會(huì)干擾資源的檢測(cè)方式,反之亦然,因此無論資源管理應(yīng)用程序的實(shí)現(xiàn)如何,都可以對(duì)資源進(jìn)行相同的管理。
JMX技術(shù)是實(shí)現(xiàn)Java代理,檢測(cè)Java代碼,創(chuàng)建管理應(yīng)用程序和管理中間件的標(biāo)準(zhǔn)且靈活的方式。 JMX連接器是允許程序員從遠(yuǎn)程應(yīng)用程序訪問JMX代理的鏈接。 不管它們使用的通信協(xié)議如何,JMX連接器都提供相同的管理接口。 因此,管理應(yīng)用程序可以透明方式管理資源,而無需注意所使用的通信協(xié)議。
JMX架構(gòu)
JMX技術(shù)由兩個(gè)規(guī)范定義,即Java規(guī)范請(qǐng)求3和Java規(guī)范請(qǐng)求160,這兩個(gè)規(guī)范都是通過Java社區(qū)流程開發(fā)的。 您可以將架構(gòu)視為以下三個(gè)層次:
- 工具:通過ManagedBeans對(duì)資源進(jìn)行工具,ManagedBeans通過JMX代理公開其管理接口。
- 代理:它的主要組件是MBean服務(wù)器。 代理提供了一組用于處理Mbean的服務(wù),并且是直接控制資源并使資源可用于遠(yuǎn)程管理的組件。
- 遠(yuǎn)程管理:可以通過協(xié)議適配器和標(biāo)準(zhǔn)連接器從JVM外部訪問JMX代理。
通過JMX技術(shù)管理資源需要首先使用Java編程語言對(duì)資源進(jìn)行檢測(cè)。 這意味著需要使用Java MBean來實(shí)現(xiàn)對(duì)資源工具的訪問。 JMX的標(biāo)準(zhǔn)化方式使開發(fā)人員可以輕松創(chuàng)建可管理的應(yīng)用程序,而不必了解和理解復(fù)雜的管理系統(tǒng)。
盡管不是必需的,但JMX代理通常與托管應(yīng)用程序位于同一臺(tái)計(jì)算機(jī)上。 由于執(zhí)行檢測(cè)的方式,它不知道其管理的資源。 遵循JMX規(guī)范進(jìn)行檢測(cè)的任何資源都可以使用提供該資源所需服務(wù)的任何JMX代理。 JMX代理不應(yīng)該知道管理應(yīng)用程序正在訪問它的方式。 這確保了組件之間的高度獨(dú)立性。
有許多訪問JMX API工具的方法。 可以通過現(xiàn)有協(xié)議(例如SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議))或?qū)S袇f(xié)議來提供訪問。 該連接通過MBeans Server所依賴的協(xié)議適配器和連接器進(jìn)行路由,并使JMX代理可以從其JVM外部進(jìn)行訪問。 每個(gè)適配器都提供了在MBeans服務(wù)器中注冊(cè)的所有MBean的視圖。 所有連接器都提供用于遠(yuǎn)程管理的相同接口。
JMX技術(shù)是基于RMI(遠(yuǎn)程方法調(diào)用)導(dǎo)出JMX API的標(biāo)準(zhǔn)化方法,它還提供了基于TCP套接字的協(xié)議,即JMX消息傳遞協(xié)議(JMXMP)。 不幸的是,并非所有JMX Remote API的實(shí)現(xiàn)都支持第二個(gè)基于TCP套接字的協(xié)議,例如Java SE平臺(tái)未包含該協(xié)議。
什么是MBean?
MBean是實(shí)現(xiàn)資源檢測(cè)的Java對(duì)象。 他們必須遵守JMX規(guī)范,以便以標(biāo)準(zhǔn)方式提供工具。 資源可以由一個(gè)或多個(gè)動(dòng)態(tài)的或標(biāo)準(zhǔn)的MBean來檢測(cè)。 標(biāo)準(zhǔn)bean是除遵循JMX規(guī)范外,它們還遵循JavaBeans(TM)組件模型的對(duì)象,而動(dòng)態(tài)bean則遵循特定的接口,以提供更大的運(yùn)行時(shí)靈活性。
MBean的管理接口包含以下內(nèi)容:
- 可以讀取和/或?qū)懭氲拿皖愋突瘜傩?
- 可以調(diào)用的名稱和類型化操作
- Mbean可以發(fā)出的類型通知
標(biāo)準(zhǔn)Java MBean類通過其操作和屬性公開托管資源。 屬性通過getter和setter公開。 JMX代理使用自省功能來確定MBean提供的操作,從而非常容易且直接地管理新資源。 JVM本身是開箱即用的,可以輕松地以動(dòng)態(tài)方式加載JMX代理,從而可以對(duì)JVM進(jìn)行遠(yuǎn)程管理和監(jiān)視。
MXBeans簡(jiǎn)介
如果滿足以下要求之一,則接口為MXBean:
- 它用@MXBean批注標(biāo)記,以明確指定接口代表MXBean的事實(shí)
- 它沒有用@MXBean(false)批注標(biāo)記以指定該接口不是MXBean
- 它的名稱以MXBean結(jié)尾
MXBean是一種概念,它提供了一種編程MBean的簡(jiǎn)便方法,該MBean僅引用javax.management.openmbean中定義的預(yù)定義類型集。 這樣可以確保即使客戶端無權(quán)訪問MBean的模型特定類,任何客戶端都可以使用MBean。 這些概念將作為與標(biāo)準(zhǔn)MBean的比較提供。
所有MXBean方法參數(shù)和返回值都必須使用Open Types進(jìn)行描述,因?yàn)镸XBean是Open MBean上的一種。 對(duì)于每個(gè)Java類型J,以下描述了MXBean映射:
- 類型J的對(duì)應(yīng)Open Type,opentype(J)
- 映射的Java類型,opendata(J)
- 值從J到opendata的轉(zhuǎn)換方式(J)
僅當(dāng)Java類型J是從J派生opentype(J)的映射時(shí),Java類型J才可以是MXBean中的方法參數(shù)的類型或返回值。如果存在將opendata(J)轉(zhuǎn)換回J的方法,則J是可重構(gòu)的。為了使Mbean成為MXBean,所有方法參數(shù)都必須是可重構(gòu)的,因?yàn)樵诜椒ㄕ{(diào)用時(shí),MXBean框架會(huì)將參數(shù)從opendata(J)轉(zhuǎn)換為J。
Java平臺(tái)隨附的MXBean如下:ClassLoadingMXBean,CompilationMXBean,MemoryMXBean,ThreadMXBean,OperatingSystemMXBean,GarbageCollectorMXBean,MemoryManagerMXBean,MemoryPoolMXBean。
動(dòng)態(tài)MBean在運(yùn)行時(shí)定義其管理接口。 例如,數(shù)據(jù)庫MBean將確定從數(shù)據(jù)庫讀取數(shù)據(jù)后所公開的屬性的類型和名稱。 任何實(shí)現(xiàn)DynamicMBean的Java對(duì)象都是動(dòng)態(tài)MBean。
Open MBean是一種動(dòng)態(tài)MBean。 Open MBean由Java包javax.management.openmbean定義,從而簡(jiǎn)化了遠(yuǎn)程管理應(yīng)用程序的操作,而無需管理應(yīng)用程序知道應(yīng)用程序特定的類型。 Open MBean的所有方法參數(shù)和返回值都是稱為Open Types的小型Java類型子集的類型。
動(dòng)態(tài)MBean的另一種類型是模型MBean。 這些MBean由Java包javax.management.modelmbean定義,充當(dāng)托管資源和管理接口之間的橋梁。 管理接口和資源被指定為Java對(duì)象。 這些MBean可用于為不同的托管資源提供通用功能(可針對(duì)不同資源多次使用)。
參考:來自Java出現(xiàn)日歷博客的JCG合作伙伴 Bogdan-Adrian Mihut的Java管理擴(kuò)展 。
翻譯自: https://www.javacodegeeks.com/2012/12/java-management-extensions.html
總結(jié)
- 上一篇: 带有批注的Spring硒测试
- 下一篇: Java EE 6 Web配置文件。 在