jmx——helloWorld

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

         關於jmx的概述,能夠參考  JMXjava

       JMX(Java Management Extensions,即Java管理擴展)是一個爲應用程序、設備、系統等植入管理功能的框架。JMX能夠跨越一系列異構操做系統平臺、系統體系結構網絡傳輸協議,靈活的開發無縫集成的系統、網絡和服務管理應用。(清空緩存、從新加載配置文件、遠程調用等)瀏覽器

 

問題:應用有配置信息,好比服務的IP地址,端口號,鏈接池等,如何配?緩存

答:

1. 程序初哥通常是寫死在程序裏,到要改變時就去改程序,而後再編譯發佈;
2. 程序熟手則通常把這些信息寫在一個配置文件裏(JAVA通常都是*.properties文件),到要改變時只要改配置文件,但仍是從新啓動系統,以便讀取配置文件裏的新值;
3. 程序好手則會寫一個段代碼,把配置值緩存起來,系統在讀值的時候,先看看配置文件有沒有更動。若有更改則重讀一遍,不然從緩存裏讀取值
4. 程序高手則懂得取物爲我所用,用JMX!把配置屬性集中在一個類,而後寫一個叫MBean的東東,再配置一下就輕鬆搞定了。並且JMX自動提供了一個WEB頁面來給你來改變這些配置信息。tomcat

 

jar包網絡

一、JDK1.三、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(庫)引用中。
二、JDK5.0
  JDK5.0的jre\lib\rt.jar已經包含了jmxri.jar、jmxremote.jar、rmissl.jar三個包的代碼。若是你用到jmxtools.jar、jmxremote_optional.jar的類,則須要將這兩個類加入到classpath或 Eclipse的項目庫引用中。框架

 

訪問 http://maven.ibiblio.org/maven/mule/dependencies/jmxri/jmxtools/1.2/dom

下載jmxtools,配置到工程裏maven

codeide

/**
 * MBean
 * 包含在MBean中方法都將是能夠被管理的。MBean起名是有規範的,就是原類名後加上MBean字樣
 */
public interface HelloWorldMBean {
    void setGreeting(String greeting);
    String getGreeting();
    void printGreeting();

    String status();
    void start();
    void stop();

    void printHello(String message);
}

/**
 * 須要被管理的類(普通類)
 */
public class HelloWorld implements HelloWorldMBean {

    private String greeting = null;

    public HelloWorld(String greeting) {
        this.greeting = greeting;
    }

    public HelloWorld() {
        this.greeting = "Hello World! I am Standard MBean";
    }

    @Override
    public void setGreeting(String greeting) {
        this.greeting = greeting;
        System.out.println("setGreeting : " + this.greeting);
    }

    @Override
    public String getGreeting() {
        System.out.println("getGreeting : " + this.greeting);
        return greeting;
    }

    @Override
    public void printGreeting() {
        System.out.println(greeting);
    }

    @Override
    public String status() {
        return greeting;
    }

    @Override
    public void start() {
        //do nothing
    }

    @Override
    public void stop() {
        //do nothing
    }

    @Override
    public void printHello(String message) {
        System.out.println("hi, " + message);
    }
}

public class HelloAgent {

    public static void main(String[] args) throws Exception {
        // 建立一個MBeanServer做爲MBean容器,設定MBeanServer的域名爲'HelloAgent'
        //MBeanServer mbs = MBeanServerFactory.createMBeanServer("i.love.you");//jconsole看不到
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();//jconsole看獲得
        HelloWorld hello = new HelloWorld();
        /**
         * MBeanServer中註冊的每個在MBean組件都有一個惟一的對象名稱標識ObjectName,一個ObjectName包含兩個部分,
         * 域和屬性鍵值對,格式爲 "domain:type=MBeanName ,如「com.jmx.demo:type=Hello",
         * domain和MBeanName能夠隨意命名
         */
        ObjectName helloName = new ObjectName("HelloAgent:name=helloWorld");
        //註冊MBean
        mbs.registerMBean(hello, helloName);
        // 建立一個HTML適配器AdaptorServer,用來和JMX代理交互,HTML適配器提供了使用Web客戶端侵入JMX代理的方式。AdaptorServer同時做爲MBean註冊在MBeanServer裏
        ObjectName adapterName = new ObjectName("HelloAgent:name=htmlAdapter");
        HtmlAdaptorServer adapter = new HtmlAdaptorServer();
        //adapter.setPort(9092);
        mbs.registerMBean(adapter, adapterName);
        adapter.start();
        //當使用jconsole時,htmlAdaptorServer做用等價於 Thread.sleep(Integer.MAX_VALUE);
        System.out.println("HelloAgent is running");

    }

}

run main

訪問方式 一

瀏覽器訪問 : http://localhost:8082/ ,出現以下:

這種界面和tomcat的控制檯 很相似

在搜索框裏輸入 :  HelloAgent:name=helloWorld ,結果以下

點擊 name=helloWorld

 

修改 1 處的值,點擊 2 ,控制檯會有setter,getter的輸出。

點擊 3 ,控制檯輸出 greeting 的值

 

訪問方式 二

win + r  ----->  cmd  

netstat -ano|findstr 8082   :   尋找佔用8082端口的pid

----->jconsole

意義

在實際系統中咱們能夠把name變成決定數庫連接池的變量,這樣我就能夠對系統的運行參數進行實現的監控和配置(管理)。並且也能夠對一些方法(如printHello)進行遠程調用了。

相關文章
相關標籤/搜索