MBean就是被JMX管理的资源。一般有两种类型的MBean,标准的和动态的。 标准类型的MBean最简单,它能管理的资源(包括属性,方法,时间)必须定义在接口中,然后MBean必须实现这个接口。它的命名也必须遵循一定的规范,例如我们的MBean为User,则接口必须为UserMBean。 动态MBean必须实现javax.management.DynamicMBean接口,所有的属性,方法都在运行时定义。
这里主要介绍标准MBean。
接口:UserMBean.java
public interface UserMBean { String getName(); void SetName(String name); String getPasswd(); void SetPasswd(String pwd); int add(int x, int y); }
MBean: User.java
public class User implements UserMBean { private String name; private String passwd; @Override public String getName() { return name; } @Override public void SetName(String name) { this.name = name; } @Override public String getPasswd() { return passwd; } @Override public void SetPasswd(String pwd) { this.passwd = pwd; } @Override public int add(int x, int y) { return x + y; } }
JMXdemo.java
import java.lang.management.ManagementFactory; import javax.management.InstanceAlreadyExistsException; import javax.management.MBeanRegistrationException; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; public class JMXdemo { public static void main(String[] args) throws MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException, InterruptedException { MBeanServer server=ManagementFactory.getPlatformMBeanServer(); ObjectName objectName=new ObjectName("jmx:type=User"); User bean=new User(); server.registerMBean(bean, objectName); String oldName=null; String oldPwd=null; System.out.println("jmx started!!!"); while(true){ if(oldName!=bean.getName()|| oldPwd !=bean.getPasswd()){ System.out.println(bean.getName()+":"+bean.getPasswd()); oldName=bean.getName(); oldPwd=bean.getPasswd(); } Thread.sleep(1000); } } }
先创建一个MBeanServer,相当于一个MBean的容器。然后创建一个MBean(User),并给它取名为jmx:type=User,然后将该MBean注册到MBeanServer即可。
打开Java自带的调试工具jconsole,连接到该进程中,会看到有一个MBean的选项,点击进入
会看到刚才创建的那个MBean,以及它所有的属性和方法
选择Name,它当前值为空
选择下面的SetName,将Name设置为infi
再查看Name的值,发现已经被修改成功
文章参考