0

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

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

4

1 回答 1

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 一起使用,它对我有用。如果需要,您甚至可以让处理程序在其自己的事务中运行。

于 2013-03-15T15:20:35.367 回答