求助..关于ejb3的调用

08-08-01 mweix

最近研究banq老师的《java实用系统开发指南》,看到ejb方法调用框架那一章,有点迷惑,请各位帮忙看看
1.的stateless bean通过jndi查找到之后放在HttpSession中,用的时候再取出来是否还会有效,为什么
2.如果我只用struts和ejb3,所有的业务逻辑都在很多分散的ejb组件中,是在请求到了直接在action中一次次的查找,还是把多个ejb放在session中合适,很多ejb实例都放在session中会不会很耗资源
3.还有...书上介绍的一种调用ejb的方式,将ejb方法的参数序列化,通过调用定义在ejb那一端的一个servlet反序列化参数,再用servlet调用ejb,将执行结果序列化传回。这种方式效率会比在action中直接jndi查找ejb然后调用效率高吗
非常感谢!!!

mweix
2008-08-01 10:12

关于第三点,web端看起来像是通过http协议调用ejb,是不是只是为了解决怕RMI被防火墙封锁的问题,是不是不是为了效率的提升而这样做的呢?

banq
2008-08-01 10:34

>是不是只是为了解决怕RMI被防火墙封锁的问题
是的 这和Web服务等目地是一致的。

mweix
2008-08-04 15:30

多谢banq老师回复,那前面的问题呢,session里面的东西会不会太多了啊

banq
2008-08-05 10:08

session中是Proxy引用,基本不会。

xmuzyu
2008-08-05 14:43

你用JNDI查找到的只不过是远程EJB组件的代理存根而已,不是真正的EJB组件的实例。EJB调用是
代理存根-->服务器端的骨架-->具体bean class的实例,每个实例只在一个方法调用期间于EJB object关联,调用结束后返回到池化状态(stateless session bean,MDB),而对于statefull session bean没有实例池的概念,就返回到就绪状态或者被钝化到磁盘。

mweix
2008-08-06 14:52

受教了,非常感谢!