日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JMX的Hello World

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JMX的Hello World 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

一、JMX簡介

  什么是JMX?在一篇網文中是這樣說的:"JMX(Java Management Extensions)是一個為應用程序植入管理功能的框架。JMX是一套標準的代理和服務,實際上,用戶可以在任何Java應用程序中使用這些代理和服務實現管理",這句話我現在看著還是不知所云,云里霧里。

  我們還是從JMX能給我們提供什么好處入手來理解吧。舉一個應用實例:在一個系統中常常會有一些配置信息,比如服務的IP地址,端口號什么的,那么如何來寫這些代碼呢?

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

二、準備工作


  JMX是一份規范,SUN依據這個規范在JDK(1.3、1.4、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版本情況,談一談開發環境的準備。
1、JDK1.3、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(庫)引用中。
2、JDK5.0
  JDK5.0的jre\lib\rt.jar已經包含了jmxri.jar、jmxremote.jar、rmissl.jar三個包的代碼。如果你用到jmxtools.jar、jmxremote_optional.jar的類,則需要將這兩個類加入到classpath或 Eclipse的項目庫引用中。
3、我使用的開發環境:JDK5.0 + Eclipse3.2。
  注:因為用到jmxtools.jar中的HtmlAdaptorServer類,所以將此包加入到項目庫引用中。jmxremote_optional.jar暫時不用到,不管它。

三、HelloWorld實例
1、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);
??? }
}?? ??? ??? ??? ??? ??? ??? ??? ?


2、要管理Hello則必須創建一個相應MBean,如下:


/**
?* @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字樣。
 
3、創建一個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名稱都可以任意取。

4、運行HelloAgent,然后打開網頁:http://localhost:8082/
??? 單擊“name=HelloWorld”鏈接進入
? ?

五、總結

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

總結

以上是生活随笔為你收集整理的JMX的Hello World的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。