2011-06-07 14 views

回答

2

对于无状态,EJB代理与它的支持实例(通常是共用池)是一对多的,并且可以安全地注入到servlet中。

对于Singleton,EJB代理与它的后台实例是1对1的,但容器(或bean)负责确保并发调用是安全的还是不允许的,这取决于每个方法的业务逻辑。 @AccessTimeout可以用来控制等待锁定的时间。

对于有状态,EJB代理与其背景实例是1对1,并且不安全,无法注入到servlet中。从EJB 3.1开始,有状态会话Bean并发性允许一些安全性,但由于有状态会话Bean超时,将有状态会话Bean注入到Servlet中不太可能有用。

+0

干净的答案。另外,@AccessTimeout是一种很好的方式来指定与多线程访问相关的“如果我的bean正忙”情况。对大量并发系统有明确的好友,并可供所有会话bean使用。 – 2011-06-08 03:51:04

+0

谢谢:-)。更新了注意SFSB并发的答案(尽管我仍然没有将SFSB注入到servlet中很有用)。 – 2011-06-08 23:15:05

+0

没错,你可能会想要查看它,并保存它的请求或者可能将它塞入会话中。注意无状态bean上的@AccessTimeout指定可以等待池中的实例多长时间。在单例中,它指定了您可能等待获得锁的时间。 – 2011-06-09 00:01:50

相关问题