Java之JMX

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

 

1、JMX簡介java

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

  固然,你也許會專門爲這些管理來開發軟件,但若是你藉助JMX,則會發現建立這樣的管理程序是如此簡單。由於你無需爲管理程序來開發界面,已經有通用的JMX管理軟件,如MC4J,或者是用通常都附帶提供的HTML網頁來管理,你要作的僅僅是將本身要被管理和監控類的按照JMX規範修改一下便可。學習

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

 

2、準備工做   JMX是一份規範,SUN依據這個規範在JDK(1.三、1.四、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版本狀況,談一談開發環境的準備。 一、JDK1.三、1.4   去SUN網站下載SUN的JMX實現,共兩個ZIP文件,下載網址:http://java.sun.com/products/JavaManagement/download.html。 this

(1)jmx-1_2_1-ri.zip    解壓後的lib目錄包含:jmxri.jar、jmxtools.jar spa

(2)jmx_remote-1_0_1_03-ri.zip    解壓後的lib目錄包含:jmxremote.jar、jmxremote_optional.jar、rmissl.jar   若是在DOS下用命令行開發,則把這五個JAR包加入到classpath系統變量中。若是你用Eclipse開發,則把JAR包加入到項目屬性的Libratries(庫)引用中。 .net

二、JDK5.0   JDK5.0的jre\lib\rt.jar已經包含了jmxri.jar、jmxremote.jar、rmissl.jar三個包的代碼。若是你用到jmxtools.jar、jmxremote_optional.jar的類,則須要將這兩個類加入到classpath或 Eclipse的項目庫引用中。 三、我使用的開發環境:JDK5.0 + Eclipse3.2。   注:由於用到jmxtools.jar中的HtmlAdaptorServer類,因此將此包加入到項目庫引用中。jmxremote_optional.jar暫時不用到,無論它。
3、HelloWorld實例 一、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);     
          }
     }          
複製代碼

 

二、要管理Hello則必須建立一個相應MBean,以下:code

複製代碼
/**  * @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字樣。   三、建立一個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名稱均可以任意取。
四、運行HelloAgent,而後打開網頁:http://localhost:8082/ , 單擊「name=HelloWorld」連接進入。

 

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

完!

相關文章
相關標籤/搜索