Axon 3 Tracking Event Processor and Transactions.

Hi all,

We have written a small test app that utilizes the tracking event processor. However, we have run into an issue while attempting to persist the tracking token to the Token entry store. Below, is the stack trace from the failed persist. We seem to be missing a step in configuring a transaction manager for the tracking event processor.

org.axonframework.eventhandling.EventProcessingException: An exception occurred while processing events in EventProcessor [axon3spike]. Unit of Work has been rolled back.
at org.axonframework.eventhandling.AbstractEventProcessor.process(AbstractEventProcessor.java:128)
at org.axonframework.eventhandling.TrackingEventProcessor.doProcess(TrackingEventProcessor.java:196)
at org.axonframework.eventhandling.TrackingEventProcessor.lambda$start$2(TrackingEventProcessor.java:150)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process ‘merge’ call
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:278)
at com.sun.proxy.$Proxy88.merge(Unknown Source)
at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.storeToken(JpaTokenStore.java:51)
at org.axonframework.eventhandling.TrackingEventProcessor.lambda$null$0(TrackingEventProcessor.java:143)
at org.axonframework.messaging.unitofwork.MessageProcessingContext.notifyHandlers(MessageProcessingContext.java:68)
at org.axonframework.messaging.unitofwork.BatchingUnitOfWork.lambda$notifyHandlers$0(BatchingUnitOfWork.java:119)
at java.util.ArrayList$Itr.forEachRemaining(ArrayList.java:891)
at org.axonframework.messaging.unitofwork.BatchingUnitOfWork.notifyHandlers(BatchingUnitOfWork.java:119)
at org.axonframework.messaging.unitofwork.AbstractUnitOfWork.changePhase(AbstractUnitOfWork.java:214)
at org.axonframework.messaging.unitofwork.AbstractUnitOfWork.commitAsRoot(AbstractUnitOfWork.java:83)
at org.axonframework.messaging.unitofwork.AbstractUnitOfWork.commit(AbstractUnitOfWork.java:71)
at org.axonframework.messaging.unitofwork.BatchingUnitOfWork.executeWithResult(BatchingUnitOfWork.java:81)
at org.axonframework.eventhandling.AbstractEventProcessor.process(AbstractEventProcessor.java:112)

Hi,

the failure is caused by the lack of a TransactionManager. We’re making some changes to simplify this, but currently the way to do it is by configuring a TransactionManagingInterceptor on your Event Processor.

Cheers,

Allard

Thanks Allard. That fixed the problem.