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

Events 如何获取事务事件(提交、回滚),events,transactions,ejb,Events,Transactions,Ejb,我创建了一个基于CMT的EJB。EJB将一条记录插入数据库,然后异步执行另一个代码(a)。ejb继续它的处理,以便在异步调用后提交或回滚事务。 在代码(A)中,我需要等待EJB的事务提交或回滚。然后读取EJB插入的记录或跳过下一次执行。 我的问题是,我可以通知EJB的事务事件,还是必须轮询,直到我可以读取记录 我正在使用IBM WebSphere 7.0(Java EE 5)据我所知,将异步调用的代码与事务事件同步的唯一方法是使用CDI事件。在事务内部运行的代码中,必须发送CDI事件。您可以将C

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


我正在使用IBM WebSphere 7.0(Java EE 5)

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

我从JBoss文档中找到了这一页,概述了语法和一般概念——请参阅第11.7节

基本上是这样的

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

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

如果存在依赖关系,则必须等待记录插入,那么为什么下一个方法是按顺序调用而不是按顺序调用。@NayanWadekar,因为异步运行的代码可能非常昂贵,调用业务逻辑需要继续进行,而不必关心发生的其他事情(例如编写统计数据、报告某件事、发送电子邮件等)。如果由于EJB代码等待电子邮件服务器发送注册确认,而您的网页没有加载,那将是愚蠢的,不是吗it@bennidi
我需要等待EJB的事务提交或回滚
。因此,如果网页加载并未能发送确认信息,最终用户如何得到通知,如果不需要等待,一段时间后重新访问,这并不愚蠢。这里的人没有报酬/雇佣,但因为兴趣&没有义务澄清。不要发表完全不相关的评论。不幸的是,他使用的是JavaEE版本5,所以CDI不会被包括在内,因为它只来自JavaEE版本6(而且在版本1.0中),对吗?而且CDI事件与Websphere 8.5+(以及CDI 1.0)不一致,事务观察器必须是@Singleton而不是CDI bean,必须将观察方法定义到业务接口中,如果您有多个观察者处理相同的事件类型,则事务性观察将失败,等等。在Websphere中忘记此选项,除非您有时间打开PMR/等待修复。