一、概念
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
Java代码
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,接口定义了要暴露的属性和方法
Java代码
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
点击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
时间: 2024-09-21 18:32:56