JMX RMI连接器使用

本文详细介绍了Java Management Extensions (JMX) 中的RMI连接器使用方法,包括如何配置和建立远程管理连接,以及在实际操作中可能遇到的问题和解决方案,帮助开发者更好地管理和监控Java应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.fanshadoop.rmi;

import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;

import com.fanshadoop.notification.HelloWorld;
import com.sun.jdmk.comm.HtmlAdaptorServer;
/**
 * JMX RMI连接器使用
 */
public class JMXBookAgent {
	private MBeanServer server = null;
	/**
	 * 构建MBeanServer
	 */
	public JMXBookAgent(){
		System.out.println("\n\tCREATE the MBeanServer.");
		server = MBeanServerFactory.createMBeanServer("JMXBookAgent");				
	}
	/**
	 * 1)注册MBean
	 * 2)注册HTMLAdapter
	 * 3)注册RMIConnection
	 * 注意:HTMLAdapter和RMIConnection都是MBean的实现
	 */
	public void start() throws MalformedObjectNameException, NullPointerException, 
InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException {
		ObjectName mxName = new ObjectName("com.fansjmx:name=helloworld");
		server.registerMBean(new HelloWorld(), mxName);
		startHTMLAdapter();
		startRMIConnector();
	}

	protected void startRMIConnector() {		
		ObjectName connectorName = null;
		try {
			JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server"); 
			JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);
			connectorName = new ObjectName("JMXBookAgent:name=RMIConnector");
			server.registerMBean(cs, connectorName);
			cs.start();
		} catch (Exception e) {

		}
	}

	protected void startHTMLAdapter() {
		HtmlAdaptorServer adapter = new HtmlAdaptorServer();
		ObjectName adapterName = null;
		try {
			adapter.setPort(9092);
			// create the HTML adapter
			adapterName = new ObjectName("JMXBookAgent:name=html,port=9092");
			server.registerMBean(adapter, adapterName);
			adapter.start();
		} catch (Exception e) {
			System.out.println("Error Starting HTML Adapter for Agent");
		}
	}

	public static void main(String[] args) {		
		System.out.println("\n>>> START of JMXBook Agent");
		System.out.println("\n>>> CREATE the agent...");
		try {
			JMXBookAgent agent = new JMXBookAgent();
			System.out.println("\nAgent is Ready for Service...\n");
			agent.start();
		} catch (MalformedObjectNameException e) {
			e.printStackTrace();
		} catch (InstanceAlreadyExistsException e) {
			e.printStackTrace();
		} catch (MBeanRegistrationException e) {
			e.printStackTrace();
		} catch (NotCompliantMBeanException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			e.printStackTrace();
		}		
	}

}

package com.fanshadoop.rmi;
import java.io.IOException;

import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public class RMIClientFactory {
	public static JMXConnector getClient() throws IOException {
		JMXServiceURL url = new JMXServiceURL(
				"service:jmx:rmi:///jndi/rmi://localhost:9999/server");
		JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
		return jmxc;
	}
	public static void main(String[] args) {
		try {
			JMXConnector jmxc = RMIClientFactory.getClient();
			ObjectName mxName;
			mxName = new ObjectName("com.fansjmx:name=helloworld");
			jmxc.getMBeanServerConnection().invoke(mxName, "printGreeting",
					null, null);
		} catch (MalformedObjectNameException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			e.printStackTrace();
		} catch (InstanceNotFoundException e) {
			e.printStackTrace();
		} catch (MBeanException e) {
			e.printStackTrace();
		} catch (ReflectionException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
在运行时需要运行:rmiregistry 9999


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值