1. 程式人生 > >JMX學習詳解

JMX學習詳解

-s agen 技術 操作 三層架構 out javax optional 配置

一、概述:

  JMX(Java Management Extensions,即Java管理擴展)是一個為應用程序、設備、系統等植入管理功能的框架。

  JMX的核心類是MBean(準確說是接口),用來描述一個可管理的資源。

二、作用:

  試想你開發了一個軟件(如WEB網站),它是在24小時不間斷運行的,那麽你可能會想要“監控”這個軟件的運行情況,比如收到了多少數據,

  有多少人登錄等等。或者你又想“配置”這個軟件,比如現在訪問人數比較多,你想把數據連接池設置得大一些。

  

  你也許會專門為這些管理來開發軟件,但如果你借助JMX,則會發現創建這樣的管理程序是如此簡單。因為你無需為管理程序來開發界面,

  已經有通用的JMX管理軟件,如MC4J,或者是用一般都附帶提供的HTML網頁來管理,你要做的僅僅是將自己要被管理和監控類的按照

JMX規範修改一下即可。

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

三、模型:

  JMX的三層架構圖:

    技術分享

  

  Probe Level負責資源的檢測(獲取信息),包含MBeans,通常也叫做Instrumentation Level。

  The Agent Level 或者叫做MBean Server(代理服務器) ,是JMX的核心,連接Mbeans和遠程監控程序。

  Remote Management Level通過connectors和adaptors來遠程操作MBean Server。

四、簡單實例:

  開發前註意:

    JDK已經集成了 jmxri.jar、jmxremote.jar、rmissl.jar三個包的代碼

    根據項目需要可引入 jmxtools.jar(HtmlAdaptorServer類需引入)、jmxremote_optional.jar(暫時沒有用到)

  1.建立被管理Hello類的MBean接口(接口名必須是要管理的類名+MBean,接口定義了要暴露的屬性和方法)

   java代碼:  

    package cn.ac.aure;

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

  2.建立一個需要被JMX管理的類Hello

   java代碼:

package cn.ac.aure;

public class Hello implements HelloMBean{

    private String name;
    @Override
    public String getName() {
        return this.name;
    }
    @Override
    public String setName(String name) {
        return this.name = name;
    }
    @Override
    public void printHello() {
        System.out.println("hello," + this.name);
    }
    @Override
    public void printHello(String theName) {
        System.out.println("hello," + theName);
    }
}

  3.創建一個Agent類

   java代碼:

package cn.ac.aure;

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("hello:name=HelloAgent");
        server.registerMBean(new Hello(), helloName);
        
        HtmlAdaptorServer adaptor = new HtmlAdaptorServer();
        ObjectName adaptorName = new ObjectName("adapator:name=HtmlAdaptor");
        adaptor.setPort(9097);
        server.registerMBean(adaptor, adaptorName);
        adaptor.start();
        System.out.println("jmx is start......");
    }
}

  首先獲得MBean Server,之後便可將需要管理的MBean註冊到MBean Server中,註冊MBean需要定義其對象名稱,

  對象名稱類型為ObjectName,這裏對象名稱必須由域名加一個或多個鍵值對組成,這裏bcndyl為域名,後面的即為鍵

  值對。最後我們讓線程保持睡眠,以便可以讓Manager連接過來管理暴露的MBean。

  4.管理MBean:

    4.1 運行HelloAgent,打開IE輸入http://localhost:9097就可以看到註冊的MBean

     技術分享

   4.2 點擊MBean對象後可以管理對象的屬性和方法

     技術分享

     按上圖操作:在eclipse的控制臺依次打印

       hello,lcs

       hello,chris

  5.說明:

    5.1 HtmlAdaptorServer在jmxtools.jar包中

    5.2 MBeanServer是一個包含所有註冊MBean的倉庫.它是JMX代理層的核心.JMX1.0規範提供一個接口叫 javax.management.MBeanServer.

      所有管理的在MBean操作通過MBeanServer執行.使用MBeanServer實例,你能夠管理所有MBean.每一個MBean具有一個唯一標誌,叫ObjectName.

    5.3 ObjectName (javax.management.ObjectName)是一個類,唯一標誌一個在MBeanServer的MBean.

      這個對象名稱用於管理應用程序來標誌MBean以便操作能夠在適當的MBean上被調用.

    5.4 AdaptorServer,這個類將決定MBean的管理界面,這裏用最普通的Html型界面。AdaptorServer其實也是一個MBean

五、出處:

  文件主要是轉載於他處:

  1.本文出自 “點滴積累” 博客,請務必保留此出處http://tianxingzhe.blog.51cto.com/3390077/1651588

  2.本文出自ghost丶桃子博客,請務必保留此出處https://yq.aliyun.com/articles/48801?spm=5176.100240.searchblog.45.zrkjb6

  

  

  

JMX學習詳解