1.jmx是什么
JMX是Java Management Extensioins的缩写,功能是对java程序的管理。不太好理解,下面给出一个例子来说明。
2.实例
package swim;
public interface UserMBean {
public void changeName(String name);
public void printName();
}
package swim;
public class User implements UserMBean {
public String name = "default";
@Override
public void changeName(String name) {
this.name = name;
}
@Override
public void printName() {
System.out.println(this.name);
}
}
package swim;
import java.lang.management.ManagementFactory;
import javax.management.InstanceAlreadyExistsException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
public class jmx1_1 {
public static void main(String args[]) {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
try {
ObjectName name = new ObjectName("swim:type=User");
User uBean = new User();
mbs.registerMBean(uBean, name);
while(true){
System.out.println(mbs.invoke(name, "printName", null, null));
Thread.sleep(5000);
}
} catch (MalformedObjectNameException e) {
e.printStackTrace();
} catch (InstanceAlreadyExistsException e) {
e.printStackTrace();
} catch (MBeanRegistrationException e) {
e.printStackTrace();
} catch (NotCompliantMBeanException e) {
e.printStackTrace();
} catch (InstanceNotFoundException e) {
e.printStackTrace();
} catch (ReflectionException e) {
e.printStackTrace();
} catch (MBeanException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
可以看到对User的操作可以通过MBeanServer 来控制,这个就很强大了啦。进一步来说还可以这样。运行Jconsole命令。
点击printName,可以执行程序中的printName函数。试试changeName,可以看到值也变了。是不是厉害了。
3.概念上的东西
一个MBean代表一个被管理对象。这个对象需要暴露一些供读写的属性,以及可以调用的方法。JMX平台定义了4种MBean,标准、动态、开放、模型。上面的实例是标准型的MBean,这里给出一个入门级的了解,至于其它类型的MBean,请参看http://blog.csdn.net/u013256816/article/details/52800742(从零开始玩转JMX系列)
本文是在zookeeper代码阅读中看到的关于JMX部分代码后,不了解其意义然后了解而形成的文章。