【发布时间】:2015-09-01 13:05:32
【问题描述】:
假设我们有 2 个 EJB(例如无状态)A 和 B。
@Stateless
public class A {
@EJB
protected B binstance;
}
所以在我们在 servlet 中使用了 A bean 之后,它应该返回到池中,问题是 EJB 容器是否从 A 中“取消引用”B 实例,即在下一次调用时,我们可以在同一个 B 中获取另一个 B 对象一个实例? 当我们创建一个 bean REST 服务并在那里注入一些其他 bean 时,这对 JAX-RS 是否仍然有效?在这个意义上,JAX-RS bean 是像 servlet 还是像普通的 EJB 实例一样创建(我的意思是 servlet 仍然持有对 bean 实例的引用)?
【问题讨论】:
-
JAX-RS 资源本身不能合并。从 Java EE 7(和 EJB 3.2)开始,如果您将 JAX-RS 与 EJB 结合使用(即使用 @Stateless 注释 JAX-RS 资源),则 JAX-RS 将被合并。当它从池中加载时,它的所有依赖项都将被临时连接(对于所有无状态注入的 EJB 也是如此)。
-
问题是在 A 被放入池中之前 B 会发生什么? B 是否从 A 中取消引用,并且 A 和 B 都独立池化,或者只有 A 返回到池中(因为它引用了 B,那么 B 怎么会池化呢?)
标签: jakarta-ee ejb ejb-3.0