为什么JMX那么受欢迎,或是JMX到底有那些优势只得人们去关注?在本文与接下来的一系列文章中我们会一步步的学习和了解JMX。[/i]
简介
在学习第一个实例之前,让我们先对JMX进行一些初步的了解。正所谓"知根知底,百战百胜"么J。
先来了解一下JMX中的术语:
- MBean:是Managed Bean的简称。在JMX中MBean代表一个被管理的资源实例,通过MBean中暴露的方法和属性,外界可以获取被管理的资源的状态和操纵MBean的行为。事实上,MBean就是一个Java Object,同JavaBean模型一样,外界使用自醒和反射来获取Object的值和调用Object的方法,只是MBean更为复杂和高级一些。
- MBeanServer:MBean生存在一个MBeanServer中。MBeanServer管理这些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发送管理或控制请求。
Adapter和Connector的区别在于:Adapter是使用某种Internet协议来与JMX Agent获得联系,Agent端会有一个对象(Adapter)来处理有关协议的细节。比如SNMP Adapter和HTTP Adapter。而Connector则是使用类似RPC的方式来访问Agent,在Agent端和客户端都必须有这样一个对象来处理相应的请求与应答。比如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以供外界的访问。
JMX Agent并不关心它所管理的资源是什么。
- Distributed 层
Distributed层关心Agent如何被远端用户访问的细节。它定义了一系列用来访问Agent的接口和组件,包括Adapter和Connector的描述。
Hello JMX! Step by step
通常,在我们的项目中加入JMX管理框架需要接触到所有的以上提到的JMX的三层。接下来我们就实现一个简单的HelloJMX例子来一步步的介绍这三层框架。
Instrumentation层
Instrumentation层定义了一系列的接口和一套实现MBean的规范。我们使用JMX管理框架实现的每一个MBean都需要符合这一套接口和规范。在JMX中有两类MBean:静态的(Standard)MBean和动态的(Dynamic)MBean。Standard MBean实现简单,只需符合一套继承规范即可,特别适用于正在开发的项目。Dynamic MBean需要继承一个DynamicMBean接口,开发较复杂,但是可以在运行时动态修改因此灵活而功能强大。
我们在这里先实现一个StandardMBean。
为了实现StandardMBean,必须遵循一套继承规范。必须每一个MBean定义一个接口,而且这个接口的名字必须是其被管理的资源的对象类的名称后面加上"MBean"。例如:我们的对象为kert.jmxnotes.HelloJMX,为了构造一个StandardMBean,我们必须定义的接口的名称为kert.jmxnotes.HelloJMXMBean。Agent依赖StandardMBean接口来访问被管理的资源,因此需要在HelloJMXMBean中定义相应的方法。
上一页 下一页






