在Java EE上下文中,特别是在CDI ApplicationScoped对象中,我需要强制回滚容器管理的事务。 (它是JPA(事务)操作和某些文件系统操作的组合,后面的操作并不是真正的事务性操作,因此我必须手动执行一些操作)
我以前可以使用SessionContext,但是在注入更多依赖项之后,框架(WildFly 8.1.0中的Weld CDI)不再将ApplicationScoped对象标记为会话驱动或消息驱动的bean。 (根据错误消息,很可能是这样)
所以问题是:还有其他选择吗?我确实调查了UserTransaction,但是“遭受”了与SessionContext相同的限制。
最佳答案
我遇到了a post by Jaikiran Pai-2,这促使我研究了称为TransactionSynchronizationRegistry的替代方法,认为这是在这种情况下的解决之道。 (引号:很少解释此API的用法,应用程序/库继续使用UserTransaction。)
我必须使用以下代码注释注入点:
@Resource(name = "java:comp/TransactionSynchronizationRegistry")
private TransactionSynchronizationRegistry transactionSynchronizationRegistry;
我尝试了一下,它就像一种魅力。