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)進行遠程調用了。