JMX in action第一篇

原创
2016/06/17 22:23
阅读数 70

一。监控可以做的事

1,监测平台和硬件的健康性

2,在应用层面上配置资源  (譬如数据库过载,可以手动调节连接数)

3,收集应用统计数据

4,调试选项,更改日志级别等

5,监视服务器的性能

实现方案:JMX

二,基本jmx条目

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继承了所有的方法

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部