Skip navigation links
Java™ Platform
Standard Ed. 8

Package javax.management

提供Java管理扩展的核心类。

See: 描述

Package javax.management Description

提供Java管理扩展的核心类。

Java管理扩展(JMX TM )API是用于管理和监视的标准API。 典型用途包括:

JMX API也可以用作管理系统,网络等的解决方案的一部分。

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

MBeans

JMX API的基本概念是MBean MBean是一个表示资源的命名管理对象 它具有必须公开管理界面 ,包括:

例如,代表应用程序配置的MBean可以具有表示不同配置项的属性。 读取CacheSize属性将返回该项目的当前值。 编写它会更新项目,从而潜在地改变正在运行的应用程序的行为。 诸如save可以save存储当前配置。 每次更改配置时,都可以发送ConfigurationChangedNotification等ConfigurationChangedNotification

在JMX API的标准用法中,MBeans被实现为Java对象。 然而,如下所述,这些对象通常不直接引用。

标准MBeans

为了使MBean的实现变得简单,JMX API包含了标准MBean的概念。 标准MBean是一种使用某些命名模式从Java界面推导其属性和操作的类,与JavaBeans TM类似。 例如,考虑一个这样的接口:

  public interface ConfigurationMBean {
         public int getCacheSize();
         public void setCacheSize(int size);
         public long getLastChangedTime();
         public void save();
    } 

方法getCacheSizesetCacheSize限定类型的一个读写属性int称为CacheSize (以初始资本,与JavaBeans惯例不同)。

该方法getLastChangedTime定义类型的属性long称为LastChangedTime 这是一个只读属性,因为没有方法setLastChangedTime

方法save定义了一个称为save 它不是一个属性,因为它的名字开头不是getset ,或is

标准MBean的确切命名模式详见JMX Specification

有两种方法来创建一个具有此管理界面的MBean的Java对象。 一个是对象是一个与Java接口具有完全相同名称但没有MBean后缀的类。 因此,在示例中,对象将是类Configuration ,在相同的Java包为ConfigurationMBean 第二种方法是使用StandardMBean类。

MXBeans

MXBean是标准MBean的变体,其中复杂类型映射到javax.management.openmbean包中定义的一组标准类型。 如果您需要在MBean界面中引用特定于应用程序的类,那么MXBeans是合适的。 他们进行了详细的规范说明MXBean

动态MBean

动态MBean是一个在运行时定义其管理界面的MBean。 例如,配置MBean可以通过解析XML文件来确定其公开的属性的名称和类型。

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

打开MBean

一个开放MBean是一种动态MBean,其中使用一小组预定义Java类构建了属性类型和操作参数和返回值。 开放的MBeans可以帮助远程管理程序进行操作,这些程序不一定能够访问特定于应用程序的类型,包括非Java程序。 打开的MBeans由包 javax.management.openmbean定义。

模型MBeans

模型MBean是一种动态MBean,充当管理界面和底层托管资源之间的桥梁。 管理界面和被管理资源都被指定为Java对象。 相同的Model MBean实现可以通过不同的管理接口和托管资源重复使用多次,并且可以提供常见的功能,如持久性和缓存。 模型MBeans由包 javax.management.modelmbean定义。

MBean服务器

为了有用,必须在MBean服务器中注册MBean MBean服务器是MBean的存储库。 通常,MBean的唯一访问是通过MBean服务器。 换句话说,代码不再直接访问实现MBean的Java对象,而是通过MBean服务器以名称访问MBean。 每个MBean在MBean服务器中都有一个唯一的名称,由ObjectName类定义。

MBean服务器是一个实现该接口的对象MBeanServer 使用最方便的MBean服务器是Platform MBean Server 这是一个单独的MBean服务器,可以在同一个Java虚拟机中运行的不同托管组件共享。 使用方法ManagementFactory.getPlatformMBeanServer()访问平台MBean服务器。

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

在MBean服务器中创建MBean

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

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

当它被注册或未注册的MBean服务器,如果它实现了一个MBean可以执行的操作MBeanRegistration接口。

访问MBean服务器中的MBean

给定ObjectName nameMBeanServer 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 =
        JMX.newMBeanProxy(mbs, name, ConfigurationMBean.class);
    int cacheSize = conf.getCacheSize();
    conf.setCacheSize(2000);
    conf.save(); 

使用MBean代理只是一个方便。 第二个例子最终会调用与第一个相同的MBeanServer操作。

对于名称与某些模式匹配的MBean和/或其属性满足某些限制的MBean,可以查询MBean服务器。 名称模式使用ObjectName类构建,约束使用Query构建 方法queryNamesqueryMBeans然后执行查询。

MBean生命周期

MBean可以实现MBeanRegistration接口,以便在MBean服务器中注册和注销时被告知。 此外, preRegister方法允许MBean获得对MBeanServer对象的引用,并在MBean服务器中获取其ObjectName

通知

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

将发出通知的MBean必须实现NotificationBroadcasterNotificationEmitter接口。 通常,它通过子类化NotificationBroadcasterSupport或委派给该类的实例来实现。 这是一个例子:

  public class Configuration extends NotificationBroadcasterSupport
            implements ConfigurationMBean {
        ...
        private void updated() {
            Notification n = new Notification(...);
            sendNotification(n);
        }
    } 

监听器可以接收通知, 监听器是实现NotificationListener接口的对象。 您可以使用方法MBeanServer.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)将侦听器添加到MBean。 您可以选择为此方法提供过滤器 ,仅选择感兴趣的通知。 过滤器是实现NotificationFilter接口的对象。

MBean可以是同一MBean服务器中其他MBean发出的通知的侦听器。 在这种情况下,它实现NotificationListener ,方法MBeanServer.addNotificationListener(ObjectName, ObjectName, NotificationFilter, Object)用于监听。

远程访问MBean

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

JMX规范还定义了适配器的概念。 适配器在协议(如SNMP或HTML)中的请求之间进行转换,并访问MBean服务器。 因此,例如,SNMP GET操作可能会导致MBean服务器上的getAttribute

JMX规范版本之间的互操作性

当客户端使用JMX Remote API连接到服务器时,它们可能没有相同版本的JMX规范。 这里描述的JMX规范版本是1.4版本。 以前的版本是1.0,1.1和1.2。 (没有1.3。)标准JMX Remote API被定义为使用版本1.2以上,因此在基于标准的部署中,唯一的互操作性问题出现在版本1.2之前。

每个版本的JMX规范继续实现以前版本的功能。 因此,当客户端运行的版本低于服务器时,不应存在任何互操作性问题。

当客户端运行比服务器更新的版本时,某些较新的功能可能无法使用,如下一节所述。 客户端可以通过检查确定服务器的版本SpecificationVersion的属性MBeanServerDelegate

如果远程MBean服务器是1.2

从以下版本开始:
1.5
另请参见:
Java Platform documentation on JMX technology in particular the JMX Specification, version 1.4(pdf).
Skip navigation links
Java™ Platform
Standard Ed. 8