Похоже, вы забыли настроить командную шину, чтобы разрешить управление транзакциями.Добавьте его, как в примере ниже, и он будет работать:
@Bean
public CommandBus commandBus(TransactionManager transactionManager) {
return new SimpleCommandBus(transactionManager, NoOpMessageMonitor.INSTANCE);
}
Обновление
Моя ошибка, в первую очередь я использую для работы с Axon 3.3 (непоследние), и я подумал, что вы используете пользовательскую конфигурацию для хранилища событий.
При загрузке аксона по умолчанию используется хранилище событий памяти, и поэтому, если вы не определите пользовательское хранилище, транзакции не будут работать.
Это то, чего не хватает в вашей конфигурации:
@Bean
public EventStorageEngine eventStorageEngine(EntityManagerProvider entityManagerProvider, TransactionManager transactionManager) {
return new JpaEventStorageEngine(entityManagerProvider, transactionManager);
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
return new JpaTransactionManager(emf);
}
´´´
Это простой пример, который я сделал для других предложений, и он отлично работает.
Помните
Другим интересным моментом является то, что вы должны определить агрегатные репозитории, потому что Axon пытается найти репозиторий, который соответствует определенному агрегату.
@Bean
public Repository<User> documentAggregateRepository(EventStore eventStore) {
return new EventSourcingRepository<>(User.class, eventStore);
}
То же самое для саг, вы должны зарегистрировать их илиsaga никогда не будет триггером
// remember to call the method sagaName + Configuration
// or you must set up the @Saga configurationBean name pointing this method
@Bean
public SagaConfiguration<MySaga> mySagaConfiguration() {
return SagaConfiguration.subscribingSagaManager(MySaga.class);
}
В этом примере источник событий, но если вы интересуетесь устаревшими миграциями, возможно, вы будете использовать GenericJpaRepository во время процесса миграции (если вам нужен пример, просто дайте мне знать).
HTH.