一、模型

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

wKiom1VVh6Pz1rVgAADq7NqZn5I264.jpg

点击MBean对象后可以管理对象的属性和方法wKioL1VViZLDDCh5AAGd6gWBKPw685.jpg




测试方法printHello,eclipse控制台打印对应信息

wKioL1VVif_yBtMOAADJHQB4wTo310.jpg


说明:

  • 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