前面所有看效果都是通過Html網(wǎng)頁來看的。JDK5.0自帶了一個(gè)jmx客戶端,叫jconsole,位于c:\jdk\bin\jconsole.exe。我們來用用這個(gè)客戶端來連接Mbean Server。
一、vm參數(shù)方式
1、還是用第一篇的那個(gè)HelloAgent,修改HelloAgent,將第一句:
MBeanServer server = MBeanServerFactory.createMBeanServer();
改為:MBeanServer server = ManagementFactory.getPlatformMBeanServer();
注:ManagementFactory的全路徑為:java.lang.management.ManagementFactory
2、修改Eclipse的run選項(xiàng),把“-Dcom.sun.management.jmxremote=HelloAgent”這一句加入到run選項(xiàng)中
3、運(yùn)行HelloAgent,然后在Dos窗口輸入“jconsole”來啟到JConsole
4、單擊“連接”
二、RMI方式
還是用jconsole,但方式變了。這里不需要象上面那樣修改Eclipse run的vm選項(xiàng)。
1、還是用第一篇的HelloAgent,加上一段代碼,啟動(dòng)一個(gè)JMXConnectorServer服務(wù)
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
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");
??????? Hello hello = new Hello();
??????? server.registerMBean(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.....");
??????? // Create an RMI connector and start it
??????? JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
??????? JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);
??????? cs.start();
??????? System.out.println("rmi start.....");
??? }
}
?
2、在Dos運(yùn)行一個(gè)命令:rmiregistry 9999
?
3、運(yùn)行HelloAgent,然后再在dos下運(yùn)行命令jconsole
輸入service:jmx:rmi:///jndi/rmi://localhost:9999/server
三、總結(jié)
連接MBeanServer的方式除了Html、JConsole,還有一些第三方的客戶端,比較有名的是MC4j,通過這些客戶端我們可以很容易去訪問MBean。這也就是我們?yōu)槭裁匆肑MX的其中一個(gè)原因:試想如果我自己搞一套標(biāo)準(zhǔn),勢必要自己開發(fā)一個(gè)客戶端,那會(huì)是一個(gè)不小的工作量。