2

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

但它正在维护它。

IE,

首先我添加 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));

4

1 回答 1

4

您期望获得 EJB 的不同实例,但情况并非总是如此。

EJB 通常是池化的,这意味着当您使用完 EJB 后,它会返回到池中,并且另一个调用可能会获得相同的对象。

容器不会清理你的成员,所以你得到 200 而不是 100。

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

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

于 2012-11-27T11:06:16.663 回答