了解java RMI exportObject方法

时间:2016-10-06 18:07:42

标签: java rmi

我对RMI很新,我决定尝试一下。我对exportObject(Object, int)方法感到困惑。文档说:

  

导出远程对象以使其可用于接收传入   使用特定提供的端口调用。 使用导出对象   使用 RMISocketFactory 创建 服务器套接字

考虑以下简单示例:

public interface Client extends Remote {
    void clientMethod() throws RemoteException;
}

public class ClientImpl implements Client {
    public clientMethod() throws RemoteException {
        System.out.println("clientMethod invoked");
    }
}

Client stub = (Client) UnicastRemoteObject
               .exportObject(new ClientImpl(), 56789); //<------ HERE

因此,我们创建了一个存根,并将其手动或通过VM传输到另一个RmiRegistry,这里无关紧要。

我很困惑“[...] 使用服务器套接字导出对象 [...]”

他们的意思是什么?

1 个答案:

答案 0 :(得分:2)

  • 创建ServerSocket以侦听导出时指定的端口的传入连接。此端口可以在多个远程对象之间共享。
  • 关于RMISocketFactory的陈述不正确。你在哪里读到的?该课程自1998年以来已经过时。
  • 存根包含服务器的主机名或IP地址和端口号,以及一些内部数据,用于标识它所属的远程对象。
  • 当您通过连接池调用远程方法时,将根据需要创建存根和远程对象之间的TCP连接。
  

因此,当我们将存根转移到另一个VM(VM 0)时,存根将保持与最初创建它的VM(VM 2)的套接字连接。

不,见上文。

  

VM 2依次维护服务器套接字以接受传入的方法调用。

正确。