package com.fanshadoop;
/**
*
* standard MBean是通过接口定义的,且接口名称的后缀为"MBean"
* 1)get方法定义了MBean的成员变量是可读权限
* 2)set方法定义了MBean的成员变量是可写权限
*/
public interface HelloWorldMBean {
public void setGreeting( String greeting );
public String getGreeting();
public void printGreeting();
}
package com.fanshadoop;
public class HelloWorld implements HelloWorldMBean {
private String greeting = null;
public HelloWorld() {
this.greeting = "Hello World! I am a Standard MBean";
}
public HelloWorld(String greeting) {
this.greeting = greeting;
}
public void setGreeting(String greeting) {
this.greeting = greeting;
}
public String getGreeting() {
return greeting;
}
public void printGreeting() {
System.out.println(greeting);
}
}
package com.fanshadoop;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import com.sun.jdmk.comm.HtmlAdaptorServer;
/**
* JMX agents是JMX代理层中的组件,是MBean的容器
* 1)创建了MBeanServer,MBean的容器
* 2)创建了HTML适配器,处理来自HTML客户端的链接
* 3)注册HelloWorld的实例
*/
public class HelloAgent {
private MBeanServer mbs = null;
public HelloAgent() {
/*
* MBean server是一个用来包含和管理JMX MBean的Java对象,
* MBean server是一个标准的JMX类,它是JMX agents的核心。
* MBeanServerFactory可以管理多个MBeanSever实例
* 这里createMBeanServer方法的参数为一组MBean的domain,domain唯一区分其他的MBean server
* 如果HelloAgent已经存在,则会已经创建的MBeansever
*/
mbs = MBeanServerFactory.createMBeanServer("HelloAgent");
/*
*agent通过构造协议适配器和连接器,向管理application开放MBean
*/
HtmlAdaptorServer adapter = new HtmlAdaptorServer();
HelloWorld hw = new HelloWorld();
/*
* ObjectName类为MBean提供了一个命名空间,它由两部分组成
* 1)domain name(与MBean server的domain一致)
* 2)key=value属性列表,用来标识MBean,为MBean提供信息
* 可以提供诸如name,port,location和purpose等属性,属性以逗号分割,且key=value属性列表是唯一的
*/
ObjectName adapterName = null;
ObjectName helloWorldName = null;
try {
helloWorldName = new ObjectName("HelloAgent:name=helloWorld1");
mbs.registerMBean(hw, helloWorldName);
adapterName = new ObjectName(
"HelloAgent:name=htmladapter,port=9092");
adapter.setPort( 9092 );
mbs.registerMBean( adapter, adapterName );
adapter.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
System.out.println("HelloAgent is running");
HelloAgent agent = new HelloAgent();
}
}