JMX (Java Management Extensions) 提供工具管理本地/遠端應用程式、系統物件、裝置。本文解釋如何使用 JMX (JSR 160) 遠端控制 Web 應用,展示應用程式中可供 JMX Client 使用的代碼,並示範 MC4J、jManage 等 Client 如何連線至支援 JMX 的應用。深入討論使用 RMI 協定與 JNDI 保護通訊層。
ant war 建立 WAR 檔。jmxapp.war 複製至 Tomcat webapps 目錄。https://localhost:8080/jmxapp。hello、密碼 world)即就緒。需求:J2SE 5.0 SDK、支援 Servlet 容器 (Tomcat 5.5.12)、Apache Ant。
應用使用 Struts 處理登入表單。LoginAction.execute() 驗證帳密,成功導向 login_success.jsp,失敗返回表單。根據結果呼叫 incrementSuccessLogins() 或 incrementFailedLogins(),將計數儲存在 ServletContext 屬性中。
定義 LoginStatsMBean 介面暴露兩個方法:
public interface LoginStatsMBean {
public int getFailedLogins();
public int getSuccessLogins();
}
實作類別 LoginStats 從 ServletContext 讀取計數值。
JMXAgent 類別職責:
MBeanServerLoginStatsMBeanJMXConnector 允許遠端連線(含 JNDI、RMI Registry)JMXConnectorMBeanServer server = MBeanServerFactory.createMBeanServer(DOMAIN);
server.registerMBean(new LoginStats(), new ObjectName(DOMAIN + ":name=LoginStats"));
JMXServiceURL url = new JMXServiceURL("rmi", null,
Constants.MBEAN_SERVER_PORT,
"/jndi/rmi://localhost:" + Constants.RMI_REGISTRY_PORT + "/jmxapp");
參數:協定、主機、連接埠、URL 路徑(含 JNDI 查詢指示、RMI Registry 位置、服務名稱)。產生的連線字串如:service:jmx:rmi://zarar:9589/jndi/rmi://localhost:1100/jmxapp。
建立文字檔儲存帳密(每行:username password)。在 Map 中設定 jmx.remote.x.password.file 指向此檔案,傳給 JMXConnectorServerFactory:
Map<String, String> env = new HashMap<>();
env.put("jmx.remote.x.password.file", userFile);
connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(url, env, server);
透過 connectorServer.start() / stop() 控制服務。
程式化啟動:
registry = LocateRegistry.createRegistry(Constants.RMI_REGISTRY_PORT);
停止時:
UnicastRemoteObject.unexportObject(registry, true);
由 StartupListener 觸發應用啟動/結束任務。
jmxapp.war 至 Tomcat。LoginStats MBean 的 Properties,即可看到統計數值。

jmxapp2)。

您已學會讓新舊 Web 應用支援 JMX 並安全管理,使用 MC4J 與 jManage。J2SE 5.0 提供強健的 JMX 實作,開源專案如 XMOJO、MX4J 提供額外功能(如 Web 介面連線)。進階閱讀推薦:J. Steven Perry 《Java Management Extensions》、Jeff Hanson 《Connecting JMX Clients and Servers》。