王朝百科
分享
 
 
 

javax.management

王朝百科·作者佚名  2010-02-16  
宽屏版  字体: |||超大  

软件包 javax.management 的描述

提供 Java Management Extensions 的核心类。

Java Management Extensions (JMXTM) API 是一个用于管理和监视的标准 API。典型用途包括:

查询并更改应用程序配置

累积有关应用程序行为的统计并使其可用

通知状态更改及错误状况。

JMX API 还可以作为解决方案的一部分来管理系统、网络等。

API 包括远程访问,因此,远程管理程序可以基于这些目的与正在运行的应用程序交互。

MBeans

JMX API 的基本概念是 MBean。MBean 是表示资源的指定托管对象。它有一个管理接口,包括以下内容:

可以读取和/或写入的指定名称和类型的属性

可以调用的指定名称和类型的操作

可以由 MBean 发送的指定类型的通知。

例如,一个表示应用程序配置的 MBean 可以有一些表示不同配置项的属性。读取 CacheSize 属性可以返回该项的当前值。写入该属性可以更新该项,从而可能会更改正在运行的应用程序的行为。诸如 save 之类的操作可以持久保存当前配置。每次更改配置时都会发送 ConfigurationChangedNotification 之类的通知。

在 JMX API 的标准用法中,MBeans 可以像 Java 对象那样来实现。不过,如下所述,通常不直接引用这些对象。

Standard MBean

为了使 MBean 实现简单化,JMX API 包括Standard MBean 这一概念。Standard MBean 的属性和操作来源于 Java 接口,使用特定的命名模式,与 JavaBeansTM 使用的属性和操作类似。例如,假定有如下这个接口:

public interface ConfigurationMBean {

public int getCacheSize();

public void setCacheSize(int size);

public long getLastChangedTime();

public void save();

}

方法 getCacheSize 和 setCacheSize 定义了名为 CacheSize 的类型 int 的读写属性(首字母大写,这与 JavaBeans 惯例不同)。

方法 getLastChangedTime 定义了名为 LastChangedTime 的类型 long 的属性。这是一种只读属性,原因是没有方法 setLastChangedTime。

方法 save 定义了名为 save 的操作。它不是属性,原因是它的名称没有以 get、set 或 is 开头。

Standard MBeans 的准确命名模式将在 JMX 规范中详述。

制做作为带有此管理接口的 MBean 的 Java 对象有两种方法。一种用于具有与 Java 接口完全相同的名称、但没有 MBean 后缀的类的对象。因此,在该示例中,对象将是类 Configuration 的对象,与 ConfigurationMBean 在相同的 Java 包中。第二种方法是使用 StandardMBean 类。

Dynamic MBean

Dynamic MBean 是一种在运行时定义其管理接口的 MBean。例如,配置 MBean 可以通过解析 XML 文件来确定它所公开的属性名称和类型。

任何实现 DynamicMBean 接口的类的 Java 对象都是 Dynamic MBean。

Open MBean

Open MBean 是一种 Dynamic MBean,在此属性类型和操作参数类型以及返回值都使用一个预定义 Java 类的小集合来构建。Open MBean 使用其远程管理程序加快了操作,这些远程管理程序不必使用特定于应用程序的类型,其中包括非 Java 程序。Open MBean 由包 javax.management.openmbean 定义。

Model MBean

Model MBean 是一种 Dynamic MBean,它充当管理接口和基础托管资源之间的桥梁。管理接口和托管资源都被指定为 Java 对象。相同的 Model MBean 实现可以重复多次用于不同的管理接口和托管资源,并且还可以提供诸如持久性和缓存之类的共有功能。Model MBean 由包javax.management.modelmbean定义。

MBean 服务器

要想让 MBean 有用,必须在 MBean 服务器中注册它。MBean 服务器是一个 MBean 存储库。通常情况下,只能通过 MBean 服务器访问 MBean。换句话说,代码不再直接访问实现 MBean 的 Java 对象,而是通过 MBean 服务器根据名称访问该 MBean。每个 MBean 在 MBean 服务器内都有一个由 ObjectName 类定义的惟一名称。

MBean 服务器是一个实现了接口 MBeanServer 的对象。从 J2SE 1.5 开始,将提供平台 MBean 服务器。这是可以由在相同 Java 虚拟机内运行的不同托管组件共享的单个 MBean 服务器。平台 MBean 服务器可以通过方法 ManagementFactory.getPlatformMBeanServer() 访问。

使用 MBeanServerFactory 类,应用程序代码还可以创建一个新的 MBean 服务器,或者访问已经创建的 MBean 服务器。

在 MBean 服务器中创建 MBean

创建 MBean 有两种方法。一种方法是构造将作为 MBean 的 Java 对象,然后使用 registerMBean 方法将其在 MBean 服务器注册。另一种方法是使用其中一个 createMBean 方法在单一操作中创建并注册 MBean。

registerMBean 方法对于本地使用较为简单,但不能远程使用。createMBean 方法可以远程使用,但有时需要注意类加载问题。

如果实现了 MBeanRegistration 接口,则 MBean 可以在向 MBean 服务器注册或从中注销时执行操作。

在 MBean 服务器中访问 MBean

给定一个 ObjectName name 和一个 MBeanServer mbs,便可以访问一些属性和操作,如此例:

int cacheSize = mbs.getAttribute(name, "CacheSize");

Attribute newCacheSize =

new Attribute("CacheSize", new Integer(2000));

mbs.setAttribute(name, newCacheSize);

mbs.invoke(name, "save", new Object[0], new Class[0]);

另外,如果您有一个与 MBean 管理接口对应的 Java 接口,则您可以使用 MBean 代理,如下所示:

ConfigurationMBean conf = (ConfigurationMBean)

MBeanServerInvocationHandler.newProxyInstance(mbs,

name,

ConfigurationMBean.class,

false);

int cacheSize = conf.getCacheSize();

conf.setCacheSize(2000);

conf.save();

使用 MBean 代理只是为了方便。与第一个示例相同,第二个示例的结尾同样调用了 MBeanServer 操作。

可以通过查询 MBean 服务器查找其名称与特定模式匹配和/或其属性满足特定约束的 MBean。名称模式可以使用 ObjectName 类构造,而约束可以使用 Query 类构造。然后方法 queryNames 和 queryMBeans 将执行查询。

通知

通知 是 Notification 类或子类的一个实例。除其 Java 类之外,它还有一个可以将它与相同类的其他通知区分开的类型 字符串。

一个将发送通知的 MBean 必须实现 NotificationBroadcaster 或 NotificationEmitter 接口。通常情况下,它通过创建 NotificationBroadcasterSupport 子类或委派该类的一个实例来实现这一点。

通知可以由侦听器 接收,该侦听器是一个实现了 NotificationListener 接口的对象。可以使用方法 javax.management.MBeanServer#addNotificationListener(ObjectName、NotificationListener、NotificationFilter、Object) 将侦听器添加到 MBean 中。可以选择向此方法提供过滤器,以便只选择感兴趣的通知。过滤器是一个实现了 NotificationFilter 接口的对象。

MBean 可以是由同一个 MBean 服务器中的其他 MBean 发出的通知的侦听器。在此情况下,它实现 NotificationListener,并使用方法 javax.management.MBeanServer#addNotificationListener(ObjectName、ObjectName、NotificationFilter、Object) 来侦听。

远程访问 MBean

可以通过连接器 远程访问 Bean 服务器。连接器允许远程 Java 应用程序以实质上与本地 Java 应用程序相同的方式访问 MBean 服务器。包 javax.management.remote 定义连接器。

JMX 规范还定义了适配器 的概念。适配器可以在协议中(如 SNMP 或 HTML )的请求和对 MBean 服务器的访问之间进行转换。所以,像 SNMP GET 这样的操作可能会导致对 MBean 服务器 getAttribute。

包规范

JMX API 规范,1.2 版

从以下版本开始:

1.5

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格​十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有