I'm trying to migrate the spring xml configuration to annotated way and facing this issue once the thread pool executor calls the snapshotter. Not sure why it happens as it worked well with spring xml configuration.
Pls help me in resolving this since I'm stuck for a long time due to Nullpointer exception from framework.
2939 [taskExecutor-1] DEBUG org.hibernate.loader.Loader - Result row:
2939 [taskExecutor-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor - Found [034ddfde-ddf3-4fb4-95d6-fb5974b3ed77] as column [col_0_0_]
2939 [taskExecutor-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor - Found [5ee497d1-49f9-4e7c-a876-48cd499ebc89] as column [col_1_0_]
2939 [taskExecutor-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor - Found [16] as column [col_2_0_]
2939 [taskExecutor-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor - Found [2015-06-03T14:07:46.185+05:30] as column [col_3_0_]
2939 [taskExecutor-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor - Found [com.sas.axon.api.CreateToDoItemEvent] as column [col_4_0_]
2939 [taskExecutor-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor - Found [null] as column [col_5_0_]
2939 [taskExecutor-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor - Found [[B@178a924] as column [col_6_0_]
2939 [taskExecutor-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor - Found [[B@a88cad] as column [col_7_0_]
2941 [taskExecutor-1] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Initiating transaction rollback
2941 [taskExecutor-1] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Rolling back JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@4869dc]
2941 [taskExecutor-1] DEBUG org.hibernate.engine.transaction.spi.AbstractTransactionImpl - rolling back
2941 [taskExecutor-1] DEBUG org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction - rolled JDBC Connection
2941 [taskExecutor-1] DEBUG org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction - re-enabling autocommit
2942 [taskExecutor-1] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@4869dc] after transaction
2942 [taskExecutor-1] DEBUG org.springframework.orm.jpa.EntityManagerFactoryUtils - Closing JPA EntityManager
2942 [taskExecutor-1] DEBUG org.hibernate.engine.jdbc.internal.LogicalConnectionImpl - Releasing JDBC connection
2942 [taskExecutor-1] DEBUG com.mchange.v2.resourcepool.BasicResourcePool - trace com.mchange.v2.resourcepool.BasicResourcePool@1bbb378 [managed: 5, unused: 4, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@171d828)
2942 [taskExecutor-1] DEBUG org.hibernate.engine.jdbc.internal.LogicalConnectionImpl - Released JDBC connection
2943 [taskExecutor-1] WARN org.axonframework.eventsourcing.AbstractSnapshotter - An attempt to create and store a snapshot resulted in an exception:
java.lang.NullPointerException
at org.axonframework.eventsourcing.AggregateSnapshotter.createSnapshot(AggregateSnapshotter.java:45)
at org.axonframework.eventsourcing.AbstractSnapshotter$CreateSnapshotTask.run(AbstractSnapshotter.java:194)
at org.axonframework.eventsourcing.AbstractSnapshotter$TransactionalRunnableWrapper.run(AbstractSnapshotter.java:144)
at org.axonframework.eventsourcing.AbstractSnapshotter$SilentTask.run(AbstractSnapshotter.java:164)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
public class DatabaseConfig {
...
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) throws PropertyVetoException{
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactory);
return jpaTransactionManager;
}
...
}
@Import(DatabaseConfig.class)
public class ApplicationConfig {
@Autowired
DatabaseConfig databaseConfig;
@Autowired
private PlatformTransactionManager transactionManager;
@Bean
public CommandGatewayFactoryBean<CommandGateway> commandGatewayFactoryBean() {
CommandGatewayFactoryBean<CommandGateway> factory = new CommandGatewayFactoryBean<CommandGateway>();
factory.setCommandBus(commandBus());
return factory;
}
@Bean
public MyCommandHandler myCommandHandler() {
MyCommandHandler commandHandler = new MyCommandHandler();
commandHandler.setCartIdRepository(databaseConfig.jpaCartIdRepository());
commandHandler.setRepository(repository());
return commandHandler;
}
@Bean
public CommandBus commandBus() {
SimpleCommandBus simpleCommandBus = new SimpleCommandBus();
simpleCommandBus.setTransactionManager(new SpringTransactionManager(transactionManager));
return simpleCommandBus;
}
@Bean(name="taskExecutor")
public ThreadPoolTaskExecutor taskExecutor(){
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setMaxPoolSize(5);
threadPoolTaskExecutor.setCorePoolSize(2);
threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
return threadPoolTaskExecutor;
}
@Bean
AnnotationCommandHandlerBeanPostProcessor annotationCommandHandlerBeanPostProcessor() {
AnnotationCommandHandlerBeanPostProcessor handler = new AnnotationCommandHandlerBeanPostProcessor();
handler.setCommandBus(commandBus());
return handler;
}
@Bean
public JpaEventStore eventStore() {
return new JpaEventStore(entityManagerProvider(),serializer());
}
@Bean
public Serializer serializer(){
return new JacksonSerializer();
}
@Bean
public EventBus eventBus() {
return new SimpleEventBus();
}
@Bean
AnnotationEventListenerBeanPostProcessor annotationEventListenerBeanPostProcessor() {
AnnotationEventListenerBeanPostProcessor listener = new AnnotationEventListenerBeanPostProcessor();
listener.setEventBus(eventBus());
return listener;
}
@Bean
public EventSourcingRepository<MyAggregate> repository() {
EventSourcingRepository<MyAggregate> repository = new EventSourcingRepository<MyAggregate>(MyAggregate.class, eventStore());
repository.setEventBus(eventBus());
repository.setSnapshotterTrigger(snapshotterTrigger());
return repository;
}
@Bean
public EventCountSnapshotterTrigger snapshotterTrigger(){
EventCountSnapshotterTrigger snapshotterTrigger = new EventCountSnapshotterTrigger();
snapshotterTrigger.setSnapshotter(snapshotter());
snapshotterTrigger.setTrigger(5);
return snapshotterTrigger;
}
@Bean
public SpringAggregateSnapshotter snapshotter(){
SpringAggregateSnapshotter snapshotter = new SpringAggregateSnapshotter();
snapshotter.setEventStore(eventStore());
snapshotter.setExecutor(taskExecutor());
snapshotter.setTransactionManager(transactionManager);
return snapshotter;
}
@Bean
public EntityManagerProvider entityManagerProvider() {
return new ContainerManagedEntityManagerProvider();
}
}
It does not store the snapshot entry into the database and results in exception before that. Pls guide if am doing something wrong.
Thanks.