如何获取事务事件(提交,回滚)

时间:2013-03-12 00:50:22

标签: events transactions ejb

我创建了一个基于CMT的EJB。 EJB将记录插入数据库,然后异步执行另一个代码(A)。 ejb继续处理,因此可以在异步调用后提交或回滚事务。 在代码(A)中,我需要等到EJB的事务提交或回滚。然后读取EJB插入的记录或跳过下一次执行。 我的问题是,我可以通知EJB的事务事件,还是必须轮询,直到我能读取记录。

我正在研究IBM WebSphere 7.0(Java EE 5)

1 个答案:

答案 0 :(得分:0)

据我所知,将异步调用的代码与事务事件同步的唯一方法是使用CDI事件。在事务内部运行的代码中,您必须发送CDI事件。您可以将CDI事件的处理程序配置为仅在某些事务结果上运行 - 这些处理程序称为事务性观察者。

我在JBoss文档中找到了这个概述语法和一般概念的页面 - 参见11.7节

http://docs.jboss.org/weld/reference/latest/en-US/html/events.html

基本上看起来像这样

public void refreshCategoryTree(@Observes(during = AFTER_SUCCESS) CategoryUpdateEvent event) 
{// only called after the transaction committed successfully }

我不了解WebSphere,但由于这是CDI规范的一部分,我认为它也应该在那里工作。我曾经和JBoss一起使用它,它对我有用。如果需要,甚至可以让处理程序在自己的事务中运行。