【问题标题】:Stateful EJB Lifecycle question有状态的 EJB 生命周期问题
【发布时间】:2011-06-30 18:33:59
【问题描述】:

我有以下 bean 声明:

@Stateful
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class InteruptBean implements Interrupt {

private boolean interrupt = false;

@Override
public boolean check() {
    return interrupt;
}

@Override
public void interrupt() {
    interrupt = true;
}
}

我正在尝试了解有状态 EJB 生命周期。一旦使用 interrupt() 方法永久修改了此 EJB 的状态,并且对该实例的所有引用都设置为 null,那么 bean 实例是放回合格池中还是被丢弃?

让我质疑我的判断的是 TransactionAttributeType.NOT_SUPPORTED。我希望容器规范在某处说明有状态 EJB 在再次使用之前以某种方式重置为初始状态,无论 TransactionAttributeType 是什么。

谢谢!

【问题讨论】:

    标签: java jakarta-ee transactions ejb-3.0


    【解决方案1】:

    阅读http://download.oracle.com/javaee/6/tutorial/doc/giplj.html#gipln

    在生命周期结束时,客户端调用注解为@Remove 的方法,并且EJB 容器调用注解为@PreDestroy 的方法(如果有)。然后 bean 的实例就可以进行垃圾回收了。

    如果没有人调用过@Remove 方法,容器将等待超时并删除它。

    @TransactionAttribute 注解与 bean 的生命周期无关。它仅在调用其业务方法之一时告诉容器是否以及何时启动事务。

    【讨论】:

      【解决方案2】:

      @cj91

      我不确定 SPEC 是否明确说明了您的要求,即

      我希望容器规范说 有状态 EJB 被重置的地方 不知何故如何它的初始状态 在再次使用之前,无所谓 TransactionAttributeType 是什么。

      但我很确定事务属性类型对有状态 EJB 的(重新)初始化方式没有影响。

      NOT_SUPPORTED 只是意味着不能从事务上下文中调用该方法。如果它被调用,它会被静默忽略。

      http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Transaction3.html

      【讨论】:

      • 谢谢,非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多