【问题标题】:Stateless bean not working无状态 bean 不工作
【发布时间】:2012-11-27 10:28:13
【问题描述】:

我写了一个无状态会话 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));

【问题讨论】:

  • 你能发布一些源代码吗?

标签: jakarta-ee ejb


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 这是否意味着我得到的 200 并不总是相同的?或者一些垃圾值
  • 是的,可能是这样。不同的容器的工作方式略有不同,但一般来说,容器包含一定数量的实例,当你进行查找或注入时,你会得到其中一个,你不知道你会得到哪个。
猜你喜欢
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2022-12-16
  • 1970-01-01
相关资源
最近更新 更多