创建了一个基于CMT的EJB。EJB将一条记录插入到数据库中,然后异步执行另一个代码(a)。ejb继续它的处理,以便在异步调用之后提交或回滚事务。在代码(A)中,我需要等待EJB的事务提交或回滚。然后读取EJB插入的记录或跳过下一次执行。我的问题是,我可以通知EJB的事务事件,或者必须轮询,直到我可以读取记录。
我正在研究IBM WebSphere 7.0 (Java EE 5)
据我所知,将异步调用的代码与事务事件同步的唯一方法是使用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中使用过这个,它对我很有效。如果你愿意,你甚至可以让处理程序在它自己的事务中运行。