由於我們在事務中使用了大量的@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