快速业务通道

EJB的存根和骨架的工作原理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

UserService object; object.getUserInfo(userId);

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

代码:

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,并调用相应的方法:

代码:

_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; }

EJB的存根和骨架的工作原理(9)

时间:2011-04-30

4、Skeleton调用的是UserService的Server端实现类的getUserInfo方法

代码:

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

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

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

调用流程图

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

EJB的存根和骨架的工作原理 - 编程入门网

EJB的存根和骨架的工作原理 - 编程入门网

图1

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

#1是Home interface, #2和#4都implements了它。

#6是Remote interface, #7和#9都implements了它。

#10是Bean实现。

EJB的存根和骨架的工作原理(10)

时间:2011-04-30

三、weblogic实现

一个远程对象至少要包括4个class文件:远程对象;远程对象的接口;实现远程接口的对象的stub;对象的skeleton这4个class文件。

在EJB中则至少要包括10个class:

Bean类,特定App Server的Bean实现类

Bean的remote接口,特定App Server的remote接口实现类,特定App

Server的remote接口的实现类的stub类和skeleton类

Bean的home接口,特定App Server的home接口实现类,特定App

Server的home接口的实现类的stub类和skeleton类

和RMI不同的是,EJB中这10个class真正需要用户编写的只有3个,分别是Bean类和它的remote接口,home接口,至于其它的7个class到底是怎么生成,被打包在什么地方,或者是否需要更多的类文件,会根据不同的App Server表现出比较大的差异,不能一概而论。

拿Weblogic的来说吧!Weblogic的Bean实现类,以及两个接口的Weblogic的实现类是在ejbc的时候被打包到EJB的jar包里面的,这3个class文件可以看到。而home接口和remote接口的Weblogic的实现类的stub类和skeleton类是在EJB被部署到Weblogic的时候,由Weblogic动态生成stub类和Skeleton类的字节码,因此看不到这4个类文件。

对于一次客户端远程调用EJB,要经过两个远程对象的多次RMI循环。首先是通过JNDI查找Home接口,获得Home接口的实现类,这个过程其实相当复杂,首先是找到Home接口的Weblogic实现类,然后创建一个Home接口的Weblogic实现类的stub类的对象实例,将它序列化传送给客户端(注意stub类的实例是在第1次RMI循环中,由服务器动态发送给客户端的,因此不需要客户端保存Home接口的Weblogic实现类的stub类),最后客户端获得该stub类的对象实

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号