servlet和EJB中的传址和传值

cherami 2002-06-07 10:16:48
在一个EJB应用中使用servlet调用EJB完成数据库操作,在调用EJB时向他传递了一个自定义的对象,而设计中是在EJB完成操作后将直接修改传入的那个对象的内容,而EJB方法返回时servlet得到的将是修改后的结果。
而现在的情况是刚开始的时候使用的jboss2.2_tomcat3.2,后来使用jboss2.4_tomcat4.0,在新版本的情况下发现以上方法不能用了,经debug发现在jboss2.2_tomcat3.2下在servlet和EJB间传递的是同一个对象,而在jboss2.4_tomcat4.0不是一个,但是内容相同,也就是在前者时是传地址,而后者是传值,所以导致后者不能正常工作。一个修改的方法就是将需要传递的那个类打包到EJB的jar包中并删除web应用的war包的WEB-INF/classes下的内容,这样也变成了传地址了,非常的奇怪。有没有人知道在servlet和EJB交互中这种应用规范情况下到底是传地址还是传值呢?个人认为由于EJB是分布式应用,因此应该是使用传值方式,在EJB的方法中返回一个对象,servlet端根据返回值再修改传入的对象的内容。
...全文
98 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
flylijian 2002-06-07
  • 打赏
  • 举报
回复
我同意你的观点,由ejb是基于分布试的应用,所以它只能是传值方式;
但你可以在EJB中修改了传过来的对象并构造一个同样的新实例,然后再把这个对象返回去,在servlet 中得到的就是这个新构造的实例;
具体实现方法是你可以定义一个接口,里面包含你想要实现的方法,然后让这两个对象都实现该接口,这样在传值之前,你可以用方法付初值,而在ejb修改后,再传回时,你可以用同样的方法操作它,就好象它们是一个相同的对象;因为它们都实现了同样的接口;
cherami 2002-06-07
  • 打赏
  • 举报
回复
你的这个方法当然是可行的,而且其实我也这样做的,我想问的是有关这个的规范如何,或者说对于两个不同的版本的EJB服务器的那种特性而言,哪种才是正常的情况,以我的理解来看,由于是分布式的系统,客户端向EJB发送请求并传递对象给它,那么应该是传值的,因为不同的JVM之间很难或者不可能实现传地址(而在我上面说的那种情况下实际上EJB服务器和servlet/jsp服务器在jboss2.2_tomcat3.2下可能使用的同一JVM,而在2.4版本下则不是),因此传值应该是规范要求的方式。我记得什么书上好像提到过这一点,但是忘记了是什么书了。
有没有人记得在类似servlet调用EJB(servlet和EJB可能不在同一个服务器上或者不同的JVM上)这种应用时的对象传递的标准方式能否为传址。

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧