版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
MBean就是一个普通的Java对象,由属性、操作和通知组成,不同的是它必须遵从JMX规范定义的模式。
规范定义一个MBean由一个类和一个接口组成,且接口名由类名和后缀MBean组成,如Somthing SomthingMBean,接口中定义的方法即为MBean的属性和操作,符合getter和setter规范的方法为MBean的属性,除此之外的方法为MBean的操作。
举例说明MBean的实现
接口定义
package com.example;
public interface HelloMBean {
public void sayHello();
public int add(int x, int y);
public String getName();
public int getCacheSize();
public void setCacheSize(int size);
}
- HelloMbean定义的方法有:sayHello add
- HelloMbean定义的属性为:Name CacheSize。Name为只读属性;CacheSize即可读也可写。
类定义
package com.example;
public class Hello implements HelloMBean {
public void sayHello() {
System.out.println("hello, world");
}
public int add(int x, int y) {
return x + y;
}
public String getName() {
return this.name;
}
public int getCacheSize() {
return this.cacheSize;
}
public synchronized void setCacheSize(int size) {
...
this.cacheSize = size;
System.out.println("Cache size now " + this.cacheSize);
}
...
private final String name = "Reginald";
private int cacheSize = DEFAULT_CACHE_SIZE;
private static final int
DEFAULT_CACHE_SIZE = 200;
}
注册MBean
JMX开发主要任务就是现实MBean,然后注册到MBean Server中。因此,首先要拿到MBean Server才行。通过ManagementFactory.getPlatformMBeanServer()方法可以拿到MBean Server。
package com.example;
import java.lang.management.*;
import javax.management.*;
public class Main {
public static void main(String[] args)
throws Exception {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName("com.example:type=Hello");
Hello mbean = new Hello();
mbs.registerMBean(mbean, name);
...
System.out.println("Waiting forever...");
Thread.sleep(Long.MAX_VALUE);
}
}
- 通过调用getPlatformMBeanServer()方法获取,如果已经存在MBean Server,则直接返回现成的;否则创建一个。说白了就是一个单例模式。
- 每一个MBean实例都由一个ObjectName名称唯一标识,ObjectName需要遵循JMX规范,即名称必须由一个域和一组Key-Value组成。
验证
- 把我们编写的程序打包,然后在命令窗口中执行,如下:
- 打开jmc.exe(在JAVA的安装目录bin下),然后连接到该程序,在MBean浏览器中可以看到属性和操作
- 执行sayHello操作,在命令窗口中打印出了"hello, world"
知识链
备注
- 本文程序片段从Java Platform Standard Edition 8 Documentation文档中摘录
参考
- Java Platform Standard Edition 8 Documentation