我已经read认为永远不要将@Stateful
bean(SFSB)注入到@Stateless
bean(SLSB)中。但是实现以下目标的正确方法是什么?
@Stateless
public class FirstEJB
{
@EJB
private SecondEJB second;
public void businessMethod()
{
second.businessMethod1();
second.businessMethod2();
}
}
在
second.businessMethod1()
和second.businessMethod2()
之间应该保留一些状态,因此SecondEJB
不能是无状态的。将businessMethod1()
和businessMethod2()
方法合并为单个方法也不容易,因为SecondEJB
可以具有两个以上的业务方法,并且可以以不同的组合进行调用。实际上,我试图使
SecondEJB
成为有状态的,它似乎可以工作,但是会导致内存泄漏。没有标记有SecondEJB
注释的@Remove
方法,但是我尝试了@StatefulTimeout
却没有运气:创建了很多SecondEJB
实例,但并未删除它们。有人可以解释为什么会泄漏吗? 最佳答案
只是不要使用注射。您可以在调用buisnessMethod时使用Bean的JNDI查找,并且SecondEJB实例将是在每次方法调用时实例化的方法范围变量。