在 Java EE 上下文中,特别是在 CDI 中 ApplicationScoped对象,我需要强制回滚容器管理的事务。 (它是 JPA(事务)操作和一些文件系统操作的组合,后者并不是真正的事务性操作,因此我必须手动执行一些操作)
我能够使用SessionContext之前,但在注入(inject)更多依赖项之后,框架(WildFly 8.1.0 内的 Weld CDI)没有标记我的 ApplicationScoped对象不再作为 session 或消息驱动的 bean。 (根据错误消息,很可能是这样)
所以问题是:还有其他选择吗?我确实调查过UserTransaction ,但“遭受”与 SessionContext 相同的限制.
最佳答案
我遇到了a post by Jaikiran Pai-2这促使我研究名为 TransactionSynchronizationRegistry 的替代方案。 ,被认为是在这些情况下要走的路。 (引用:很少解释此 API 的用法,应用程序/库继续使用 UserTransaction。)
我必须使用以下代码注释注入(inject)点:
@Resource(name = "java:comp/TransactionSynchronizationRegistry")
private TransactionSynchronizationRegistry transactionSynchronizationRegistry;
我尝试了一下,效果非常好。
关于java - 谁能给我指出 JavaEE SessionContext 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26647399/