Dynamic MBean不需要自定义MBean接口,只需要实现DynamicMBean接口即可,Dynamic MBean没有任何明显些在代码里的属性和方法,所有的属性和方法都是通过反射结合JMX提供的辅助元数据从而动态生成。换句话说,它可以使用动态的配置来实现一个类中的哪些方法或者属性可以被注册到jmx去管理。
下面实现一个具体的代码,其中主要涉及3个类,分别是Hello,HelloDynamic和HelloAgent。其中Hello是一个普通的JavaBean,可以看做实际被管理的bean;HelloDynamic是一个动态的MBean,通过它来代理Hello类型的JavaBean,对其暴露一些需要被管理的属性和方法;HelloAgent中有main方法,用于启动。这里同样使用了HtmlAdaptorServer
来通过浏览器查看和管理MBean。
下面看一下Hello类的实现:
|
|
很普通,没必要说了,再看一下HelloDynamic类的实现:
|
|
这里实现了DynamicMBean
接口,可见该类中的方法都是通过反射来工作的,这样就可以理解为什么叫做Dynamic MBean了,利用反射可以动态的增加或删除属性和方法。
HelloAgent类的实现:
|
|
如果看过前两篇的JMX内容,那么可以看出,没什么不一样的地方,我们运行一下该程序,打开浏览器,输入http://localhost:9999 查看:

点击name=HelloDynamic
后,可以看到,Hello中的属性和方法已经被注册进来了:

点击print
按钮后,在控制台可以看到效果:
|
|