动态MBean
来源:互联网 发布:途牛和携程哪个好 知乎 编辑:程序博客网 时间:2024/05/19 12:37
standard MBean适合管理新资源或未知,静态资源。随着资源演进,API会随着每次发布而改变。Dynamic MBean则比较适合处理这种情况,因为它在运行时决定管理接口。Dynamic MBean使用class元数据来描述管理接口。
JMX agent识别Dynamic MBean,是因为它们必须实现javax.management.DynamicMBean接口。
invoke()方法有三个参数:string,方法的名称。Object的数组(方法的参数值)和string数组(参数类型的字符串)
JMX agent识别Dynamic MBean,是因为它们必须实现javax.management.DynamicMBean接口。
package javax.management;public interface DynamicMBean{ public Object getAttribute( String attribute ) throws AttributeNotFoundException, MBeanException, ReflectionException; public void setAttribute( Attribute attribute ) throws AttributeNotFoundException, InvalidAttributeValueException,MBeanException, ReflectionException; public AttributeList getAttributes( String[] attributes ); public AttributeList setAttributes( AttributeList attributes ); public Object invoke( String actionName, Object[] params,String[] signature ) throws MBeanException,ReflectionExceptionn public MBeanInfo getMBeanInfo();}
DynamicMBean接口使用MBeanInfo类的方式暴露资源的管理接口。JMX agent使用getMBeanInfo()方法来获取Dynamic MBean管理接口描述。MBeanInfo对象是standard JMX对象(描述MBean管理接口的各部分)的容器。
getAttribute()方法返回类型为Object对象,它简单的封装了暴露的属性实际的值。getAttributes()返回AttributeList类,它是ArrayList的一个子类,是Attribute对象的集合。每个Attribute对象封装了attribute的名称和值。invoke()方法有三个参数:string,方法的名称。Object的数组(方法的参数值)和string数组(参数类型的字符串)
MBeanInfo类是描述MBean管理接口对象容器。MBean的元数据类被Dynamic MBean、MBean server创建。MBean server内部使用这些对象(不用区分MBean类型)。
MBeanFeatureInfo是所有metaclass的基类,MBeanParameterInfo是辅助类。每个MBean元数据类是MBeanFeatureInfo的子类,它包含一个name和description。MBeanParameterInfo提供了构造器或操作的参数描述。
public MBeanConstructorInfo( String description, java.lang.reflect.Constructor constructor );public MBeanConstructorInfo( String name, String description, MBeanParameterInfo[] signature )public MBeanAttributeInfo( String name, String description, java.lang.reflect.Method getter, java.lang.reflect.Method setter)public MBeanAttributeInfo( String name, String type, String description, boolean isReadable, boolean isWritable, boolean isIs)MBeanAttributeInfo的getType()方法返回属性的类型,isReadable()属性是否可读,isWritable()属性是否可写,isIs()。
public MBeanOperationInfo( String description, java.lang.reflect.Method method)public MBeanOperationInfo( String name, String description, MBeanParameterInfo[] signature, String type, int impact)
MBeanOperationInfo定义了public static final成员变量,这些值描述了invoke的特定操作的impact。
INFO:操作返回信息
ACTION:操作导致MBean的变更或action。
ACTION_INFO:操作导致INFO和ACTION的影响。
UNKNOW:未知的。
构建Dynamic MBean的MBeanInfo信息:
private void buildDynamicMBean() {// 设定构造函数Constructor[] thisconstructors = this.getClass().getConstructors();constructors[0] = new MBeanConstructorInfo("HelloDynamic(): Constructs a HelloDynamic object",thisconstructors[0]);// 设定一个属性attributes[0] = new MBeanAttributeInfo("Name", "java.lang.String","Name: name string.", true, true, false);// operate method 我们的操作方法是printMBeanParameterInfo[] params = null;// 无参数operations[0] = new MBeanOperationInfo("print","print(): print the name", params, "void",MBeanOperationInfo.INFO);mBeanInfo = new MBeanInfo(className, description, attributes,constructors, operations, mBeanNotificationInfoArray);}方法调用:
public Object invoke(String actionName, Object[] params, String[] signature)throws MBeanException, ReflectionException {if (actionName.equals("print")) {// 具体实现我们的操作方法printSystem.out.println("Hello, " + name + ", this is HellDynamic!");dynamicAddOperation();return null;} else if (actionName.equals("print1")) {System.out.println("这是动态增加的一方法print1");return null;} else {// unrecognized operation name:throw new ReflectionException(new NoSuchMethodException(actionName),"Cannot find the operation " + actionName + " in "+ className);}}
- 动态MBean
- 4. 动态MBean:DynamicMBean
- 4.动态MBean:DynamicMBean
- 【JMX】3. 动态MBean
- 动态MBean:DynamicMBean
- 动态MBean:DynamicMBean
- 4、动态MBean:DynamicMBean
- 动态MBean:DynamicMBean
- Mbean
- [JMX一步步来] 4、动态MBean:DynamicMBean
- [JMX一步步来] 4、动态MBean:DynamicMBean
- Dynamic MBean
- 什么是MBean?
- JMX & MBean
- 标准MBean
- 监控mbean
- J5 MBean
- JMX 注册MBean服务 MBean RMI
- Windows CE 模拟器和远程调试工具
- ENVI下DOM数据生产专题之图像增强
- xcode 4.5.2 中使用 ios 6 skd iOS/Xcode异常:reason: ‘Could not instantiate class named NSLayoutConstraint’
- 使用CoreData的轻量级自动数据迁移
- 回顾我的2012
- 动态MBean
- Mina学习笔记(4)IoService
- Android-log
- 多线程的使用——中断线程详解(Interrupt)
- How to Report Bugs Effectively
- hdu 2037 今年暑假不AC
- CF 18A(近似直角三角形判断+向量直角公式+switch+istream&(..&P a))
- 使用Platform Builder配置Windows CE操作系统
- 搞笑的宝宝照片