动态MBean
一个java类直接或者间接继承 javax.management.DynamicMBean 接口即称为动态MBean.在一个动态MBean中,属性和操作在运行期间才能显示.因此,动态MBean比较适用于管理信息不是静止的情况.
优势
- 不需定义你自己的管理接口.
- 属性和操作只在运行时显现,显现的属性和操作可以动态控制.
- 动态MBean和它的属性及方法的描述可以获得.
动态MBean接口
javax.management.DynamicMBean 接口定义了以下6个方法:
- getMBeanInfo
- getAttribute
- setAttribute
- getAttributes
- setAttributes
- invoke
getMBeanInfo
public javax.management.MBeanInfo getMBeanInfo()
这个方法返回一个MBeanInfo对象.从这个对象,属性、操作、构造器和通知信息能被读取.管理信息是从这个方法从MBean获得的.这是一个动态MBean比标准MBean优势的一点.在标准MBean,管理信息将由MBean的内省获得.因此一些标准的方法命名词法模式必须由继承类遵循.动态MBean在这类上比较自由.如果继承的类已经定义方法printName(),没有遵循标准的命名词法模式,这个方法能被mapping到MBean中的一些属性(叫ServerName)的getter或者setter方法.
getAttribute and setAttribute
public Object getAttribute(String AttributeName)
throws javax.management.AttributeNotFoundException,
javax.management.MBeanException,
javax.management.ReflectionException
public void setAttribute(javax.management.Attribute AttributeName)
throws javax.management.AttributeNotFoundException,
javax.management.InvalidAttributeValueException,
javax.management.MBeanException,
javax.management.ReflectionException
getAttributes and setAttributes
public javax.management.AttributeList getAttributes(String[] AttributeNames)
public javax.management.AttributeList setAttributes(javax.management.AttributeList AttributeNames)
invoke
方法调用允许一个动作(方法)在动态MBean中调用.这个方法的声明如下:
public Object invoke(String methodName, Object[] parameters, String[] signature)
throws javax.management.MBeanException,
javax.management.ReflectionException
需记住的几点
- 动态MBean必须是一个具体的类,至少具有一个公共构造器,应该继承 javax.management.DynamicMBean 接口.
- 在一个动态 MBean 中,属性和操作被组成MBeanInfo对象,由 getMBeanInfo 方法返回.
- 没有属性命名要遵循的语义.可以 Mapping 一些方法 foo( ) 到一个名为 ServerName 的属性.
- 描述 MBean 和它的属性和方法变为可能.
什么时候使用动态 MBeans?
以下是实践中使用动态MBean的 使用案例:
Case 1
看看管理一个Web服务器.如果基于角色的服务要被实现,如,只有用户具有管理员权限的时候才能启动或者停止服务器.一个动态MBean能够被写成为包含一个 submitUserInfo 的方法,具有两个参数,用户名和密码.如果用户名和密码正常匹配,那么getMBeanInfo将返回一个MBeanInfo对象,描述操作startService和stopService. 否则,管理操作将不显示.
Case 2
看看配置一个 logger. 很明显在配置它的属性期间,logger将不被激活.一个动态MBean能够写成在logger运行期间显示只读logger属性.它也显示停止logger的操作.一旦logger停止,属性就变为可读写,以便进行logger配置.这类场景能够用动态MBean轻松搞定.动态MBean的例子中提供了这样一个实例.
发表于 @ 2008年02月17日 05:39:00|评论(loading...)