0
点赞
收藏
分享

微信扫一扫

JMX - Hello World示例demo

_karen 2023-06-27 阅读 90


JMX是一份规范,SUN依据这个规范在JDK提供了JMX接口。而根据这个接口的实现有很多种,比如Weblogic的JMX实现、MX4J、JBoss的JMX实现。在SUN自己也实现了一份,JDK5.0后就内嵌了进来,安装JDK5.0就可以开发基于JMX的代码了。

 

但JDK5.0并非包含所有SUN的关于JMX的代码,有一些工具类是排除在JDK5.0之外的。下面根据所使用的JDK1.6版本情况,谈一谈开发环境和示例。

 

环境准备

JDK1.6 + jmxtools.jar 

 

示例

//要管理Hello则必须创建一个相应MBean,如下

说明:包含在MBean中方法都将是可以被管理的。MBean起名是有规范的,就是原类名后加上MBean字样

public interface HelloMBean {
	public String getName();
	public void setName(String name);
	public void printHello();
	public void printHello(String whoName);
}

 //Hello是一个需要被管理的类(普通类)

 

public class Hello implements HelloMBean{
	private String name;
	public String getName() {
		// TODO Auto-generated method stub
		return this.name;
	}

	public void setName(String name) {
		// TODO Auto-generated method stub
		this.name = name;
	}

	public void printHello() {
		// TODO Auto-generated method stub
		System.out.println("Hello World, " + getName());
	}

	public void printHello(String whoName) {
		// TODO Auto-generated method stub
		System.out.println("Hello, " + whoName);
	}
	
}

 

import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;

import com.sun.jdmk.comm.HtmlAdaptorServer;

public class HelloAgent {
	public static void main(String args[]) {
		
		MBeanServer server = MBeanServerFactory.createMBeanServer();
		try {
			ObjectName helloName = new ObjectName("wgyang:name=HelloWorld");
			server.registerMBean(new Hello(), helloName);
			
			ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");
			HtmlAdaptorServer adaptor = new HtmlAdaptorServer();
			server.registerMBean(adaptor, adapterName);
			adaptor.start();
			
		} catch (MalformedObjectNameException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NullPointerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstanceAlreadyExistsException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MBeanRegistrationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NotCompliantMBeanException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

 

说明:     
* 先创建了一个MBeanServer,用来做MBean的容器
* 将Hello这个类注入到MBeanServer中,注入需要创建一个ObjectName类      
* 创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面。AdaptorServer其实也是一个MBean。      
* chengang:name=HelloWorld的名字是有一定规则的,格式为:“域名:name=MBean名称”,域名和MBean名称都可以任意取。

 

运行

 

运行HelloAgent,然后打开网页:http://localhost:8082/,单击“name=HelloWorld”链接进入 

 

总结

在实际系统中我们可以把name变成决定数库链接池的变量,这样我就可以对系统的运行参数进行实现的监控和配置(管理)。而且也可以对一些方法(如printHello)进行远程调用了

 

举报

相关推荐

0 条评论