javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:282) at com.sun.proxy.$Proxy147.persist(Unknown Source) at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) at org.axonframework.eventsourcing.eventstore.jpa.JpaEventStorageEngine.appendEvents(JpaEventStorageEngine.java:360) at org.axonframework.eventsourcing.eventstore.AbstractEventStorageEngine.appendEvents(AbstractEventStorageEngine.java:112) at org.axonframework.eventsourcing.eventstore.AbstractEventStore.prepareCommit(AbstractEventStore.java:64) at org.axonframework.eventhandling.AbstractEventBus.doWithEvents(AbstractEventBus.java:209) at org.axonframework.eventhandling.AbstractEventBus.lambda$null$4(AbstractEventBus.java:144) at org.axonframework.messaging.unitofwork.MessageProcessingContext.notifyHandlers(MessageProcessingContext.java:68) at org.axonframework.messaging.unitofwork.DefaultUnitOfWork.notifyHandlers(DefaultUnitOfWork.java:91) at org.axonframework.messaging.unitofwork.AbstractUnitOfWork.changePhase(AbstractUnitOfWork.java:221) at org.axonframework.messaging.unitofwork.AbstractUnitOfWork.commitAsRoot(AbstractUnitOfWork.java:82) at org.axonframework.messaging.unitofwork.AbstractUnitOfWork.commit(AbstractUnitOfWork.java:70) at org.axonframework.messaging.unitofwork.DefaultUnitOfWork.executeWithResult(DefaultUnitOfWork.java:80) at org.axonframework.commandhandling.SimpleCommandBus.handle(SimpleCommandBus.java:156) at org.axonframework.commandhandling.AsynchronousCommandBus.lambda$handle$1(AsynchronousCommandBus.java:83) 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)@Beanpublic EventStorageEngine eventStorageEngine() { return new InMemoryEventStorageEngine();}package com.myco;
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplicationpublic class FX {
public static void main(String[] args) { SpringApplication.run(FX.class, args); }}
axon: amqp: exchange: FXEvents spring: rabbitmq: username: test password: password host: localhost
# Query side Mongo Database data: mongodb: host: localhost port: 27017
# Event Store Postgres Database
datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:5433/fxpostgres username: fxpostgres password: supersecret jpa: database: POSTGRESQL show-sql: true hibernate: ddl-auto: create
package com.myco;
import java.util.concurrent.Executor;import java.util.concurrent.Executors;
import org.axonframework.commandhandling.AsynchronousCommandBus;import org.axonframework.common.caching.Cache;import org.axonframework.common.caching.WeakReferenceCache;import org.axonframework.common.transaction.TransactionManager;import org.axonframework.eventsourcing.eventstore.EventStore;import org.axonframework.messaging.Message;import org.axonframework.messaging.annotation.ParameterResolverFactory;import org.axonframework.messaging.interceptors.BeanValidationInterceptor;import org.axonframework.spring.eventsourcing.SpringAggregateSnapshotter;import org.springframework.amqp.core.AmqpAdmin;import org.springframework.amqp.core.Binding;import org.springframework.amqp.core.BindingBuilder;import org.springframework.amqp.core.Exchange;import org.springframework.amqp.core.ExchangeBuilder;import org.springframework.amqp.core.Queue;import org.springframework.amqp.core.QueueBuilder;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration@EnableTransactionManagementpublic class AxonConfig {
public static final String EXCHANGE_NAME = "FXEvents"; public static final String QUEUE_NAME = EXCHANGE_NAME;
@Bean public BeanValidationInterceptor<Message<?>> beanValidationInteceptor() { return new BeanValidationInterceptor<>(); }
@Bean(destroyMethod = "shutdown") public AsynchronousCommandBus commandBus() { AsynchronousCommandBus cb = new AsynchronousCommandBus(); cb.registerDispatchInterceptor(beanValidationInteceptor()); return cb; }
@Bean public Cache cache() { return new WeakReferenceCache(); }
@Bean public SpringAggregateSnapshotter snapshotter(ParameterResolverFactory parameterResolverFactory, EventStore eventStore, TransactionManager transactionManager) { Executor executor = Executors.newSingleThreadExecutor(); return new SpringAggregateSnapshotter(eventStore, parameterResolverFactory, executor, transactionManager); }
@Bean public Exchange exchange() { return ExchangeBuilder.fanoutExchange(EXCHANGE_NAME).build(); }
@Bean public Queue queue() { return QueueBuilder.durable(QUEUE_NAME).build(); }
@Bean public Binding binding() { return BindingBuilder.bind(queue()).to(exchange()).with("*").noargs(); }
@Autowired public void configure(AmqpAdmin admin) { admin.declareExchange(exchange()); admin.declareQueue(queue()); admin.declareBinding(binding()); }}
package com.myco.pkg.command;
import org.axonframework.commandhandling.model.Repository;import org.axonframework.common.caching.Cache;import org.axonframework.eventsourcing.AggregateFactory;import org.axonframework.eventsourcing.CachingEventSourcingRepository;import org.axonframework.eventsourcing.EventCountSnapshotTriggerDefinition;import org.axonframework.eventsourcing.Snapshotter;import org.axonframework.eventsourcing.eventstore.EventStore;import org.axonframework.spring.eventsourcing.SpringPrototypeAggregateFactory;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Scope;
@Configurationpublic class PkgConfig {
@Bean @Scope("prototype") public PkgAR newPkg() { return new PkgAR(); }
@Bean public AggregateFactory<PkgAR> pkgAggregateFactory() { SpringPrototypeAggregateFactory<PkgAR> aggregateFactory = new SpringPrototypeAggregateFactory<>(); aggregateFactory.setPrototypeBeanName("newPkg"); return aggregateFactory; }
@Bean public Repository<PkgAR> pkgRepository(EventStore eventStore, Cache cache, Snapshotter snapshotter) { CachingEventSourcingRepository<PkgAR> repository = new CachingEventSourcingRepository<>( pkgAggregateFactory(), eventStore, cache, new EventCountSnapshotTriggerDefinition(snapshotter, 50)); return repository; }}<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="eventStore" transaction-type="RESOURCE_LOCAL"> <class>org.axonframework.eventsourcing.eventstore.jpa.DomainEventEntry</class> <class>org.axonframework.eventsourcing.eventstore.jpa.SnapshotEventEntry</class> </persistence-unit></persistence>INFO LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
--
You received this message because you are subscribed to the Google Groups "Axon Framework Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to axonframewor...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Axon Framework Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to axonframewor...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.