在交易期间触发的CDI事件的范围

时间:2016-09-07 09:11:33

标签: java transactions cdi

来自Weld documentation

  

交易观察员在此期间收到他们的事件通知   在事件发生的交易完成阶段之前或之后   被提出来了。

这是否意味着在交易期间触发的CDI事件的范围仅限于该交易?

我想是的,但我只是想确保在交易完成后我不必进行任何清理。

1 个答案:

答案 0 :(得分:1)

我认为你有点误解了这个概念。

没有"事件范围"。事务的故事如下 - 您有一个事务方法,在该方法中,您触发一个事件。在您的应用程序的某个地方,您有观察者,他们具有观察此事件所需的类型,并且他们也受到某个事务阶段的约束。

在实践中,这意味着,当交易达到给定状态时,将立即通知此类观察员 - 不久之后也不会:

    public void observeAfterCompletion(@Observes(during = AFTER_COMPLETION) Foo someEvent) {
        // this will be notified once the transaction reached AFTER_CEMPLETION stage
    }

    public void observeBeforeCompletion(@Observes(during = BEFORE_COMPLETION) Foo event) {
        // this will be notified once the transaction reaches BEFORE_COMPLETION stage
    }

有关事务何时达到给定状态的更多信息,您需要检查JTA规范,而不是CDI。

  

交易完成后,我不必进行任何清理工作。

不,你没有。标准事件后你不能清理任何东西,也不需要在这里做任何事情。