请参见:
描述
接口摘要 | |
---|---|
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 notification 的 NotificationFilter 接口。 |
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 接口的注释。 |
提供 Java Management Extensions 的核心类。
Java Management Extensions (JMXTM) API 是一个用于管理和监视的标准 API。典型用途包括:
JMX API 还可以作为解决方案的一部分来管理系统、网络等。
API 包括远程访问,因此,远程管理程序可以基于这些目的与正在运行的应用程序进行交互。
JMX API 的基本概念是 MBean。MBean 是表示资源的指定管理对象。它有一个管理接口,该接口包括以下内容:
例如,一个表示应用程序配置的 MBean 可以有一些表示不同配置项的属性。读取 CacheSize
属性可以返回该项的当前值。写入该属性可以更新该项,从而可能会更改正在运行的应用程序的行为。诸如 save
之类的操作可以持久保存当前配置。每次更改配置时都会发送 ConfigurationChangedNotification
之类的通知。
在 JMX API 的标准用法中,可以像实现 Java 对象那样来实现 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 MBean 的准确命名模式将在 JMX 规范中详述。
制做作为带有此管理接口的 MBean 的 Java 对象的方法有两种。一种用于具有与 Java 接口完全相同的名称、但没有 MBean
后缀的类的对象。因此,在该示例中,对象将是 Configuration
类的对象,与 ConfigurationMBean
在相同的 Java 包中。第二种方法是使用 StandardMBean
类。
MXBean 是标准 MBean 的一个变体,其中复合类型将映射到 javax.management.openmbean
包中定义的标准类型集。如果需要引用 MBean 接口中特定于应用程序的类,则可以使用 MXBean。在 MXBean
规范中有 MXBean 的详细描述。
Dynamic MBean 是一种在运行时定义其管理接口的 MBean。例如,配置 MBean 可以通过解析 XML 文件来确定它所公开的属性名称和类型。
任何实现 DynamicMBean
接口的类的 Java 对象都是 Dynamic MBean。
Open MBean 是一种 Dynamic MBean,在这种 MBean 中,属性类型、操作参数类型和返回值都是使用一个预定义 Java 类的小集合来构建的。Open MBean 使用其远程管理程序加快了操作,这些远程管理程序不必使用特定于应用程序的类型,其中包括非 Java 程序。Open MBean 由包 javax.management.openmbean
定义。
Model MBean 是一种 Dynamic MBean,它充当管理接口和基础托管资源之间的桥梁。管理接口和托管资源都被指定为 Java 对象。相同的 Model MBean 实现可以重复多次用于不同的管理接口和托管资源,并且还可以提供诸如持久性和缓存之类的共有功能。Model MBean 由包 javax.management.modelmbean
定义。
要想让 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 的 Java 对象,然后使用 registerMBean
方法在 MBean 服务器中注册它。另一种方法是使用其中一个 createMBean
方法在单一操作中创建并注册 MBean。
registerMBean
方法对于本地使用较为简单,但不能远程使用。createMBean
方法可以远程使用,但有时需要注意类加载问题。
如果实现了 MBeanRegistration
接口,则 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
类构造。然后方法 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)
来侦听。
可以通过连接器 远程访问 Bean 服务器。连接器允许远程 Java 应用程序以实质上与本地 Java 应用程序相同的方式访问 MBean 服务器。包 javax.management.remote
定义了连接器。
JMX 规范还定义了适配器 的概念。适配器可以在协议中(如 SNMP 或 HTML )的请求与对 MBean 服务器的访问之间进行转换。所以,像 SNMP GET 这样的操作可能会导致对 MBean 服务器 getAttribute
。