2016-09-21 13 views
0

Для моего проекта Java EE (7) я хочу использовать инфраструктуру Axon. Одним из параметров Axon ReplayingCluster является TransactionManager, но Axon поддерживает только NoTransactionManager и SpringTransactionManager.Axon ReplayingCluster с транзакцией JTA

Но если я не ошибаюсь с JTA, транзакции уже управляются сервером приложений в EntityManager (который я сохранил в JpaEventStore).

Мой вопрос: когда я использую ReplayingCluster с NoTransactionManager, означает ли это, что JTA по-прежнему будет предоставлять транзакционные функции?

ответ

2

Повтор событий может включать в себя тысячи, если не миллионы событий. Поэтому часто невозможно реализовать один повтор в одной транзакции (при условии, что ваши прослушиватели событий вносят изменения, требующие транзакций).

Axon использует TransactionManager во время повторов для фиксации изменений при каждом повторном воспроизведении партии событий. Размер этой партии настраивается с использованием параметра commitThreshold.

Теперь у меня нет опыта использования JTA, но я понимаю, что транзакция автоматически создается, когда метод bean вызывается и фиксируется при возврате этого метода. Это означает, что когда вы запускаете повтор, он будет делать это в одной транзакции.

Мой совет заключается в том, чтобы предоставить вашу собственную реализацию ReplayingCluster. На сервере EJB этой реализация может выглядеть следующим образом:

class JtaTransactionManager implements TransactionManager<UserTransaction> { 

    @Resource 
    private SessionContext ctx; 

    @Override 
    public UserTransaction startTransaction() { 
     UserTransaction utx = ctx.getUserTransaction(); 
     utx.begin(); 
     return utx; 
    } 

    @Override 
    public void commitTransaction(UserTransaction utx) { 
     utx.commit(); 
    } 

    @Override 
    public void rollbackTransaction(UserTransaction utx) { 
     utx.rollback(); 
    } 

} 

Вы можете аннотировать боб, который инициирует переигровку с @TransactionManagement(BEAN) уведомить приложение, которое будет управлять этими операционным самим (это не повлияет на управление транзакциями в другом месте).

 Смежные вопросы

  • Нет связанных вопросов^_^