2012-01-06 25 views
3

如果一个EJB的方法对同一个EJB进行JNDI查找,然后执行其他方法,这是否保证在同一个线程中执行?如何处理EJB对象的实际实例;它是否与调用方法中使用的实例相同?EJB请求自己的引用?

回答

3

EJB规范使得没有限制到注入EJB入本身的可能性(见EJB 3.1规范,章节16.5.1.1):

的〔@EJB]参考可以是会话bean的业务接口或会话Bean的无界面视图,或会话Bean或实体Bean的本地主界面或远程主界面。

与每个EJB调用一样,它将始终在同一个线程中执行;基于该不可重入实例规则,它不能相同实例(章13年4月10日):

[...]有状态和无状态会话bean没有被编码为折返。这条规则的一个含义是,应用程序不能对无状态或有状态的会话bean实例进行回送调用。

这意味着:如果bean A调用bean B上的方法,并且B调用A上的任何方法,容器必须确保B调用A的另一个实例;它是同一个线程的事实并不重要,因为重入和线程安全是不同的事情。

同样的情况也适用于当一个通过查找的JNDI引用调用本身,容器在寻找A的释放实例反之涉及在运行时,如果A直接调用它的方法,这是一个简单的Java方法调用“this”,而不涉及容器。