package com.joy_cz.jmx;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.Attribute;;
/**
* @author Administrator
*
*/
public class HelloAgent {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO 自动生成方法存根
MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("book.java:service=example");
Hello hello = new Hello();
server.registerMBean(hello, name);
Object[] opArgs1 = {};
String[] sig1={};
Object result1 = server.invoke(name, "sayHello", opArgs1,sig1);
Integer times1 = (Integer)server.getAttribute(name, "Times");
System.out.println(times1);
server.setAttribute(name, new Attribute("Times",new Integer(7)));
Integer times2 =(Integer)server.getAttribute(name, "Times");
System.out.println(times2);
}
}
看过 HelloAgent的代码部分,你会发现代理程序在使用 sayHello和Times这样的固定名称来间接访问Hello的方法和属性。MBeanServer可以提供对应注册名称MBean的所有信息,通过 getMBeanInfo方法,将MBean的信息封装在MBeanInfo类中,其中包含表示属性和方法的各种元数据类型。
MBeanInfo mbi = server.getMBeanInfo(name);
MBeanOperationInfo[ ] mbois = mbi.getOperations();
for(int i = 0;i<mbois.length;i++)
{
MBeanOperationInfo mboi = mbois[i];
System.out.println(mboi.getName());
}
MBeanAttributeInfo[ ] mbais = mbi.getAttributes();
for(int i = 0;i<mbais.length;i++)
{
MBeanAttributeInfo mbai = mbais[i];
System.out.println(mbai.getName());
}