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

你可能感兴趣的:(jmx,mbean server)