While implementing Snapshotting snapshot entry is not created in mongodb store. following is my configuration file.
I am getting WARN as AbstractSnapshotter : An attempt to create and store a snapshot resulted in an exception. Exception summary: null
@Configuration
//@ConditionalOnClass(CommandBus)
@EnableMongoRepositories(basePackages = {“com.example”})
public class MongoConfiguration {
@Value("${spring.data.mongodb.uri}")
private String mongoUrl;
@Value("${spring.data.mongodb.database}")
private String mongoDbName;
@Value("${spring.data.mongodb.events.collection.name}")
private String eventsCollectionName;
@Value("${spring.data.mongodb.snapshot.collection.name}")
private String snapshotCollectionName;
@Bean
public Serializer axonJsonSerializer() {
return new JacksonSerializer();
}
@Bean
//s @ConditionalOnMissingBean
CommandBus commandBus() {
return new SimpleCommandBus();
}
@Bean
public EventStorageEngine eventStorageEngine(){
return new MongoEventStorageEngine(
axonJsonSerializer(),null, axonMongoTemplate(), new DocumentPerEventStorageStrategy());
}
@Bean(name = “axonMongoTemplate”)
public MongoTemplate axonMongoTemplate() {
MongoTemplate template = new DefaultMongoTemplate(mongoClient(), mongoDbName, eventsCollectionName, snapshotCollectionName);
return template;
}
@Bean
public MongoClient mongoClient(){
//MongoFactory mongoFactory = new MongoFactory();
// mongoFactory.setMongoAddresses(Arrays.asList(new ServerAddress(mongoUrl)));
MongoClientURI mongoClientURI = new MongoClientURI(mongoUrl);
MongoClient mongoClient = new MongoClient(mongoClientURI);
return mongoClient;
}
@Bean
public EventStore eventStore() {
return new EmbeddedEventStore(eventStorageEngine());
}
@Bean
public CommandGateway commandGateway(CommandBus commandBus) {
return new DefaultCommandGateway(commandBus);
}
@Bean
SimpleEventBus eventBus() {
return new SimpleEventBus();
}
@Bean
public SpringAggregateSnapshotter snapshotter(ParameterResolverFactory parameterResolverFactory, EventStore eventStore, TransactionManager transactionManager) {
Executor executor = Executors.newSingleThreadExecutor(); //Or any other executor of course
//( new SpringAggregateSnapshotter(eventStore, parameterResolverFactory, executor, transactionManager)).setTransactionManager(transactionManager);
return new SpringAggregateSnapshotter(eventStore, parameterResolverFactory, executor, transactionManager);
}
@Bean
public SnapshotTriggerDefinition snapshotTriggerDefinition(Snapshotter snapshotter) throws Exception {
//snapshotter.setTransactionManager(transactionManager);
return new EventCountSnapshotTriggerDefinition(snapshotter, 1);
}
@Bean
public AggregateFactory saleAggregateFactory() {
SpringPrototypeAggregateFactory aggregateFactory = new SpringPrototypeAggregateFactory<>();
aggregateFactory.setPrototypeBeanName(“sale”);
return aggregateFactory;
}
@Bean
public Cache cache(){
return new WeakReferenceCache();
}
@Bean
public Repository saleAggregateRepository(EventStore eventStore, SnapshotTriggerDefinition snapshotTriggerDefinition, ParameterResolverFactory parameterResolverFactory) {
//new GenericAggregateFactory<>(Sale.class)
// EventSourcingRepository repository = new EventSourcingRepository(Sale, eventStore);
EventSourcingRepository repository = new EventSourcingRepository<>(new GenericAggregateFactory<>(Sale.class), eventStore, parameterResolverFactory, snapshotTriggerDefinition);
return repository;
//return new CachingEventSourcingRepository<>(new GenericAggregateFactory<>(Sale.class), eventStore, cache, snapshotTriggerDefinition);
}
}