<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
primary="true">
<property name ="dataSource" ref="dataSource"/>
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
<constructor-arg ref="transactionManager"/>
</bean>
<bean id="axonTransactionManager" class="org.axonframework.unitofwork.SpringTransactionManager">
@Inject
private SpringTransactionManager transactionManager;
//Relevant CommandHandler Code
UnitOfWork unitOfWork = DefaultUnitOfWork.startAndGet(transactionManager);
try{
//Business Logic
// JPA Persistence of Aggregates (no eventSourcingRepo enabled)
eventBus.publish(asEventMessage(objectFromMetadata));
unitOfWork.commit();
}
catch (AnyException){
unitOfWork.rollback(e);
}
For the above scenario, is there a need for XATransactionManager when deployed in non-JEE (read-Tomcat) container? As per our initial tests, the UOW.rollback is working quite fine in the scenarios
- DB service down (during insert or commit)
- RabbitMQ service down (during insert or commit)
Is there any missing scenario which requires XATxnmanager? Any best-practices to be followed to have a atomic txn within the CommandHandler?
Thanks,
Jebu.