CDI事件发起者的事务是否等待Observer(AFTER_SUCCESS)事务?

时间:2013-04-07 17:26:51

标签: events java-ee transactions ejb cdi

我有以下情况:( pesudo-code)

   CallerObject.method() {
      SessionBean1.method1(); // through remote bean interface
      // [1]
    }

    @TransactionAttribute(REQUIRED)
    SessionBean1.method1() {
      // do something...
      Event<myClass>.fire();
      // do something...
    }

    ObserverObject.method2(@Observes(during=AFTER_SUCCESS) myClass) {
      sessionBean2.method2(); // through local bean interface
    }

    @Asynchronous
    @TransactionAttribute(REQUIRED)
    SessionBean2.method2() {
      // do something...
    }

==&GT;发生以下情况:

只有在SessionBean2.method2()中的事务完成后才会到达

[1]! (尽管在此之前已达到SessionBean1.method1()中的最后一个语句。)

就好像SessionBean1.method1()的事务不是“释放”了(因为想要一个更好的词 - 它会在调用事件处理程序ObserverObject.method2()之前立即提交!)直到异步调用 Session2.method2()的事务也完成了。

有谁知道我怎么能避免这种情况?

(整个设置的目的是在T1完成后在后台运行长时间SessionBean2.method2(),并尽快返回SessionBean1.method1()。)

P.S。:我已经验证了

a)T1立即提交(记录进入数据库)

b)异步调用SessionBean2.method2()(控件立即跳转到调用代码中的下一个语句)

c)在T2完成之前,SessionBean1.method1()不会将控制权返回给调用者代码

0 个答案:

没有答案