JMX服务及MBean登记代码
JMX服务及MBean注册代码
以下代码可以开启一个MBean服务,并将MBean注册到该服务中。
在做JMX开发调试时,可以比较方便的用于测试,无需每次都将代码发布到服务器中测试。
import java.lang.management.ManagementFactory; 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; /** * 运行此程序需要加入以下参数就可以以JMX方式监控程序了<br><br> * -Dcom.sun.management.jmxremote.port=9999 该参数表示Server的访问端口<br><br> * -Dcom.sun.management.jmxremote.authenticate=false 该参数设置客户端访问时无需认证,如果不加,需要客户端连接时传入认证,认证配置文件是jmxremote.password,该文件在jre/lib/managerment目录下<br><br> * -Dcom.sun.management.jmxremote.ssl=false 连接时无需进行ssl认证<br><br> * * @version * */ public class AnalysesMBeanServerTest { private static MBeanServer server; private static String PROTOCOL = "rmi"; private static String HOST = "localhost"; private static int PORT = 9999; public static void init() throws Exception { startServerConnector(); // 将我们的应用MBean注册到Server中,客户端就可以连接访问了 server.registerMBean(new AnalysesServiceMBean(), new ObjectName( "comba:name=analysesServiceMBean")); } public static void startServerConnector() throws Exception { // 这里调用ManagementFactory.getPlatformMBeanServer()创建MBeanServer // 实际其第一次启动时也是调用MBeanServerFactory.createMBeanServer()创建MBeanServer // 之后将创建的这个Server注册到平台的MBeanServer // 从jdk文档可知,该方法返回的Server主要用于注册平台MXBean, // 但jdk也建议 将此平台用于注册平台 MXBean 之外的其他应用程序管理 Bean。 // 这将允许所有 MBean 通过同一个 MBeanServer 发布,从而能够更方便地进行网络发布和发现。应该避免平台 MXBean 的名称冲突。 server = ManagementFactory.getPlatformMBeanServer(); // 这里再用以下构造方法构造JMXServiceURL,再启动客户端连接监听,客户端就可以正常连接了 JMXServiceURL serviceURL = new JMXServiceURL(PROTOCOL, HOST, PORT); JMXConnectorServer connectorServer = JMXConnectorServerFactory .newJMXConnectorServer(serviceURL, null, server); server.registerMBean(connectorServer, new ObjectName( "comba:name=connector")); connectorServer.start(); System.out.println(connectorServer.isActive()); } public static void main(String[] args) { try { init(); } catch (Exception ex) { ex.printStackTrace(); return; } System.out.print("startup...."); } }