/** * 得到JMX的连接 * * @param ip * 网址 * @param port * 端口 * @param environment * 环境 * @return JMX连接 */ public static JMXConnector getConnect(String ip, String port, Map<String, ?> environment) { if (StringUtil.isNullOrBlank(ip) || StringUtil.isNullOrBlank(port)) { logger.error("ip和端口不能为空."); return null; } try { Registry registry = LocateRegistry.getRegistry(ip, Integer.parseInt(port)); RMIServer stub = (RMIServer) registry.lookup("jmxrmi"); JMXConnector jmxc = new RMIConnector(stub, environment); jmxc.connect(); return jmxc; } catch (Exception e) { logger.error("连接JMX服务器失败."); } return null; }
public static void main(String[] args) throws Exception { // Create RMIJRMPServerImpl // System.out.println("Create RMIJRMPServerImpl"); RMIServer server = new RMIJRMPServerImpl(0, null, null, null); // Get the JMX Remote impl version from RMIServer // System.out.println("Get JMX Remote implementation version from RMIServer"); String full_version = server.getVersion(); System.out.println("RMIServer.getVersion() = "+ full_version); String impl_version = full_version.substring( full_version.indexOf("java_runtime_")+"java_runtime_".length()); // Display JMX Remote impl version and Java Runtime version // System.out.println("JMX Remote implementation version = " + impl_version); System.out.println("Java Runtime implementation version = " + args[0]); // Check JMX Remote impl version vs. Java Runtime version // if (!impl_version.equals(args[0])) { // Test FAILED throw new IllegalArgumentException( "***FAILED: JMX Remote and Java Runtime versions do NOT match***"); } // Test OK! System.out.println("JMX Remote and Java Runtime versions match."); System.out.println("Bye! Bye!"); }
public void testSslStub() throws Exception { File keyStoreFile = File.createTempFile("keystore", "ks"); keyStoreFile.deleteOnExit(); decodeHexToFile(keyStoreFile, keyStoreHex); System.setProperty("javax.net.ssl.keyStore", keyStoreFile.getAbsolutePath()); System.setProperty("javax.net.ssl.keyStorePassword", "password"); File trustStoreFile = File.createTempFile("truststore", "ks"); trustStoreFile.deleteOnExit(); decodeHexToFile(trustStoreFile, trustStoreHex); System.setProperty("javax.net.ssl.trustStore", trustStoreFile.getAbsolutePath()); System.setProperty("javax.net.ssl.trustStorePassword", "trustword"); // System.setProperty("javax.net.debug", "all"); RMIClientSocketFactory csf = new SslRMIClientSocketFactory(); RMIServerSocketFactory ssf = new SslRMIServerSocketFactory(); Registry reg = LocateRegistry.createRegistry(0, csf, ssf); int port = getRegistryPort(reg); System.out.println("Port is " + port); // Server Map<String, Object> env = new HashMap<String, Object>(); env.put(RMIConnectorServer.RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE, csf); env.put(RMIConnectorServer.RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE, ssf); MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///"); RMIServerImpl rmiServerImpl = new RMIJRMPServerImpl(port, csf, ssf, null); RMIConnectorServer cs = new RMIConnectorServer(url, null, rmiServerImpl, mbs); cs.start(); reg.bind("jmxrmi", rmiServerImpl); // Client Registry creg = LocateRegistry.getRegistry( InetAddress.getLocalHost().getHostAddress(), port, csf); RMIServer rmiServerStub = (RMIServer) creg.lookup("jmxrmi"); assertEquals(RMIServerImpl_Stub.class, rmiServerStub.getClass()); SObject sstub = (SObject) SerialScan.examine(rmiServerStub); List<SEntity> annots = sstub.getAnnotations(); /* The annotations consist of the data written for a UnicastRef2 * before the client socket factory; the client socket factory; * and the data written after the factory. */ assertEquals(3, annots.size()); SObject factory = (SObject) annots.get(1); assertEquals(SslRMIClientSocketFactory.class.getName(), factory.getType()); }