java中的MBean

一、MBean是什么

  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即可。

四、利用jconsole调试

打开Java自带的调试工具jconsole,连接到该进程中,会看到有一个MBean的选项,点击进入

java中的MBean

会看到刚才创建的那个MBean,以及它所有的属性和方法

java中的MBean

选择Name,它当前值为空

java中的MBean

选择下面的SetName,将Name设置为infi

java中的MBean

java中的MBean

再查看Name的值,发现已经被修改成功

java中的MBean

文章参考

上一篇:Let's Encrypt 将撤销约 200 万个 HTTPS 证书


下一篇:互联网大厂java面试题一美团