首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JMX 入門實作:Standard MBean HelloWorld 完整範例

     編輯:Java 相關知識

前言

Java Management Extensions (JMX) 提供標準化的管理與監控介面。本文透過一個最簡單的 Standard MBean 範例,示範如何註冊 MBean、操作屬性與方法,並啟動 HTML Adaptor 在瀏覽器中進行遠端管理。

一、架構概覽

範例包含三個核心類別:

  • StandBeanMBean:管理介面,定義屬性 State 與操作 startService()。
  • StandBean:MBean 實作類別。
  • StardBeanDemoMain:Agent 端,負責建立 MBeanServer、註冊 MBean 與 HTML Adaptor。

二、程式碼實作

1. MBean 介面 StandBeanMBean.java

public interface StandBeanMBean {
    public String getState();
    public void setState(String s);
    public void startService();
}

2. MBean 實作 StandBean.java

public class StandBean implements StandBeanMBean {
    private String state = "init value";

    public String getState() { return state; }
    public void setState(String s) { state = s; }

    public void startService() {
        System.out.println("My service start.....");
    }
}

3. Agent 主程式 StardBeanDemoMain.java

import javax.management.*;
import javax.management.remote.*;
import com.sun.jdmk.comm.HtmlAdaptorServer;

public class StardBeanDemoMain {
    private MBeanServer mBserver = null;
    private ObjectName mbeanObjectName = null;
    private String domain = null;
    private String mbeanName = "StandBean";

    public static void main(String[] args) {
        StardBeanDemoMain sbean = new StardBeanDemoMain();
        sbean.doRegistBean();   // 1. 建立 MBeanServer 並註冊 MBean
        sbean.doManageBean();   // 2. 示範屬性讀寫與方法呼叫
        sbean.regHtmlAdaptor(); // 3. 註冊 HTML Adaptor (port 8082)
    }

    /** 建立 MBeanServer 並註冊 MBean */
    private void doRegistBean() {
        try {
            mBserver = MBeanServerFactory.createMBeanServer();
            domain = mBserver.getDefaultDomain();

            mbeanObjectName = new ObjectName(domain + ":type=" + mbeanName);
            StandBean bean = new StandBean();
            mBserver.registerMBean(bean, mbeanObjectName);
            System.out.println("register StandMbean sucess..");
        } catch (Exception e) {
            e.printStackTrace(); System.exit(1);
        }
    }

    /** 示範透過 MBeanServer 管理 MBean */
    private void doManageBean() {
        try {
            ObjectName name = new ObjectName(domain + ":type=" + mbeanName);
            // 讀取屬性
            System.out.println("Attribute:state -" + mBserver.getAttribute(name, "State"));
            // 修改屬性
            Attribute attr = new Attribute("State", "new state");
            mBserver.setAttribute(name, attr);
            System.out.println("Attribute:state 2 -" + mBserver.getAttribute(name, "State"));
            // 呼叫方法
            mBserver.invoke(name, "startService", null, null);
        } catch (Exception e) { e.printStackTrace(); }
    }

    /** 註冊 HTML Adaptor,提供瀏覽器管理介面 */
    private void regHtmlAdaptor() {
        HtmlAdaptorServer html = new HtmlAdaptorServer();
        try {
            ObjectName htmlName = new ObjectName("Adaptor:name=html,port=8082");
            mBserver.registerMBean(html, htmlName);
            html.start(); // 啟動 HTTP 服務
            System.out.println("HTML Adaptor started on port 8082");
        } catch (Exception e) {
            System.out.println("\t!!! Could not create the HTML adaptor !!!");
            e.printStackTrace();
        }
    }
}

三、執行與驗證

  1. 確保類別路徑包含 jdmkrt.jar (Sun JMX 參考實作附帶的 HTML Adaptor)。
  2. 執行 StardBeanDemoMain,Console 輸出:
register StandMbean sucess..
Attribute:state -init value
Attribute:state 2 -new state
My service start.....
HTML Adaptor started on port 8082
  1. 瀏覽器開啟 https://localhost:8082,即可看到 JMX HTML Adaptor 管理介面。
  2. 在 MBean 清單中找到 domain:type=StandBean,點擊進入。
  3. 於 List of MBean Operations 區域按下 startService 按鈕,Console 再次印出 My service start.....,證明遠端呼叫成功。

四、關鍵點總結

  • Standard MBean 命名慣例:介面名 = 實作類別名 + MBean 後綴。
  • MBeanServerFactory.createMBeanServer() 取得預設 MBeanServer。
  • ObjectName 格式:domain:key=value[,key=value]*,唯一識別一個 MBean。
  • HTML Adaptor 屬於 Sun 專屬實作,生產環境建議使用 JMX Remote API (RMI/SSL) 或第三方監控工具 (如 JConsole, VisualVM)。

延伸閱讀

進階主題包括:Dynamic MBean、Model MBean、Open MBean、Notification 機制、JMX Remote API (JSR 160) 等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved