Module java.management

Package javax.management.modelmbean


package javax.management.modelmbean

提供了ModelMBean类的定义。Model MBean是一个充当管理接口和底层托管资源之间桥梁的MBean。管理接口和托管资源都指定为Java对象。相同的Model MBean实现可以多次重用,具有不同的管理接口和托管资源,并且可以提供诸如持久性和缓存等通用功能。

Model MBean实现了ModelMBean接口。它是一个DynamicMBean,其getMBeanInfo方法返回一个实现ModelMBeanInfo的对象。

每个MBean都有一个包含有关MBean本身及其属性、操作、构造函数和通知的信息的MBeanInfo。Model MBean通过使用Descriptor来增强这个MBeanInfoDescriptor以(key,value)对的形式编码附加信息。通常,DescriptorDescriptorSupport的实例。

RequiredModelMBean提供了标准的Model MBean实现。

以下示例展示了如何使用Model MBean使HashMapget方法通过MBean服务器进行管理。其他方法不能通过MBean服务器访问。这里的HashMap没有特殊之处。任何公共类的公共方法都可以以相同的方式暴露给管理。

import java.lang.reflect.Method;
import java.util.HashMap;
import javax.management.*;
import javax.management.modelmbean.*;

// ...

MBeanServer mbs = MBeanServerFactory.createMBeanServer();
// MBean服务器

HashMap map = new HashMap();
// 将被管理的资源

// 为Model MBean构建管理接口
Method getMethod = HashMap.class.getMethod("get", new Class[] {Object.class});
ModelMBeanOperationInfo getInfo =
    new ModelMBeanOperationInfo("获取键的值", getMethod);
ModelMBeanInfo mmbi =
    new ModelMBeanInfoSupport(HashMap.class.getName(),
                              "键和值的映射",
                              null,  // 没有属性
                              null,  // 没有构造函数
                              new ModelMBeanOperationInfo[] {getInfo},
                              null); // 没有通知

// 创建Model MBean并将其链接到资源
ModelMBean mmb = new RequiredModelMBean(mmbi);
mmb.setManagedResource(map, "ObjectReference");

// 在MBean服务器中注册Model MBean
ObjectName mapName = new ObjectName(":type=Map,name=whatever");
mbs.registerMBean(mmb, mapName);

// 资源可以独立于MBean发展
map.put("key", "value");

// 可以通过MBean服务器访问“get”方法
mbs.invoke(mapName, "get", new Object[] {"key"}, new String[] {Object.class.getName()});
// 返回“value”
    

包规范

自版本:
1.5