javax.management

接口
异常
注释
提供 Java Management Extensions 的核心类。

请参见:
          描述

接口摘要
Descriptor JMX 元素的附加元数据。
DescriptorAccess 此接口用于获得对 Descriptor 类的描述符的访问,这些 Descriptor 类与某个 JMX 组件相关联,比如 MBean、MBeanInfo、MBeanAttributeInfo、MBeanNotificationInfo、MBeanOperationInfo 和 MBeanParameterInfo。
DescriptorRead 读取管理接口元素(如 MBeanInfo)的 Descriptor 的接口。
DynamicMBean 定义了 Dynamic MBean(公开了动态管理接口的 MBean)应该实现的各个方法。
MBeanRegistration 可以由 MBean 实现,以便在向 MBean 服务器注册或从其注销之前和之后执行操作。
MBeanServer 这是在代理端进行 MBean 操作的接口。
MBeanServerConnection 此接口表示了与 MBean 服务器(无论是本地的还是远程的)进行通信的一种方式。
MBeanServerDelegateMBean 定义类 MBeanServerDelegate 的对象的管理接口。
NotificationBroadcaster 由发出 Notifications 的 MBean 实现的接口。
NotificationEmitter 由发出 Notifications 的 MBean 实现的接口。
NotificationFilter 可由作为通知过滤器的任何类来实现。
NotificationListener 应该由想要接收通知的对象来实现。
PersistentMBean 此类是一个由希望是持久性的 MBean 实现的接口。
QueryExp 表示可在数据库查询“where 子句”中使用的相关约束。
ValueExp 表示可以作为参数传递给关系表达式的值。
 

类摘要
Attribute 通过将 MBean 属性名与其值相关联来表示 MBean 属性。
AttributeChangeNotification 提供 MBean 所发送的属性更改通知的定义。
AttributeChangeNotificationFilter 此类实现 attribute change notificationNotificationFilter 接口。
AttributeList 表示 MBean 属性值的列表。
AttributeValueExp 表示用作关系约束参数的属性。
DefaultLoaderRepository 已过时。 使用 MBeanServer.getClassLoaderRepository() 取代。
ImmutableDescriptor 不可变的描述符。
JMX JMX API 提供的静态方法。
MBeanAttributeInfo 描述出于管理目的而公开的 MBean 属性。
MBeanConstructorInfo 描述 MBean 所公开的构造方法。
MBeanFeatureInfo 提供 MBean 描述符对象的常规信息。
MBeanInfo 描述由 MBean 公开的管理接口;即描述为管理操作所提供的属性和操作的集合。
MBeanNotificationInfo MBeanNotificationInfo 类用于描述 MBean 向给定的 Java 通知类发出的不同通知实例的特性。
MBeanOperationInfo 描述由 MBean 公开的管理操作。
MBeanParameterInfo 描述由 MBean 公开的操作的参数。
MBeanPermission 权限控制对 MBeanServer 操作的访问。
MBeanServerBuilder 此类表示创建默认 MBeanServer 实现的生成器。
MBeanServerDelegate 从管理的角度表示 MBean 服务器。
MBeanServerFactory 提供 MBean 服务器引用。
MBeanServerInvocationHandler 通过 MBean 服务器将 MBean 的管理接口中的方法转发到 MBean 的 InvocationHandler
MBeanServerNotification 表示 MBean 服务器通过 MBeanServerDelegate MBean 所发出的通知。
MBeanServerPermission 执行与 MBeanServer 关联的操作的 Permission。
MBeanTrustPermission 此权限表示“信任”签名者或代码基。
Notification Notification 类表示 MBean 所发出的通知。
NotificationBroadcasterSupport 提供 NotificationEmitter 接口的实现。
NotificationFilterSupport 提供 NotificationFilter 接口的实现。
ObjectInstance 用于表示 MBean 对象名及其类名。
ObjectName 表示 MBean 的对象名,或者能够与多个 MBean 名称相匹配的模式。
Query 构造查询对象约束。
QueryEval 允许在特定的 MBean 服务器上下文中执行查询。
StandardEmitterMBean 一个其管理接口由 Java 接口上的反射确定并且可以发送通知的 MBean。
StandardMBean 一个管理接口由 Java 接口上的反射确定的 MBean。
StringValueExp 表示作为关系约束变量的字符串。
 

异常摘要
AttributeNotFoundException 指定的属性不存在或无法检索。
BadAttributeValueExpException 向构造的查询方法传递无效的 MBean 属性时,抛出此异常。
BadBinaryOpValueExpException 向构造查询的方法传递无效的表达式时,抛出此异常。
BadStringOperationException 向构造查询的方法传递无效的字符串操作时,抛出此异常。
InstanceAlreadyExistsException 已经在存储库中注册了 MBean。
InstanceNotFoundException 存储库中不存在指定的 MBean。
IntrospectionException 在 MBean 的 introspection 期间出现的异常。
InvalidApplicationException 试图应用下列任一内容时抛出此异常:对 MBean 应用子查询表达式或对错误类的 MBean 应用完全限定属性表达式。
InvalidAttributeValueException 指定的值对该属性无效。
JMException 由 JMX 实现所抛出的异常。
JMRuntimeException 由 JMX 实现所发出的运行时异常。
ListenerNotFoundException 存储库中不存在指定的 MBean 侦听器。
MalformedObjectNameException 字符串的格式不对应于有效的 ObjectName。
MBeanException 表示由代理的 MBean 方法所抛出的“用户定义的”异常。
MBeanRegistrationException 包装由 MBeanRegistration 接口的 preRegister() 和 preDeregister() 方法所抛出的异常。
NotCompliantMBeanException 尝试在 MBean 服务器中注册一个对象,而该对象不是 JMX 兼容的 MBean 时出现此异常。
OperationsException 表示在 MBean 上执行操作时,在 MBean 服务器中抛出的异常。
ReflectionException 表示在使用 java.lang.reflect 类调用 MBean 上的方法时,MBean 服务器中抛出的异常。
RuntimeErrorException 当代理中发生 java.lang.Error 时,必须捕获它并作为 RuntimeErrorException 重新抛出。
RuntimeMBeanException 表示由代理中的 MBean 方法抛出的运行时异常。
RuntimeOperationsException 表示在 MBean 上执行操作时代理中抛出的运行时异常。
ServiceNotFoundException 表示请求的服务不受支持时引发的异常。
 

注释类型摘要
DescriptorKey 描述注释元素与 Descriptor 中字段之间关联方式的元注释。
MXBean 显式地标记某一接口是否为 MXBean 接口的注释。
 

软件包 javax.management 的描述

提供 Java Management Extensions 的核心类。

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

  • 查询并更改应用程序配置
  • 累积有关应用程序行为的统计数据并使其可用
  • 通知状态更改及错误状况。

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

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

MBean

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

  • 可以读取和/或写入的指定名称和类型的属性
  • 可以调用的指定名称和类型的操作
  • 可以由 MBean 发送的指定类型的通知。

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

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

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();
    }
      

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

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

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

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

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

MXBean

MXBean 是标准 MBean 的一个变体,其中复合类型将映射到 javax.management.openmbean 包中定义的标准类型集。如果需要引用 MBean 接口中特定于应用程序的类,则可以使用 MXBean。在 MXBean 规范中有 MXBean 的详细描述。

Dynamic MBean

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

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

Open MBean

Open MBean 是一种 Dynamic MBean,在这种 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 的对象。最便于使用的 MBean Server 是 Platform MBean Server。这是可以由相同 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 =
        JMX.newMBeanProxy(mbs, name, ConfigurationMBean.class);
                                                      
    int cacheSize = conf.getCacheSize();
    conf.setCacheSize(2000);
    conf.save();
      

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

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

通知

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

一个将发送通知的 MBean 必须实现 NotificationBroadcasterNotificationEmitter 接口。通常情况下,它通过创建 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

从以下版本开始:
1.5
另请参见:
Java SE 6 Platform documentation on JMX technology,尤其是 JMX Specification, version 1.4(pdf)。