0

我在 RMI 中一无所获。实际上这有点令人困惑。

在客户端,我们有业务接口(Hello.class),客户端代码(HelloClient.class)和远程存根(可能是Hello_stub.class),在服务器端,我们有服务器代码(HelloImpl.class),业务接口(Hello.class)和骨架。

从 Java 5 开始,我们不创建存根,但我相信它们仍然是 c=in picture。

那么,沟通是如何发生的呢?

客户端调用 Hello.class 上的方法,然后调用 Hello_stub.class 进行所有 n/w 操作。Hello_stub.class 调用骨架,然后调用 Hello.class,然后调用 HelloImpl.class 上的方法?

阅读Head first EJB 后我有点困惑:)。如果有人澄清它会很高兴。

4

1 回答 1

2

当调用存根的方法时:

  1. 它从客户端连接池中获取到 s 目标的 TCP 连接,或者如果没有池连接则创建一个

  2. 将调用和参数捆绑到一个可序列化的对象中。

  3. 将对象连同其他一些东西(如 JRMP 协议标头和远程 objectID)一起写入连接。

  4. 从连接中读取回复对象。

  5. 返回到池的连接,在一定的空闲时间后它会在池中关闭。

  6. 如果回复对象是异常,则抛出它。

  7. 否则返回回复对象作为方法结果。

在服务器上,一个线程位于侦听套接字上,接受连接,创建线程,并通过指定的对象 ID 将传入的远程调用分派到正确的远程对象。

这是通过反射完成的。RMI 骨架自 1998 年以来就没有使用过,除了您故意使用 生成的存根rmic -v1.1,但无论哪种方式,原理都是相同的。

于 2012-10-18T20:48:04.073 回答