JMX in action第一篇

一。監控能夠作的事java

1,監測平臺和硬件的健康性數據庫

2,在應用層面上配置資源  (譬如數據庫過載,能夠手動調節鏈接數)服務器

3,收集應用統計數據架構

4,調試選項,更改日誌級別等app

5,監視服務器的性能性能

實現方案:JMX編碼

二,基本jmx條目spa

1,可管理的資源代理

    包括任意的應用,設備或其餘java能夠調用包裝的實體調試

2.MBean

Managed bean:知足jmx規範,具備特定名稱和繼承規範的java類

jmx包含3種bean:標準,動態,模版

MBean都駐紮在一個叫MBean Server的地方

3.MBean Server

管理一組MBean的java類,是jmx管理環境中的核心,使用註冊的方式來查找Mbeans,

而且對註冊的MBean暴露管理接口,提供方法來查找MBean

4.Jmx agent

提供一系列服務來管理MBean的一個java進程,是MBean Server的容器

agent能夠有一組適配器和鏈接器來讓遠程不一樣的客戶端使用本身,適配器能夠映射協議,譬如http,snmp

鏈接器能夠把agent暴露出來讓客戶端經過rmi,jini鏈接

5.協議適配器和鏈接器 Protocol adaptor and connector

存在與agent中,經過協議或鏈接暴露agent

6.管理應用 Management application

經過接口鏈接agent,管理其中MBean的應用程序

7通知 Notification

Mbean和MBean Server包裝的事件,報警,或通常通知

8.設備 Instrumentation

定義如何實現管理資源的規範

三,jmx架構

層    描述
分佈服務層 包含管理應用與代理層通訊的各類組件
代理層 包含代理和MBean服務器
設備層 包含表明可管理資源的MBean

四。編碼規則 for all MBeans

1,全部的MBean必須是具體的java類,便可以實例化非抽象的類

2,要有public的構造器

3,全部的MBean要麼實現本身的MBean接口,要麼實現DynamicMBean接口,接口要以MBean結尾

4.標準的接口和實現必需要在同一個包路徑下,只能實現單個接口,多個接口實現不容許,可是接口繼承後類再實現是能夠的。

標準MBean就是實現了本身MBean接口的MBean(好拗口)

全部的MBean還能夠實現NotificationBroadcaster接口,這個接口能夠發佈通知給監聽者

五,標準MBean

1.接口組成

  • public級別的構造器constructor  

        MBean要被JMX管理,能夠動態生成MBean,所以必需要有公開constructor

  • 屬性(Attributes)

        經過聲明getter  setter方法來暴露屬性,全部以get(無參)  set開頭的方法被認爲是屬性的一部分

setter方法不能重載,屬性不一致jmx認爲是無效的

  • 操做(Operations)

        非set get開頭的方法,用來實現某些功能

  • 通知(Notifications)

        經過實現NotificationBroadcaster接口發佈通知

2.接口實現與類繼承問題

I.單繼承無接口

    PrinterMBean<interface>    

              ⬆️                                                          

          Printer <class>          ⬅️                CopiedPrinter<class>      

CopiedPrinter具備PrinterMBean的相關方法和屬性

II.繼承與接口

    PrinterMBean<interface>        CopiedPrinterMBean<interface>

              ⬆️                                                          ⬆️

          Printer <class>          ⬅️                CopiedPrinter<class>      

因爲MBean規範規定只能實現一個接口,MBean agent會查找最近的interface,所以CopiedPrinter只有CopiedPrinterMBean接口定義的相關屬性和方法

可是接口繼承是沒有問題的,若是CopiedPrinterMBean繼承了PrinterMBean的話,CopiedPrinter就會有這兩個接口相關的屬性和方法,見III.

III.接口繼承

    PrinterMBean<interface>   ⬅️     CopiedPrinterMBean<interface>

              ⬆️                                                          ⬆️

          Printer <class>          ⬅️                CopiedPrinter<class>      

CopiedPrinter具備PrinterMBean相關屬性和方法,可是這些並非從Printer來的,而是從接口CopiedPrinterMBean接口繼承來的

IV.接口繼承非MBean接口

    Printer<interface>   ⬅️     CopiedPrinterMBean<interface>

                                                                        ⬆️

                                                       CopiedPrinter<class>       

 CopiedPrinter行爲是由兩個接口決定的,CopiedPrinterMBean繼承了全部的方法

相關文章
相關標籤/搜索