JMX越来越多得出现在各种技术杂志、以及社区,如ibm的 developerworks和bea的dev2dev。不仅仅是SUN,许多厂商都宣布已经或是准备支持这一技术。IBM、BEA、HP、Marcomedia(JRun)这些大的厂商,而且还有许多小的软件公司和开源项目也都加入了这一行列。为什么JMX那么受欢迎,JMX到底有那些优势只得人们去学习和理解,本文从JMX的基本架构、hellowold jmx以及spring对JMX的支持讲起,希望大家能通过本文对JMX有个基础的认识,并能通过本文为今后学习JMX打个基础
JMX中的术语:
- MBean:是Managed Bean的简称。在JMX中MBean代表一个被管理的资源实例,通过MBean暴露一系列方法和属性,外界可以获取被管理的资源的状态和操纵MBean的行为。事实上,MBean就是一个Java Object,同JavaBean模型一样,外界使用反射来获取Object的值和调用Object的方法,只是MBean提供了更加容易操作的反射的使用。Mbean 包括4种类型:标准MBean、动态MBean、开放MBean、模型MBean。
- MBeanServer:MBeanServer是MBean 的容器。MBeanServer管理这些MBean,并且通过代理外界对它们的访问。MBeanServer提供了一种注册机制,通过注册Adaptor和Connector,以及MBean到MBeanServer,并且通过代理外界对它们的访问。外界可以通过名字来得到相应的MBean实例。
- JMX Agent:Agent只是一个Java进程,它包括这个MBeanServer和一系列附加的MbeanService。当然这些Service也是通过MBean的形式来发布。
- Protocol Adapters and Connectors
JMX Agent通过各种各样的Adapter和Connector来与外界(JVM之外)进行通信。同样外界(JVM之外)也必须通过某个Adapter和Connector来向JMX Agent发送管理或控制请求。Jdmk5.1中,sun提供很多Adaptor和Connector的实现
Adapter和Connector的区别在于:Adapter是使用某种协议(HTTP或者SNMP)来与JMX Agent获得联系,Agent端会有一个对象(Adapter)来处理有关协议的细节。比如SNMP Adapter和HTTP Adapter。而Connector在Agent端和client端都必须有这样一个对象来处理相应的请求与应答。比如RMI Connector。
JMX Agent可以带有任意多个Adapter,因此可以使用多种不同的方式访问Agent。
JMX基本构架:
JMX分为三层,分别负责处理不同的事务。它们分别是:
- Instrumentation 层
Instrumentation层主要包括了一系列的接口定义和描述如何开发MBean的规范。通常JMX所管理的资源有一个或多个MBean组成,因此这个资源可以是任何由Java语言开发的组件,或是一个JavaWrapper包装的其他语言开发的资源。 - Agent 层
Agent用来管理相应的资源,并且为远端用户提供访问的接口。Agent层构建在Intrumentation层之上,并且使用管理Instrumentation层内部的组件。通常Agent由一个MBeanServer组成。另外Agent还提供一个或多个Adapter或Connector以供外界的访问。 - Distributed 层
Distributed层关心Agent如何被远端用户访问的细节。它定义了一系列用来访问Agent的接口和组件,包括Adapter和Connector的描述。 - Jmx 三层之间的关系:
|
MBean
|
MBean Server |
MBean
|
HTTP Adaptor |
MBean |
RMI Adaptor |
SNMP Adaptor |
Agent level |
Instrumentation level |
Connector level |
JMX Manager |
WEB Browse |
SNMP Manager |
Remote Manager
|
(图一)
本图片来自SUN JDMK的官方文档
(图二)
用另外的一个图来解释这3层之间的关系
(图三)
1:储蓄用户、企业贷款用户都需要到银行注册开户
2:企业贷款需要通过其开户,然后从银行拿到钱
3:拿到的钱是大部分储蓄用户存入的
JMX的开发过程也是如此
1:创建一个JMXServer
2:创建Mbean
3:把创建的Mbean 和现成的Adaptor注册到JMXServer上来
4:启动JMXServer
5:manager通过Adaptor访问Resource(Mbean)