Java 类javax.management.remote.rmi.RMIServerImpl 实例源码

项目:serialysis    文件:JmxSslTest.java   
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());
}