假设我们有2个EJB(例如无状态)A和B.
@Stateless
public class A {
@EJB
protected B binstance;
}
所以在我们在servlet中使用了我们的A bean之后,应该将它返回到池中,问题是EJB容器“取消引用”B实例来自A,即在下一次调用时我们可以在同一个内部获得另一个B对象一个实例? 当我们创建一个bean REST服务并在那里注入一些其他bean时,JAX-RS是否仍然有效?在这个意义上,JAX-RS bean是像servlet一样创建还是像普通的EJB实例一样(我的意思是servlet仍然保存对bean实例的引用)?
答案 0 :(得分:0)
确定。所以让我们从无状态bean开始吧。在无状态bean的情况下,对象池由bean容器控制。并且它可以在第一和第二请求中提供相同的对象,或者可以提供不同的对象。因此,在编码时,请记住这一点。
现在来到Bean A和Bean B,当bean A执行完成时,Bean B可能会被解除引用。因为这完全取决于基于负载的Bean容器以及Bean A调用之间的持续时间。 所以永远不要依赖,每次都会获得相同的Bean B对象。
对于JAX-RS,休息实例的创建方式与普通的EJB实例类似。如果rest bean是无状态的,则对其应用无状态bean规则。在这种情况下,您也无法控制在辅助休息呼叫中提供给您的实例。