Wildfly 8.0.0. Проблемы с финальной транзакцией JTA

Поскольку мы используем много bean-компонентов @ApplicationScoped с транзакциями, но не хотим использовать EJB (bean-компонент ApplicationScoped не работает с 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. Мы попробовали модуль jpa от Deltaspike, но, похоже, у него возникли проблемы с транзакциями вокруг нескольких источников данных (не-JTA, кажется, все в порядке), даже если мы следовали их инструкциям.

Мы также пробовали @Applicationscoped @TransactionalManagement, но это не дает нам транзакцию.

Каковы мои варианты использования Wildfly, но не @Stateful или @Statelss @Singleton и т. д.?


person user3243153    schedule 04.03.2014    source источник


Ответы (1)


Вы пробовали javax.transaction.Transactional (новое в Java EE 7)?

@ApplicationScoped
@Transactional
public MyTransactionalBean {
    // ...
}
person Harald Wellmann    schedule 04.03.2014