EJB 工作原理之四:第二个RMI循环

OK, now we got the object which is instanceOf _UserService_Stub, and implements UserService

现在我们的Client端走到第三步了:
UserInfo ui = object.getUserInfo(userId);

继续看代码,开始第二个RMI循环:

1. 调用object.getUserInfo()
java代码: 


UserService object;
object. getUserInfo (userId );



2. 实际是调用_UserService_Stub.getUserInfo(int arg0),在这个方法里面,Stub向Skeleton发送了一个getUserInfo的字串和arg0这个参数:

java代码: 


org. omg. CORBA. portable. OutputStream out = _request ("getUserInfo", true );
out. write_long (arg0 );
in = (org. omg. CORBA_ 2_ 3. portable. InputStream )_invoke (out );



3. Server端的Skeleton接收Stub发来的request,并调用相应的方法:
java代码: 


_EJSRemoteStatelessUserService_a940aa04_Tie._invoke ( ) {
    switch (method. charAt ( 5 ) )
    {
        case 83:
            if (method. equals ("getUserInfo" ) ) {
                return getUserInfo (in, reply );
            }
        ......
    }
}

_EJSRemoteStatelessUserService_a940aa04_Tie. getUserInfo ( ) {
    EJSRemoteStatelessUserService_a940aa04 target = null;
    int arg0 = in. read_long ( );
    UserDTO result = target. getUserInfo (arg0 );
    org. omg. CORBA_ 2_ 3. portable. OutputStream out = reply. createReply ( );
    out. write_value (result,UserDTO. class );
    return out;
}



4. Skeleton调用的是UserService的Server端实现类的getUserInfo方法
java代码: 


EJSRemoteStatelessUserService_a940aa04. getUserInfo ( ) {
    UserServiceBean _EJS_beanRef = container. preInvoke (this, 0, _EJS_s );
    _EJS_result = _EJS_beanRef. getUserInfo (id );
}



最后的最后,#4终于调用了我们写的UserServiceBean里的getUserInfo方法,这才是我们真正想要去做的事情。

至此,第二个RMI循环也终于结束了。

回顾一下上面的分析,可以很清晰的看到两次RMI循环的过程,下图(见链接)描述了整个流程:

http://www.pbase.com/image/27229257

黄色的1,6,10是程序员要写的,其余是系统生成的。

#1是Home interface, #2和#4都implements 了它。
#6是Remote interface, #7和#9都implements 了它。
#10是Bean实现。

写到这里,基本要说的就说完了。这实在是一项累死人的工作,希望您能稀饭。欢迎补充,欢迎摘错。谢谢,呵呵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值