JMX详解
一、模型
JMX(Java Management
Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架,JMX的核心类是MBean(准确说是接口),用来描述一个可管理的资源
JMX的三层架构图
Probe Level负责资源的检测(获取信息),包含MBeans,通常也叫做Instrumentation Level。
The Agent Level 或者叫做MBean Server(代理服务器) ,是JMX的核心,连接Mbeans和远程监控程序。
Remote Management Level通过connectors和adaptors来远程操作MBean Server。
二、简单实例
1.建立一个需要被JMX管理的类Hello
package bcndly.test.jmx;
public class Hello implements HelloMBean {
private String name;
public String getName() {
return name;
}
public void printHello() {
System.out.println("Hello, " + name);
}
public void printHello(String theName) {
System.out.println("Hello, " + theName);
}
public void setName(String name) {
this.name = name;
}
}
2.建立Hello类的MBean接口
接口名必须是要管理的类名+MBean,接口定义了要暴露的属性和方法
package bcndly.test.jmx;
public interface HelloMBean {
public String getName();
public void setName(String name);
public void printHello();
public void printHello(String theName);
}
3.创建一个Agent类
Java代码
package bcndly.test.jmx;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import com.sun.jdmk.comm.HtmlAdaptorServer;
public class HelloAgent {
public static void main(String[] args) throws Exception {
MBeanServer server = MBeanServerFactory.createMBeanServer();
ObjectName helloName = new ObjectName("bcndyl:name=HelloWorld");
server.registerMBean(new Hello(), helloName);
ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter");
HtmlAdaptorServer adapter = new HtmlAdaptorServer();
adapter.setPort(8091);
server.registerMBean(adapter, adapterName);
adapter.start();
System.out.println("start.....");
}
}
首先获得MBean Server,之后便可将需要管理的MBean注册到MBean Server中,注册MBean需要定义其对象名称,对象名称类型为ObjectName,这里对象名称必须由域名加一个或多个键值对组成,这里bcndyl为域名,后面的即为键值对。最后我们让线程保持睡眠,以便可以让Manager连接过来管理暴露的MBean。
4.管理MBean
运行HelloAgent,打开IE输入http://localhost:8091就可以看到注册的MBean
测试方法printHello,eclipse控制台打印对应信息
说明:
HtmlAdaptorServer在jmxtools.jar包中
MBeanServer是一个包含所有注册MBean的仓库.它是JMX代理层的核心.JMX1.0规范提供一个接口叫 javax.management.MBeanServer. 所有管理的在MBean操作通过MBeanServer执行.使用MBeanServer实例,你能够管理所有MBean.每一个MBean具有一个唯一标志,叫ObjectName.
ObjectName (javax.management.ObjectName)是一个类,唯一标志一个在MBeanServer的MBean.这个对象名称用于管理应用程序来标志MBean以便操作能够在适当的MBean上被调用.
AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面。AdaptorServer其实也是一个MBean
本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1651588
上一篇: logstash详解