Hi!
When an aggregate is deleted I use Axon’s markDeleted() method to prevent further handling of further commands on the aggregate. I was wondering what would happen if the delete event triggers the snapshotting mechanism. So I set the snapshot trigger event count to ‘1’ and ran some integration tests. It seems as if I no longer get an ‘AggregateDeletedException’. I’m wondering if there is something wrong with my configuration, or if I need a custom snapshot trigger definition that prevents snapshots when an aggregate is removed.
`
@Autowired
public void configure(EventHandlingConfiguration config, Environment env) {
if (!Arrays.asList(env.getActiveProfiles()).contains(“test”)
&& !Arrays.asList(env.getActiveProfiles()).contains(“localtest”)) {
config.usingTrackingProcessors(); // default all processors to tracking mode.
}
}
@Bean
public EventUpcasterChain upcasterChain() {
// Add Upcaster constructor calls here
return new EventUpcasterChain(
);
}
@Bean
public PersistenceExceptionResolver persistenceExceptionResolver() {
return new JdbcSQLErrorCodesResolver();
}
@Bean
public UnitOfWorkAwareConnectionProviderWrapper springDataSourceConnectionProvider(DataSource dataSource) {
return new UnitOfWorkAwareConnectionProviderWrapper(new SpringDataSourceConnectionProvider(dataSource));
}
@Bean
public JdbcEventStorageEngine jdbcEventStorageEngine(Serializer serializer,
EventUpcasterChain upcasterChain,
PersistenceExceptionResolver persistenceExceptionResolver,
ConnectionProvider connectionProvider,
TransactionManager transactionManager) {
return new JdbcEventStorageEngine(serializer, upcasterChain, persistenceExceptionResolver,
connectionProvider, transactionManager);
}
@Bean
public SpringTransactionManager axonSpringTransactionManager(DataSourceTransactionManager platformTransactionManager) {
return new SpringTransactionManager(platformTransactionManager);
}
@Bean
public JdbcTokenStore jdbcTokenStore(ConnectionProvider springDataSourceConnectionProvider, Serializer serializer) {
return new JdbcTokenStore(springDataSourceConnectionProvider, serializer);
}
@Bean
public SpringAggregateSnapshotterFactoryBean springAggregateSnapshotterFactoryBean() {
return new SpringAggregateSnapshotterFactoryBean();
}
@Bean
public SagaStore sagaRepository(ConnectionProvider springDataSourceConnectionProvider, Serializer serializer) {
// Use the Generic Schema, since it stores the Saga data in a single column instead of using n key/value rows per Saga.
JdbcSagaStore jdbcStore = new JdbcSagaStore(springDataSourceConnectionProvider, new GenericSagaSqlSchema(), serializer);
return new CachingSagaStore<>(jdbcStore, new WeakReferenceCache(), new WeakReferenceCache());
}
private Repository getRepository(Class clazz, EventStore eventStore, Snapshotter snapshotter,
ParameterResolverFactory parameterResolverFactory) {
SnapshotTriggerDefinition snapshotTrigger = new EventCountSnapshotTriggerDefinition(snapshotter, 1);
GenericAggregateFactory aggregateFactory = new GenericAggregateFactory<>(clazz);
return new EventSourcingRepository<>(aggregateFactory, eventStore, parameterResolverFactory, snapshotTrigger);
}
@Bean
public Repository calendarRepository(EventStore eventStore, Snapshotter snapshotter,
ParameterResolverFactory parameterResolverFactory) {
return getRepository(Calendar.class, eventStore, snapshotter, parameterResolverFactory);
}
`
Thanks a lot!
Andreas