【JMX】6. 连接MBean:JConsole

时间:2021-11-13 18:05:31
前面所有看效果都是通过Html网页来看的。JDK5.0自带了一个jmx客户端,叫jconsole,位于c:\jdk\bin\jconsole.exe。我们来用用这个客户端来连接Mbean Server。
 
1)vm参数方式
 
1、还是用第一篇的那个HelloAgent,修改HelloAgent,将第一句:
MBeanServer server = MBeanServerFactory.createMBeanServer();
改为: MBeanServer server = ManagementFactory.getPlatformMBeanServer();
注:ManagementFactory的全路径为:java.lang.management.ManagementFactory
 
2、修改Eclipse的run选项,把“-Dcom.sun.management.jmxremote=HelloAgent”这一句加入到run选项中
 

3、运行HelloAgent,然后在Dos窗口输入“jconsole”来启到JConsole

4、单击“连接”

问题:貌似看不到Hello MBean?

【JMX】6. 连接MBean:JConsole


2)RMI方式
 
  还是用jconsole,但方式变了。这里不需要象上面那样修改Eclipse run的vm选项。
 
1、还是用第一篇的HelloAgent,加上一段代码,启动一个JMXConnectorServer服务

public class HelloAgentRmi {
    public static void main(String args[]) throws Exception {   
        MBeanServer server = MBeanServerFactory.createMBeanServer();   
        ObjectName helloName = new ObjectName("alpha: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运行一个命令:rmiregistry 9999

3、运行HelloAgent,然后再在dos下运行命令jconsole
Remote Process输入service:jmx:rmi:///jndi/rmi://localhost:9999/server

效果与上图一样。


3)总结

连接MBeanServer的方式除了Html、JConsole,还有一些第三方的客户端,比较有名的是MC4j,通过这些客户端我们可以很容易去访问MBean。这也就是我们为什么要用JMX的其中一个原因:试想如果我自己搞一套标准,势必要自己开发一个客户端,那会是一个不小的工作量。