Wildfly 8.0.0.Final JTA交易问题

由于我们在事务中使用了大量的@ApplicationScoped bean,但我们不想使用EJB(ApplicationScoped bean不能与无状态bean一起使用),我们创建自己的事务拦截器,例如:

@Resource UserTransaction tx; @Resource(mappedName="java:jboss/TransactionSynchronizationRegistry") TransactionSynchronizationRegistry tsr; @AroundInvoke public Object manageTransaction(InvocationContext context) throws Exception { Object result; if (Status.STATUS_NO_TRANSACTION == tsr.getTransactionStatus()) { tx.begin(); // System.out.println("Starting transaction"); result = context.proceed(); tx.commit(); } else { result = context.proceed(); } // System.out.println("Committing transaction"); return result; } 

但是,在JTA事务的情况下,我们遇到如下错误:

使用自己的TransactionInterceptor导致
引发者:java.sql.SQLException:java.sql.SQLException:XAER_RMFAIL:当全局事务处于IDLE状态时,无法执行命令

我们曾经使用Seam3托管交易,它似乎工作正常。 但它不再适用于Wildfly。 我们尝试了Deltaspike的jpa模块,但是即使我们遵循他们的指令,它似乎也存在围绕多个数据源的事务问题(非JTA似乎很好)。

我们还尝试了@Applicationscoped @TransactionalManagement,但它没有给我们交易。

我有什么选择使用Wildfly而不是@Stateful或@Statelss @Singleton等?

您是否尝试过javax.transaction.Transactional (Java EE 7中的新增function)?

 @ApplicationScoped @Transactional public MyTransactionalBean { // ... }