Java Management Extensions,Java管理扩展.通过JMX可以轻松地为应用程序添加管理功能,即可以在尽可能少的改变原有系统的代码基础上实现对原系统的管理。
MBean(被管理的对象?)注册到MBeanServer,通过一种类似“web服务”的方式公布出去,并且伴有一个名字,可以通过该名字找到该MBean。
Hello是一个需要被管理的类(普通类):
public class Hello implements HelloMBean {
private String name;
@Override
public String getName() {
// TODO Auto-generated method stub
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void printHello() {
System.out.println("hello world"+name);
}
@Override
public void printHello(String whoName) {
System.out.println("hello "+whoName);
}
}
要管理Hello则必须创建一个相应MBean,如下:
public interface HelloMBean {
public String getName();
public void setName(String name);
public void printHello();
public void printHello(String whoName);
}
说明:包含在MBean中方法都将是可以被管理的。MBean起名是有规范的,就是原类名后加上MBean字样。
创建一个Agent类
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;
import com.sun.jdmk.comm.HtmlAdaptorServer;
public class HelloAgent {
/**
* @param args
* @throws NullPointerException
* @throws MalformedObjectNameException
* @throws NotCompliantMBeanException
* @throws MBeanRegistrationException
* @throws InstanceAlreadyExistsException
*/
public static void main(String[] args) throws MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException {
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName helloname = new ObjectName("lizhipeng:name=HelloWorld");
server.registerMBean(new Hello(), helloname); //将Hello这个类注入到MBeanServer中,注入需要创建一个ObjectName类
ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");
HtmlAdaptorServer adapter = new HtmlAdaptorServer();//创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面。AdaptorServer其实也是一个MBean。
server.registerMBean(adapter, adapterName);
adapter.start();
System.out.println("start.....");
}
}
打开网页:http://localhost:8082/ 点击如下图:
在属性name中输入值,点击apply:
点击
eclipse控制塔输出:hello world111111111
JMX到底是啥能做啥,做到这也不太明白。大概是:
目的:管理一个类 能知道类的属性,方法。可以修改属性(如果有setter方法),可以执行方法。
怎么做:建立该类的Mbean,建立Agent类,在这里创建MBeanServer的把Mbean注入到MBeanServer。然后创建一个AdaptorServer,这个类将决定MBean的管理界面。
注意:使用HtmlAdaptorServer 需要jdmkrt.jar