旅行

总是走在漫长的路上...

转载 jmx入门4-动态MBean 收藏

动态MBean

一个java类直接或者间接继承 javax.management.DynamicMBean 接口即称为动态MBean.在一个动态MBean中,属性和操作在运行期间才能显示.因此,动态MBean比较适用于管理信息不是静止的情况.

优势

  • 不需定义你自己的管理接口.
  • 属性和操作只在运行时显现,显现的属性和操作可以动态控制.
  • 动态MBean和它的属性及方法的描述可以获得.

动态MBean接口

javax.management.DynamicMBean 接口定义了以下6个方法:

  1. getMBeanInfo
  2. getAttribute
  3. setAttribute
  4. getAttributes
  5. setAttributes
  6. 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

需记住的几点

  1. 动态MBean必须是一个具体的类,至少具有一个公共构造器,应该继承 javax.management.DynamicMBean 接口.
  2. 在一个动态 MBean 中,属性和操作被组成MBeanInfo对象,由 getMBeanInfo 方法返回.
  3. 没有属性命名要遵循的语义.可以 Mapping 一些方法 foo( ) 到一个名为 ServerName 的属性.
  4. 描述 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...)

新一篇: jmx入门5-模型MBean  | 旧一篇: jmx入门3-编写自己的标准MBean

Csdn Blog version 3.1a
Copyright © 张留林