【问题标题】:Purposes of @Remove method in stateful EJB有状态 EJB 中 @Remove 方法的用途
【发布时间】:2015-05-19 19:51:16
【问题描述】:

我明白,调用 @Remove 带注释的方法会告诉 EJB 容器,客户端不再需要有状态 EJB 的实例,并且可以在调用后将其删除。

但在 Oracle JEE 教程中,此方法用于“清理”实例。例如,请参见此处:

@Stateful
public class CartBean implements Cart {
    // ...
    List<String> contents;
    // ...
    @Remove
    public void remove() {
        contents = null;
    }
}

(来自https://docs.oracle.com/javaee/6/tutorial/doc/bnbod.html

成员List&lt;String&gt; contents; 设置为null,但我认为没有任何理由这样做。当实例被删除时,它不会杀死所有这些引用吗?

我可以想象,当实例发布时需要执行一些业务任务,但是在调用@Remove 方法之后,它或多或少会直接调用一些@PreDestroy 方法,我可以在其中执行这些任务.那么为什么我们有这种特殊的机制和@Remove 方法而不是像EJBContainer.remove(myBean) 那样的东西

能否请您澄清@Remove 注释的用途和/或提供一些易于理解的用例示例,以明确我们为什么需要这种机制?

【问题讨论】:

    标签: jakarta-ee ejb stateful-session-bean


    【解决方案1】:

    @Remove@PreDestroy 的主要功能是相同的。尽管使用 @Remove 是定义的标记注释,因此各个业务 EJB 供应商都有可以灵活地调用他们的业务功能方法,例如在关闭其他标准 EJB 事务之前释放他们的自定义流程,这通常由 @PreDestroy 完成,实际上破坏了 Bean 的状态。

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 2015-03-12
      相关资源
      最近更新 更多