由于我们在事务中使用了大量的@ApplicationScoped bean,但我们不想使用EJB(ApplicationScoped bean不适用于无状态bean),我们创建了自己的事务拦截器,如:Wildfly 8.0.0.Final JTA事务问题
@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:该命令不能执行ED当全局事务处于空闲状态
我们以前使用Seam3管理的事务,似乎工作的罚款。但它不再适用于Wildfly。我们尝试了Deltaspike的jpa模块,但它似乎在多个数据源(非JTA看起来很好)的事务中有问题,即使我们遵循了他们的指示。
我们也尝试了@Applicationscoped @TransactionalManagement,但它并没有给我们交易。
我在使用Wildfly时选择了什么,但没有@Stateful或@Statelss @Singleton等?
javax.transaction.Transactional可以正常工作。 – user3243153