[JMX一步步來] 1、JMX的Hello World
一、JMX簡(jiǎn)介
什么是JMX?在一篇網(wǎng)文中是這樣說的:"JMX(Java Management Extensions)是一個(gè)為應(yīng)用程序植入管理功能的框架。JMX是一套標(biāo)準(zhǔn)的代理和服務(wù),實(shí)際上,用戶可以在任何Java應(yīng)用程序中使用這些代理和服務(wù)實(shí)現(xiàn)管理",這句話我現(xiàn)在看著還是不知所云,云里霧里。
我們還是從JMX能給我們提供什么好處入手來理解吧。舉一個(gè)應(yīng)用實(shí)例:在一個(gè)系統(tǒng)中常常會(huì)有一些配置信息,比如服務(wù)的IP地址,端口號(hào)什么的,那么如何來寫這些代碼呢?
- 程序初哥一般是寫死在程序里,到要改變時(shí)就去改程序,然后再編譯發(fā)布;
- 程序熟手則一般把這些信息寫在一個(gè)配置文件里(JAVA一般都是*.properties文件),到要改變時(shí)只要改配置文件,但還是重新啟動(dòng)系統(tǒng),以便讀取配置文件里的新值;
- 程序好手則會(huì)寫一個(gè)段代碼,把配置值緩存起來,系統(tǒng)在讀值的時(shí)候,先看看配置文件有沒有更動(dòng)。如有更改則重讀一遍,否則從緩存里讀取值
- 程序高手則懂得取物為我所用,用JMX!把配置屬性集中在一個(gè)類,然后寫一個(gè)叫MBean的東東,再配置一下就輕松搞定了。而且JMX自動(dòng)提供了一個(gè)WEB頁(yè)面來給你來改變這些配置信息。
二、準(zhǔn)備工作
JMX是一份規(guī)范,SUN依據(jù)這個(gè)規(guī)范在JDK(1.3、1.4、5.0)提供了JMX接口。而根據(jù)這個(gè)接口的實(shí)現(xiàn)則有很多種,比如Weblogic的JMX實(shí)現(xiàn)、MX4J、JBoss的JMX實(shí)現(xiàn)。在SUN自己也實(shí)現(xiàn)了一份,不過在JDK1.4之前,這件JMX實(shí)現(xiàn)(一些JAR包)是可選的,你得去它的網(wǎng)站上下載。JDK5.0則內(nèi)嵌了進(jìn)來,安裝JDK5.0就可以開發(fā)基于JMX的代碼了。
三、HelloWorld實(shí)例
/**
* @author ChenGang 2005-12-3
*/
public class Hello implements HelloMBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void printHello() {
System.out.println("Hello World, " + name);
}
public void printHello(String whoName) {
System.out.println("Hello , " + whoName);
}
}
/**
* @author ChenGang 2005-12-3
*/
public interface HelloMBean {
public String getName();
public void setName(String name);
public void printHello();
public void printHello(String whoName);
}
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("chengang:name=HelloWorld");
server.registerMBean(new Hello(), helloName);
ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");
HtmlAdaptorServer adapter = new HtmlAdaptorServer();
server.registerMBean(adapter, adapterName);
adapter.start();
System.out.println("start.....");
}
}
- 先創(chuàng)建了一個(gè)MBeanServer,用來做MBean的容器
- 將Hello這個(gè)類注入到MBeanServer中,注入需要?jiǎng)?chuàng)建一個(gè)ObjectName類
- 創(chuàng)建一個(gè)AdaptorServer,這個(gè)類將決定MBean的管理界面,這里用最普通的Html型界面。AdaptorServer其實(shí)也是一個(gè)MBean。
- chengang:name=HelloWorld的名字是有一定規(guī)則的,格式為:“域名:name=MBean名稱”,域名和MBean名稱都可以任意取。


依照下面紅線的步驟操作之后,在控制臺(tái)(我用Eclipse就是console視圖)得到如下輸出:
五、總結(jié)
在實(shí)際系統(tǒng)中我們可以把name變成決定數(shù)庫(kù)鏈接池的變量,這樣我就可以對(duì)系統(tǒng)的運(yùn)行參數(shù)進(jìn)行實(shí)現(xiàn)的監(jiān)控和配置(管理)。而且也可以對(duì)一些方法(如printHello)進(jìn)行遠(yuǎn)程調(diào)用了。
預(yù)告:下一篇將對(duì)JMX進(jìn)行一些介紹,借助本篇的HelloWorld實(shí)例來灌輸一些概念。
作者簡(jiǎn)介
陳剛,廣西桂林人,著作有《Eclipse從入門到精通》
您可以通過其博客了解更多信息和文章:http://www.chenGang.com.cn
posted on 2006-03-07 14:29 陳剛 閱讀(24863) 評(píng)論(7) 編輯 收藏 所屬分類: JMX