2014-03-04 129 views
3

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

回答

1

您是否試過javax.transaction.Transactional(Java EE 7中的新增功能)?

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

javax.transaction.Transactional可以正常工作。 – user3243153