查询RMI工作情况

时间:2012-10-18 15:31:07

标签: ejb rmi

我在RMI中没有得到一件事。实际上有点令人困惑。

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

对于Java 5以上版本,我们不会创建存根,但我相信它们仍然是c =。

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

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

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

1 个答案:

答案 0 :(得分:2)

调用存根方法时:

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

  2. 将调用和参数捆绑为可序列化对象。

  3. 将对象与其他一些内容(如JRMP协议头和远程objectID)一起写入连接。

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

  5. 返回与池的连接,在某个空闲时间后它将被关闭。

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

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

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

    这是通过反思完成的。自1998年以来,RMI骨架一直没有使用过,除非你故意用rmic -v1.1生成存根,但原则是相同的。