无国籍的豆不工作

时间:2012-11-27 10:28:13

标签: java-ee ejb

我写了一个无状态会话bean。 然后还包括将余额与实例变量相加的业务方法。 因为它是无状态的bean,所以它不应该保持以前的平衡。

但它正在维护它。

即,

首先我添加100作为余额, 我再次添加100作为余额。

根据理论,它应该给出100作为结果,因为它不维持状态。 但它给了200。

为什么?

我正在使用带有Glassfish Server 3.0的Netbeans IDE

例如:


@Stateless
public class CalculatorBean implements CalculatorBeanRemote {
    double bal = 0.0;

    @Override
    public double Deposit(double parameter)
    {
        bal += parameter;
        return bal;
    }

} 

在Servlet中,我补充说,

@EJB
private CalculatorBeanRemote calculatorBean;

并且在服务方法中, out.println ("<br/><br/><br/>Deposit : " + calculatorBean.Deposit(100.0));

1 个答案:

答案 0 :(得分:4)

您希望得到一个不同的EJB实例,但情况并非总是如此。

EJB通常是池化的,这意味着当你完成使用EJB时​​,它会返回池中,而另一个调用可能会获得相同的对象。

容器不会清理您的成员,因此您获得200而不是100。

您可以使用PostContrsuct和PreDestroy来设置和清理您正在获取的EJB。

一般情况下,你不应该在无状态bean中使用任何成员(正是因为你所看到的)