JMX 提供的接口标准集使您能够为您的 Java 应用程序添加管理和监控能力,同时构建管理和监控应用程序。 JMX 同时定义了划分为 4
部分的管理架构:实现、代理服务、管理协议 API 和分布式服务。前三个组件在当前 1.2 规范中定义,第 4 个组件将在规范的后续版本中定义。
实现层提供向代理层公开可管理资源的方法。它允许代理查询资源状态并调用对这些资源公开的操作。同样,它允许资源将事件发送到管理架构的其他部分。
代理层允许您实现控制实现层资源的管理代理。代理是位于资源和分布式服务层的远程管理应用程序之间的中间人。管理协议将两层链接在一起。
分布式服务层包括应用程序连接器和协议适配器,以及所有重要的应用程序级的管理支持。正是这最后一层将允许您编写管理应用程序,应用程序将对改
变的环境采取相应措施并指导管理代理执行诸如复制或改变资源分配策略之类的任务。如果给定 JMX 架构中该层的未定义状态,说 JMX
并没有提供完整的管理能力并非一种失之公平的说法。
Mbeans 的 4 种类型
JMX 实现层的核心组件是托管 bean 或 Mbean 。 Mbean
是代表将被管理的资源的 Java 对象。
Mbean 本身并不需要是资源,但是它必须公开资源的属性和操作。例如 , Mbean 也许将实现返回服务器的正常运行时间和系统负载的方法。
JMX 定义了 4 种类型的 Mbeans :标准型、动态型、开放型和模型型。
标准型 Mbean 是一个 Java 类,它实现与后缀为 Mbean 的类有相同名字的接口。所以如果您想要一个名为
TemperatureSensor 的类成为一个标准的 Mbean ,您只需定义一个名为 TemperatureSensorMBean 的、由
TemperatureSensor 实现的接口。代理层将通过反射来判定一个类是否为 Mbean ,并发现它的属性和操作。 Mbean 属性与
setter 和 getter 方法(如 setTemperature() 和 getTemperature() )以及布尔型 is
方
法(如 isOverheating() )相对应。在 Mbean 接口中所有其他的方法都当作操作来解释,如 shutdownSystem()
。这些命名方法的规则和 JavaBeans 中要求的规则相似。 SystemTime 类和 SystemTimeMBean 接口(参见 清单 1
)一起实现了标准的 Mbean 。
标准
MBean
清单 1.
标准的 Mbean 实现了名字以 Mbean
结束的接口
package example;
import java.util.*;
public interface SystemTimeMBean {
public Date getTime();
}
package example;
import java.util.*;
public class SystemTime implements SystemTimeMBean {
public Date getTime() {
TimeZone zone = TimeZone.getTimeZone(“GMT+0″);
Calendar calendar = Calendar.getInstance(zone);
return calendar.getTime();
}
}
JMX 1.2 添加了定义标准 Mbeans 的第二种方法。要求标准 Mbeans
实现通过特定方法指定的接口可能会很受限。因此 , 现在能够通过编写 StandardMBean 类的子类和实现任意指定的接口的方法来实现标准
Mbeans 。接口的方法仍然根据 Mbean 方法命名规约来解释,但是接口名不必再以 Mbean
后缀结尾。 Mbean
必须将接口类对象提供给 StandardMBean 构建函数,这样才能对接口方法进行确定。还可以将已有的对象包装起来,并将对象和接口都提供给
StandardMBean 构建函数。例如 , Clock 接口和 ClockImpl 类(参见 清单 2
)
通过从 javax.management 程序包中编写 StandardMBean 的子类实现了标准的 Mbean 。不是通过编写
StandardMBean 的子类, ClockImpl 也可以定义为根类来实现 Clock 接口。在那种情况下,您可通过以下方法创建标准
Mbean :
丢失
Mbean
清单 2.
标准 Mbeans 同样能够通过编写 StandardMBean 的子类和实现任意指定的接口(接口向 StandardMBean 构建函数提供其类对象)的方法来实现。
package example;
import java.util.*;
public interface Clock {
public Date getTime();
}
package example;
import java.util.*;
import javax.management.*;
public class ClockImpl extends StandardMBean
implements Clock {
public ClockImpl() throws NotCompliantMBeanException
{
super(Clock.class);
}
public Date getTime() {
TimeZone zone = TimeZone.getTimeZone(“GMT+0″);
Calendar calendar = Calendar.getInstance(zone);
return calendar.getTime();
}
}
标准 Mbean 的属性和操作是静态的。它们由必须预先定义的固定接口来定义。动态 Mbeans 可在运行时定义属性和操作。这
能力允许 Mbean 在装载时动态配置自己或根据它所处环境改变它的属性和操作。例如 , LocationSensor Mbean 能够根据独立的雇员进入或离开它的邻近范围的情况,动态添加或删除属性。
您能够通过创建实现 DynamicMBean 接口的类来实现动态 Mbean 。 DynamicMBean 声明了
getAttribute() 、 setAttribute() 、 getAttributes() 、 setAttributes() 和
getMBeanInfo() 的调用方法。属性方法设置并返回您希望的属性值。调用方法用于执行操作,并能通过使用反射(正如通过
StandardBean 完成的一样,实际上实现了 DynamicMBean
)和将操作名转换成使用条件语句的方法调用或其他供您选择的方法调用来实现。 getMBeanInfo() 方法应当返回对 Mbean
的属性和操作进行描述的 MbeanInfo 实例。
开放型 MBeans 和模型型 MBeans 都是动态 Mbeans 的具体类型。开放型 Mbean 只是一种动态 Mbean
,它把对数据类型的使用限制为在 JMX 规范中定义的受限集。开放型 Mbeans 能够在任何 JMX
环境中操作,因为它们不需要特别的类或其他支持。模型型 Mbean 是一种动态 Mbean ,实现了 ModelBean 接口,并由在
ModelBeanInfo 对象中提供元数据的资源配置。模型型 beans 本身并非资源,而是提供将资源按照类属适配到 Mbean
接口的能力。模型型 Mbeans 需要实现 NotificationBroadcaster 接口,它允许代理注册并接受与资源状态改变相关的事件。
代理和缺乏管理
因为 Mbeans
对资源进行封装,所以代理在那些封装的资源和管理应用程序之间进行调节。代理通常与它们所调节的资源位于同一个组中,虽然并不需要位于同一个地方。例如,
一个单独的代理也许运行在服务器上,对封装有资源(资源报告 CPU 状态、磁盘性能、内存使用情况、数据库吞吐量和其他属性)的 Mbeans
进行调节。
代理可以有很多种形式。它们可以是嵌入式组件、单独的服务甚至 Mbeans 。不管它采取什么形式 , JMX 代理必须对跟踪
Mbeans 的 Mbean 服务器拥有访问权。 Mbean 服务器提供的功能由 MbeanServer 接口定义,该接口起到 Mbean
注册的作用。 SimpleAgent ( 参见 清单 3
)说明了代理怎样通过 MbeanServer 接口来访问 Mbeans 。
简单代理
清单 3.
代理通过 MbeanServer 类与 Mbeans 交互
import java.util.*;
import javax.management.*;
public class SimpleAgent {
private MBeanServer server;
private ArrayList mbeanNames;
public SimpleAgent() {
server = MBeanServerFactory.createMBeanServer();
mbeanNames = new ArrayList();
}
public void createMBean(String className,
String key, String value)
throws JMException
{
ObjectName objectName =
new ObjectName(server.getDefaultDomain(),
key, value);
mbeanNames.add(objectName);
server.createMBean(className, objectName);
}
public void manage() throws JMException {
Iterator it = mbeanNames.iterator();
while(it.hasNext()) {
ObjectName oname;
MBeanInfo mbinfo;
MBeanAttributeInfo[] attinfo;
oname = (ObjectName)it.next();
mbinfo = server.getMBeanInfo(oname);
attinfo = mbinfo.getAttributes();
System.out.println(oname.toString());
for(int i=0; i < attinfo.length; ++i) {
String attname = attinfo[i].getName();
Object attval = server.getAttribute(
oname, attname);
System.out.println(
attname + ” : ” + attval.toString());
}
System.out.println();
try {
Thread.sleep(1234);
} catch(InterruptedException e) {
continue;
}
}
}
public static final void main(String[] args) {
SimpleAgent agent = new SimpleAgent();
try {
agent.createMBean(“example.SystemTime”, “name”,
“SystemTime”);
agent.createMBean(“example.ClockImpl”, “name”,
“ClockImpl”);
agent.manage();
} catch(Throwable t) {
t.printStackTrace();
return;
}
}
}
SimpleAgent 并不是真正的 JMX 代理,它实际是创建一个 MbeanServer 实例来注册一组 Mbeans
的程序示例。真正的 JMX 代理将为外部程序提供与 Mbeans 交互的方法。 MBeanServerFactory 为给定的 JMX
环境创建默认 MbeanServer 示例。一旦拥有 MbeanServer 实例后,您就能够通过 registerMBean 方法来注册现有的
Mbeans ,或者使 MbeanServer 通过 createMBean 创建新的实例(就像在
SimpleAgent.createMBean 中的做法一样)。每个 Mbean
属于一个指定的管理域,并在该管理域中具有唯一的名字。每个实例还有一个与之关联的属性列表,这样就不至于同 Mbean
的属性混淆。实例属性有助于将属于同一类型的 Mbeans 区别开来。
此刻, JMX 对于应用程序管理供应商而言比对普通企业应用程序开发人员更具吸引力。不具有非分布式服务层,您就不能通过 JMX
编写应用程序管理逻辑。虽然有些情况下您想要创建自己的 Mbeans 和代理,但管理供应商极有可能已经提供了很多 Mbeans
和代理,如:用于数据库的代理和 Mbeans 、 Web
服务器、操作系统、网络交换机及其他企业入籍权。定义应用程序管理的是:您怎样将所有这些资源捆绑在一起,以及对怎样根据改变的条件来相应地改变资源的关
系和行为作出决定。作出决定和采取措施才是管理的真谛,但在 JMS 在这方面帮助您之前,您将必须等待。
原文出处
http://www.fawcette.com/javapro/2003_10/magazine/columns/proshop/
相关推荐
Java Management Extensions (JMX) 是一个 Java 平台标准,用于管理和监视应用程序、操作系统和网络设备。通过 JMX,您可以暴露管理数据和操作,以便监控应用程序的健康状况、性能和资源消耗。在本文中,我们将探讨...
JMX提供了一种标准的框架,使得开发者可以创建管理接口,以便于远程监控和管理Java应用程序。它允许我们对运行时的Java应用程序进行动态监控和配置,包括内存使用、线程状态、类加载情况以及自定义的MBean(Managed ...
Java JMX(Java Management Extensions,Java管理扩展)是一种标准,用于在Java应用程序中实现管理和监控。JMX允许开发者创建、注册和管理MBeans(Managed Beans),这些MBeans代表了应用程序中的可管理资源,如系统...
Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控应用程序、系统和服务。JMX允许开发者创建可管理的组件,这些组件可以暴露其状态、性能指标和操作,以便于通过管理工具进行监控和配置...
总的来说,JMX提供了一种标准化、灵活且强大的方式来管理Java应用程序,使得开发者能够在不破坏现有调试工具的情况下,深入了解应用程序的运行状态。通过使用JMX,即使没有特定的管理需求,也能增加对应用程序运行...
Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控应用程序、服务和设备。JMX允许开发者创建管理接口,以便对运行时的组件进行动态监控和管理。在这个"jmx_examples.rar"压缩包中,包含...
Java JMX(Java Management Extensions)是一种用于监控和管理应用程序的工具,通过使用 JMX Agent,我们可以暴露应用程序的管理和监控接口,从而允许外部管理应用程序的运行状态和配置。然而,如果 JMX Agent 的...
Java 管理扩展(Java Management Extensions,JMX)是一种 Java 技术,用于监控和管理 Java 应用程序和系统。JMX 提供了一种统一的方式来监控和管理 Java 应用程序,无论是本地还是远程。JMX 的主要特点是提供了一个...
JMX(Java Management Extensions)是Java平台的一部分,用于管理和监控应用程序,包括JVM自身。在这个主题中,我们将深入探讨JVM与JMX在Java环境中的交互以及它们如何增强Java应用的管理和维护能力。 **JVM详解** ...
JMX(Java Management Extensions)是一个用于在Java应用程序中添加管理和监控功能的框架。它提供了一套标准的接口和服务,使得开发者能够轻松地在Java应用中集成管理和监控的能力。JMX的核心概念包括MBeans...
Java管理扩展(Java Management Extensions,JMX)是一种Java API,用于监控和管理Java应用程序和系统资源。JMX提供了一个通用的管理框架,允许开发者创建可以动态地监控和管理Java应用程序的代理。 JMX架构主要由...
在服务器端配置JMX时,首先需要确保你的Java应用程序支持JMX。这通常通过在Java代码中添加MBean(Managed Bean)来实现,MBean是JMX中的管理对象,代表了要管理的资源或服务。你可以自定义MBean,定义其属性、操作和...
**JMX(Java Management Extensions)**是一种由Sun Microsystems提出并由Java社区推动的标准,旨在为Java应用程序、系统和网络提供一个统一的管理和监控框架。自Java SE 5.0起,JMX成为Java平台的一部分,其设计...
在这个压缩包中,`jdmk` 可能是指Java Dynamic Management Kit,这是一个用于Java应用程序的管理和监控工具,它利用了JMX技术。`jmx` 文件可能包含的是与JMX相关的配置或文档。 在实际应用中,`jmxtools-1.2.1.jar`...
Java Management Extensions(JMX)是Java平台的一项重要技术,它提供了一种管理和监控Java应用程序的标准框架。JMX允许开发者创建、配置、管理以及远程监控Java应用,包括系统资源、应用程序和服务。这篇文档将深入...
总的来说,JMX提供了一种标准化的方法来集成管理和监控功能到Java应用程序中,使得开发者能够深入了解应用程序的运行状态,及时发现并解决问题,而无需依赖复杂的调试工具。通过JMX,开发者可以构建出具有自我监控...
设计模式自从开始引入以来就一直很受欢迎,现在,我们还可以把这些设计理念用于应用程序的易管理性设计中。为了使应用程序在生产过程中更易于管理,我们将结合JMX和记录的使用,对整套设计模式进行介绍,同时将这些...
JMX是一种在Java应用程序中管理和监控资源的标准框架,而这个Servlet则充当了一个中间层,将JMX的管理功能暴露给网络,使得远程监控和诊断成为可能。 描述中的信息虽然简洁,但可以推测这是开源或者免费的下载资源...