标题：javax.management
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