Java JMX

轉:http://www.cnblogs.com/itech/archive/2010/09/16/1827999.html


[動態修改程序的配置的思想值得學習!] 

 

一、JMX簡介

  JMX是一種JAVA的正式規範,它主要目的是讓程序有被管理的功能,那麼怎麼理解所謂的“被管理”呢?試想你開發了一個軟件(如WEB網站),它是在24小時不間斷運行的,那麼你可能會想要“監控”這個軟件的運行情況,比如收到了多少數據,有多少人登錄等等。或者你又想“配置”這個軟件,比如現在訪問人數比較多,你想把數據連接池設置得大一些。

  當然,你也許會專門爲這些管理來開發軟件,但如果你藉助JMX,則會發現創建這樣的管理程序是如此簡單。因爲你無需爲管理程序來開發界面,已經有通用的JMX管理軟件,如MC4J,或者是用一般都附帶提供的HTML網頁來管理,你要做的僅僅是將自己要被管理和監控類的按照JMX規範修改一下即可。

  中間件軟件WebLogic的管理頁面就是基於JMX開發的,而JBoss則整個系統都基於JMX構架。

 

二、準備工作
  JMX是一份規範,SUN依據這個規範在JDK(1.3、1.4、5.0)提供了JMX接口。而根據這個接口的實現則有很多種,比如Weblogic的JMX實現、MX4J、JBoss的JMX實現。在SUN自己也實現了一份,不過在JDK1.4之前,這件JMX實現(一些JAR包)是可選的,你得去它的網站上下載。JDK5.0則內嵌了進來,安裝JDK5.0就可以開發基於JMX的代碼了。
  但JDK5.0並非包含所有SUN的關於JMX的代碼,有一些工具類是排除在JDK5.0之外的。下面根據所使用的JDK版本情況,談一談開發環境的準備。
1、JDK1.3、1.4
  去SUN網站下載SUN的JMX實現,共兩個ZIP文件,下載網址:http://java.sun.com/products/JavaManagement/download.html。
(1)jmx-1_2_1-ri.zip
   解壓後的lib目錄包含:jmxri.jar、jmxtools.jar
(2)jmx_remote-1_0_1_03-ri.zip
   解壓後的lib目錄包含:jmxremote.jar、jmxremote_optional.jar、rmissl.jar
  如果在DOS下用命令行開發,則把這五個JAR包加入到classpath系統變量中。如果你用Eclipse開發,則把JAR包加入到項目屬性的Libratries(庫)引用中。
2、JDK5.0
  JDK5.0的jre\lib\rt.jar已經包含了jmxri.jar、jmxremote.jar、rmissl.jar三個包的代碼。如果你用到jmxtools.jar、jmxremote_optional.jar的類,則需要將這兩個類加入到classpath或 Eclipse的項目庫引用中。
3、我使用的開發環境:JDK5.0 + Eclipse3.2。
  注:因爲用到jmxtools.jar中的HtmlAdaptorServer類,所以將此包加入到項目庫引用中。jmxremote_optional.jar暫時不用到,不管它。

三、HelloWorld實例
1、Hello是一個需要被管理的類(普通類)

複製代碼
/**
 * 
@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);
    }
}          
複製代碼

 


2、要管理Hello則必須創建一個相應MBean,如下:

複製代碼
/**
 * 
@author ChenGang 2005-12-3
 
*/
public interface HelloMBean {
    
public String getName();
    
public void setName(String name);
    
public void printHello();
    
public void printHello(String whoName);

複製代碼

 

                 
說明:包含在MBean中方法都將是可以被管理的。MBean起名是有規範的,就是原類名後加上MBean字樣。
 
3、創建一個Agent類

 

複製代碼
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.....");

    }

複製代碼

 


說明:

    * 先創建了一個MBeanServer,用來做MBean的容器
    * 將Hello這個類注入到MBeanServer中,注入需要創建一個ObjectName類
    * 創建一個AdaptorServer,這個類將決定MBean的管理界面,這裏用最普通的Html型界面。AdaptorServer其實也是一個MBean。
    * chengang:name=HelloWorld的名字是有一定規則的,格式爲:“域名:name=MBean名稱”,域名和MBean名稱都可以任意取。

4、運行HelloAgent,然後打開網頁:http://localhost:8082/ , 單擊“name=HelloWorld”鏈接進入。

 

轉自:http://www.blogjava.net/hengheng123456789/articles/65690.html

完!


發佈了5 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章