读书人

RMI 原理二

发布时间: 2012-09-07 10:38:15 作者: rapoo

RMI 原理2

前两天在这个版块的精华区里翻到了Robbin关于EJB的调用原理的分析,受益非浅,但感觉用纯文字来表达效果似乎不够直观,而且对RMI的阐述也略嫌少了些。这里我根据自己的一点体会,在Robbin帖子的基础上再来说说这个话题,供大家参考。

首先,我想先说说RMI的工作原理,因为EJB毕竟是基于RMI的嘛。废话就不多讲了,RMI的本质就是实现在不同JVM之间的调用,工作原理图如下:

RMI 原理二

它的实现方法就是在两个JVM中各开一个Stub和Skeleton,二者通过socket通信来实现参数和返回值的传递。

有关RMI的例子代码网上可以找到不少,但绝大部分都是通过extend the interface java.rmi.Remote实现,已经封装的很完善了,不免使人有雾里看花的感觉。下面的例子是我在《Enterprise JavaBeans》里看到的,虽然很粗糙,但很直观,利于很快了解它的工作原理。

1. 定义一个Person的接口,其中有两个business method, getAge() 和getName()

            public?class?PersonClient?{??????public?static?void?main(String?[]?args);?{??????????try?{??????????????Person?person?=?new?Person_Stub();;??????????????int?age?=?person.getAge();;??????????????String?name?=?person.getName();;??????????????System.out.println(name?+?"?is?"?+?age?+?"?years?old");;??????????}?catch(Throwable?t);?{??????????????t.printStackTrace();;??????????}??????}??}??



          Client的本质是,它要知道Person接口的定义,并实例一个Person_Stub,通过Stub来调用business method,至于Stub怎么去和Server沟通,Client就不用管了。

          注意它的写法:
          Person person = new Person_Stub();
          而不是
          Person_Stub person = new Person_Stub();

          为什么?因为要面向接口编程嘛,呵呵。

读书人网 >编程

热点推荐