5

我确实理解,调用带@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<String> contents;设置为,null但我认为没有任何理由这样做。当实例被删除时,它不会杀死所有这些引用吗?

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

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

4

1 回答 1

1

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

希望这可以帮助!

于 2015-05-20T05:12:11.440 回答