JMX(Java管理擴展)是一種J2SE技術,可以管理和監視Java應用程序。 基本思想是實現一組管理對象,并將實現注冊到平臺服務器,在平臺服務器上,可以使用一組連接器或適配器從本地或遠程調用這些實現到JVM。
一個管理/儀器對象稱為MBean(代表托管Bean)。 一旦實例化,一個MBean將在平臺MBeanServer上注冊一個唯一的ObjectName。 MBeanServer充當MBean的存儲庫,支持創建,注冊,訪問和刪除MBean。 但是,MBeanServer不會保留MBean信息。 因此,隨著JVM的重新啟動,您將失去其中的所有MBean。 通常可以通過MBeanServerConnection API訪問MBeanServer,該API在本地和遠程均可使用。
MBean的管理接口通常由[1]組成
- 可以讀取/寫入的命名和類型化屬性
- 可以調用的命名和類型操作
- MBean可以發出的類型化通知
例如,說需要在運行時管理一個應用程序的線程池參數。 使用JMX,只需編寫一個具有與設置和獲取這些參數有關的邏輯的MBean,然后將其注冊到MBeanServer。
現在的下一步是將這些mbean暴露給外界,以便遠程客戶端可以調用這些Mbean來管理您的應用程序。 可以通過通過協議連接器和協議適配器實現的各種協議來完成。 協議連接器基本上按原樣公開MBean,以便遠程客戶端看到相同的接口(JMX RMI連接器就是一個很好的例子)。 因此,基本上應該為JMX技術啟用客戶端或遠程管理應用程序。
協議適配器(例如:HTML,SNMP)根據客戶端期望的協議調整結果(例如:對于基于瀏覽器的客戶端,通過HTTP以HTML格式發送結果)。
現在,MBean已正確暴露在外部,我們需要一些客戶端來訪問這些MBean以管理我們的應用程序。 根據客戶使用連接器還是適配器,基本上有兩類可用。
JMX客戶端使用JMX API連接到MBeanServer并調用MBean。 通常,JMX客戶端使用MBeanServerConnection連接到MBeanServer,并通過提供MBean ID(對象名稱)和必需的參數來通過MBean Server調用MBean。 基本上有三種類型的JMX客戶端。
本地JMX客戶端 :與MBeanServer在同一JVM中運行的客戶端。 這些客戶端也可以在內部運行,因此也可以使用MBeanServer API本身
相同的JVM。
代理 :代理是本地JMX客戶端,它管理MBeanServer本身。 請記住,MBeanServer不會保留MBean信息。 因此,我們可以使用代理提供此邏輯,該邏輯將使用其他功能封裝MBeanServer。 因此,代理負責初始化和管理MBeanServer本身。
遠程JMX客戶端 :遠程客戶端與本地客戶端的不同之處僅在于,它需要實例化連接器以連接到連接器服務器,以獲得MBeanServerConnection。 顧名思義,它們當然會在遠程JVM中運行。
客戶端的另一種類型是管理客戶端,它使用協議適配器連接到MBeanServer。 為了使它們起作用,應存在相應的適配器并在要管理的JVM中運行它們。 例如,HTML適配器應存在于JVM中,以使基于瀏覽器的客戶端連接到它以調用MBean。
下圖總結了到目前為止描述的概念。

我在JMX上的快速筆記到此結束。 可以在[2]中找到關于JMX主要概念的非常好的閱讀。 同樣,Oracle上的JMX學習資源也是獲得JMX的良好起點。
[1] http://docs.oracle.com/javase/6/docs/technotes/guides/jmx/overview/instrumentation.html#wp998816 [2] http://pub.admc.com/howtos/jmx/architecture-chapt.html
參考: JMX:來自Source Open博客的JCG合作伙伴 Buddhika Chamith的一些入門說明 。
翻譯自: https://www.javacodegeeks.com/2012/06/jmx-some-introductory-notes.html