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....");}}