JMX客户端代码示例

    开发过程中,有时会遇到需要连接访问某些服务的开放的JMX方法,如部署C3P0连接池后,C3P0开放了一些MBean接口,可以通过这些接口获取数据库连接的一些信息或进行一些重置操作等。

 

    通过以下代码可以方便的连接访问JMX服务中的MBean方法:

import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXServiceURL;
import javax.management.remote.rmi.RMIConnector;


public class MBeanClientTest {
	
	// 创建到Server端的连接
	private static JMXServiceURL jmxUrl = null;
	private static MBeanServerConnection mbsConn = null;
	private static ObjectName objname = null;
	
	// 注册时的objectName
	private static String objectName = "";
	private static String monitorPath = "127.0.0.1";
	private static String dbUser = "root";
	private static String dbPass = "root";
	private static String port = "8788";
	
	
	private static void init() {
		
		try {
			jmxUrl = new JMXServiceURL(
				"service:jmx:rmi://"+monitorPath+"/jndi/rmi://"+monitorPath+":"+port+"/jmxrmi");
			
			// 如果Server端启动没有带-Dcom.sun.management.jmxremote.authenticate=false
			// 即需要认证时,需要传入认证参数
			// 该用户名密码在jmxremote.password文件中配置,路径是jre/lib/managerment目录下
			String user = "controlRole";
			String pass = "R&D";
			Map<String, String[]> env = new HashMap<String, String[]>();
			String[] credentials = new String[] {user,pass};
			env.put(JMXConnector.CREDENTIALS, credentials); 
			
			// 启动rmi连接,也可以调用JMXConnectorFactory.connect(jmxUrl, map)获取连接
			RMIConnector client = new RMIConnector(jmxUrl, null);
			client.connect();
	
			// 获得MBean服务连接
			mbsConn = client.getMBeanServerConnection();
			
			// 该ObjectName就是Server端注册的ObjectName
			objname = new ObjectName(objectName);
					
		} catch (Exception e) {
			
		}
	}
	
	public static void main(String[] args) {
		rmiClient();		
	}
	
	private static void rmiClient() {
		try {
			
			Object getNumBusyConnections = mbsConn.invoke(objname, "getNumBusyConnections", new String[]{dbUser, dbPass}, new String[]{String.class.getName(), String.class.getName()});// 调用服务端的方法
			Object str = mbsConn.invoke(objname, "sampleLastCheckinFailureStackTraceDefaultUser", null, null);// 调用服务端的方法
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 

你可能感兴趣的:(jmx,c3p0属性,mbean客户端调用)