我已经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实例将是在每次方法调用时实例化的方法范围变量。

10-04 13:14