转自:
http://blog.csdn.net/zhangxiaogen/archive/2004/07/26/52352.aspx
JMX越来越多得出现在各种技术杂志、白皮书和报告中,虽然它已不再是一个buzzword了。不仅仅是SUN?,最近许多厂商都宣布已经或是准备支持这
一技术。不仅IBM、BEA、HP、Marcomedia(JRun)这些大的厂商,而且还有许多小的软件公司和开源项目也都加入了这一行列,包括
AdventNet,JBoss等(JBoss3.0的Micorkernel结构就是建立在JMX的基础上)。
为什么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中定义相应的方法。
public interface HelloJMXMBean {
void sayHello();
void hello(String msg);
String getMessage();
}
在这个MBean中定义了三个方法,分别是sayHello(),hello(String)和getMessage()。
接下来是真正的资源对象,因为命名规范的限制,因此对象名称必须为HelloJMX。
public class HelloJMX
implements HelloJMXMBean {
private String msg;
public void sayHello() {
System.out.println("Hello JMX " + (msg == null?"":msg));
}
public void hello(String msg) {
this.msg = msg;
}
public String getMessage() {
return msg;
}
}
这样一个可以被JMX管理的资源就创建好了。
Agent层
通常JMX Agent是内置在我们的程序中的,也就是说它不是一个外置的服务。我们必须在我们的应用程序中显示的构造一个JMX Agent,来管理我们的资源。
25 final
MBeanServer mBeanServer =
26 MBeanServerFactory.createMBeanServer(DOMAIN);
27 final
HelloJMX helloMBean = new
HelloJMX();
28 final
ObjectName helloON = new
ObjectName(DOMAIN + ":name=HelloJMX"
);
29 mBeanServer.registerMBean(helloMBean, helloON);
(line25~26)通常我们首先需要建立一个MBeanServer,MBeanServer用来管理我们的MBean。我们通常是通过MBeanServer来获取我们MBean的信息,间接的调用MBean的方法。
(line27)然后生成我们的资源的一个对象。JMX Agent管理的资源和普通的Java对象并没有区别,因此使用通常的建立对象的方式即可。
(line28~29)然后,我们要显示的将这个对象注册到MBeanServer中去。JMX 使用SNMP规范中的ObjectName作为标识和查找MBean的方式。
之后,我们的Hello MBean就已经成功注册在MBeanServer中了,同其他Component/Container系统的模式一样,Container会代理它所管理的所有Component的行为。
Distributed 层
我们需要在远端管理我们的MBean,在JMX结构介绍中我们提过Agent可以有一个或多个Adapter或Connector以供远端用户访问只用。同MBeanServer一样我们也需要显示的说明我们的Agent可以支持那些Adaptor和Connector。
30 final
HtmlAdaptorServer htmlAdaptor = new
HtmlAdaptorServer();
31 final
ObjectName htmlAdaptorON = new
ObjectName(DOMAIN + ":name=HtmlAdaptor"
);
32 mBeanServer.registerMBean(htmlAdaptor, htmlAdaptorON);
33 htmlAdaptor.setPort(9999);
34
37 LOG.info("Starting the HtmlAdaptor...."
);
38 htmlAdaptor.start();
在Sun的JMX参考实现中,提供了一个HtmlAdaptor。支持Http访问协议,并且有一个不错的Html界面。我们的HelloJMX就是用这
个作为远端管理的界面。注意我们需要显示的设置HtmlAdaptor的端口号,和调用它的start()方法。因为事实上HtmlAdaptor是一个
简单的HttpServer,它将Http请求转换为JMX Agent的请求。
运行这个程序,打开浏览器输入http://localhost:9999你就可以使用Browser作为你的管理界面,管理你的应用程序。
Notification
JMX也提供了一种通知机制。这种通知是由用户决定的,当应用出现某种状况时,可以利用通知来提醒管理人员。
为我们的HelloJMX加入通知也很简单。
首先要声明我们的应用(HelloJMX)支持JMX通知。只需修改一下我们的HelloJMX即可。
9 public
class
HelloJMX extends
NotificationBroadcasterSupport
10 implements
HelloJMXMBean {
同样HelloJMX也可以通过实现NotificationBroadcaster接口来支持通知机制。
然后修改hello(String):void方法。
18 public
void
hello(String msg) {
19 this
.msg = msg;
20 final
Notification notification = new
Notification("kert.jmx.hello"
, this
, -1,
21 System.currentTimeMillis(), "message is changed"
);
22 sendNotification(notification);
23 }
我们想在hello方法被调用的时候发送一个通知。
同Java2的事件模型一样,通知必须有一个接受者。在JMX中,这个接受者的角色由实现了NotificationListener接口的对象完成。
在我们的例子中,我们让HelloAgent充当这个角色。
12 public
class
HelloAgent implements
NotificationListener {
…….
43 public
void
handleNotification(Notification notification, Object o) {
44 System.out.println(this
.getClass().getName() +
45 " Notification Listener --"
+ notification.getMessage());
46 }
如果要运行完整的Example可以参考:
http://oss.org.cn/ossdocs/java/jmx/jmx.html
http://oss.org.cn/ossdocs/java/jmx/jmx2.html
http://oss.org.cn/ossdocs/java/jmx/jmx3.html
分享到:
相关推荐
1. **JMX简介** JMX的主要作用是让开发者能够创建和注册可管理的对象,即MBeans,它们代表了应用程序中的各种资源或服务。MBeans提供了暴露其状态和操作的方法,使得管理者可以通过JMX API进行访问和控制。例如,...
### JMX 简介 JMX 不仅仅是一个接口,而是一套完整的规范,允许开发者将管理功能集成到Java应用中。通过MBeans,开发者可以创建可管理的对象,这些对象可以代表应用程序中的任何资源或服务,如配置参数、服务状态等...
1. **JMX简介**:JMX是Java平台的一部分,提供了一种标准的方式来管理和监控Java应用程序。它允许开发者创建可管理和可监控的组件,并将它们集成到应用程序中。 2. **MBean(Managed Beans)**:MBean是JMX的核心...
#### JMX简介及其发展历程 JMX(Java Management Extensions)是一种用于管理与监控应用程序的标准框架和技术。它的前身是JMAPI(Java Management API),随着技术的发展,逐渐演变成了今天我们所熟知的JMX。JMX的...
1. **JMX简介** JMX允许开发者创建和注册管理 Bean(MBeans),这些Bean提供了对应用程序组件的访问接口,从而可以监控和管理其状态。MBeans分为标准MBean、自定义MBean和动态MBean三种类型,它们分别对应不同的...
#### 一、JMX 简介 Java Management Extensions (JMX) 是一个为应用程序、设备、系统等提供标准管理界面的框架。它允许开发者监控和管理资源(如应用程序、设备和服务),通过标准接口暴露资源的属性、操作和事件。...
一、JMX简介 Java Management Extensions (JMX) 是Java平台的一个标准组件,它提供了管理和监控应用程序、操作系统、硬件设备和网络服务的能力。通过JMX,开发者可以定义管理对象(MBeans),这些对象封装了应用程序...
JMX简介 JMX是Java平台上的一个标准,允许开发者创建可管理的组件,并通过统一的接口进行监控和控制。它使得系统管理员能够轻松地获取运行时信息,调整参数,甚至在必要时执行远程操作。JMX通过MBeans(Managed ...
#### 二、JMX简介及其发展历程 **JMX**(Java Management Extensions) 是一种用于管理与监视应用程序的标准技术。它的前身是 **JMAPI**(Java Management API),后来演变为JMX并逐渐成为业界广泛接受的标准之一。 - *...
### JMX简介 JMX是一种服务,它提供了一种灵活的方式来管理和监控Java应用程序,包括内存使用、线程状态、MBeans(Managed Beans)等。MBeans是JMX的核心概念,它们是Java对象,代表可管理的资源或服务,并提供了...
一、JMX简介 JMX是Java平台上的一个标准API,它定义了如何在Java应用程序中创建、部署和管理组件的规范。这些组件可以是应用程序中的任何对象,如服务器、设备、服务等。通过JMX,开发者可以创建管理beans(MBeans)...
#### 一、Zabbix与JMX监控简介 **Zabbix**是一款开源的企业级监控工具,它能够监控网络中的各种硬件资源和软件服务的状态,并且提供了丰富的功能,如自动发现、报警等。在Zabbix 2.0版本中引入了一个新的特性——...
- **JMX 简介**:这部分介绍了 JMX(Java Management Extensions)的概念,包括它的层次结构和组件。 - **Instrumentation Level**:指定了监控和管理资源的基本方法。 - **Agent Level**:涉及通过代理来管理资源...
- **JMX简介**:解释了Java Management Extensions (JMX) 的基本概念及其在JBoss中的作用。 - **仪表化级别**:探讨了在不同层级上如何实现监控和管理。 - **代理级别**:介绍了如何利用代理来扩展管理功能。 - ...
2. **JMX简介**:JMX是一种Java技术,用于管理与监控应用中的资源。它提供了一种标准化的方式来访问系统和应用程序的信息,并允许进行远程管理和监控。对于WebLogic而言,JMX可以通过MBeans(Managed Beans)来访问...