I just tried running my current project against trunk (0.7-SNAPSHOT) and got a fail on this simple test:
@Test(expected= AggregateNotFoundException.class)
public void shouldThrowWhenAggregateNotFound(){
commandBus.dispatch(new SomerCommand(AggregateIdentifierFactory.randomIdentifier()));
}
Obviously the (simple) command bus is now swallowing the AggregateNotFoundException that earlier was thrown back upon dispatch.
10:09:54,115 DEBUG SimpleUnitOfWorkInterceptor:52 - Incoming command. Creating new UnitOfWork instance
10:09:54,189 DEBUG SimpleUnitOfWorkInterceptor:54 - Registering new UnitOfWork instance with CurrentUnitOfWork
10:09:54,190 DEBUG SimpleUnitOfWorkInterceptor:58 - Proceeding interceptor chain
Hibernate: select top ? snapshotev0_.id as id6_, snapshotev0_.aggregateIdentifier as aggregat2_6_, snapshotev0_.sequenceNumber as sequence3_6_, snapshotev0_.serializedEvent as serializ4_6_, snapshotev0_.timeStamp as timeStamp6_, snapshotev0_.type as type6_ from SnapshotEventEntry snapshotev0_ where snapshotev0_.aggregateIdentifier=? and snapshotev0_.type=? order by snapshotev0_.sequenceNumber DESC
Hibernate: select domaineven0_.id as id5_, domaineven0_.aggregateIdentifier as aggregat2_5_, domaineven0_.sequenceNumber as sequence3_5_, domaineven0_.serializedEvent as serializ4_5_, domaineven0_.timeStamp as timeStamp5_, domaineven0_.type as type5_ from DomainEventEntry domaineven0_ where domaineven0_.aggregateIdentifier=? and domaineven0_.type=? and domaineven0_.sequenceNumber>=? order by domaineven0_.sequenceNumber ASC
10:09:54,387 WARN LockingRepository:109 - Exception occurred while trying to load an aggregate. Releasing lock.
org.axonframework.repository.AggregateNotFoundException: The aggregate was not found
at org.axonframework.eventsourcing.EventSourcingRepository.doLoad(EventSourcingRepository.java:107)
at org.axonframework.eventsourcing.CachingEventSourcingRepository.doLoad(CachingEventSourcingRepository.java:88)
at org.axonframework.eventsourcing.CachingEventSourcingRepository.doLoad(CachingEventSourcingRepository.java:37)
at org.axonframework.repository.AbstractRepository.load(AbstractRepository.java:82)
at org.axonframework.repository.LockingRepository.load(LockingRepository.java:105)
at org.axonframework.repository.AbstractRepository.load(AbstractRepository.java:93)
at se.combol.reaper.core.command.AlarmUnitCommandHandler.handle(AlarmUnitCommandHandler.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.axonframework.util.AbstractHandlerInvoker.invokeHandlerMethod(AbstractHandlerInvoker.java:83)
at org.axonframework.commandhandling.annotation.AnnotationCommandHandlerAdapter.handle(AnnotationCommandHandlerAdapter.java:75)
at org.axonframework.commandhandling.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:54)
at org.axonframework.commandhandling.interceptors.SimpleUnitOfWorkInterceptor.startNewUnitOfWorkAndProceed(SimpleUnitOfWorkInterceptor.java:59)
at org.axonframework.commandhandling.interceptors.SimpleUnitOfWorkInterceptor.handle(SimpleUnitOfWorkInterceptor.java:48)
at org.axonframework.commandhandling.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:52)
at org.axonframework.commandhandling.SimpleCommandBus.dispatch(SimpleCommandBus.java:64)
…
Caused by: org.axonframework.eventstore.EventStreamNotFoundException: Aggregate of type [AlarmUnit] with identifier [53a1378a-b354-4f67-8eb2-195a653d0f64] cannot be found.
at org.axonframework.eventstore.jpa.JpaEventStore.readEvents(JpaEventStore.java:100)
at org.axonframework.eventsourcing.EventSourcingRepository.doLoad(EventSourcingRepository.java:105)
… 50 more
10:09:54,424 DEBUG SimpleUnitOfWorkInterceptor:65 - Rolling back UnitOfWork after execution error
10:09:54,428 DEBUG SimpleUnitOfWorkInterceptor:67 - UnitOfWork rolled back
10:09:54,429 DEBUG SimpleUnitOfWorkInterceptor:70 - Clearing UnitOfWork from CurrentUnitOfWork
10:09:54,429 ERROR SimpleCommandBus:68 - An error occurred while dispatching a command.
org.axonframework.repository.AggregateNotFoundException: The aggregate was not found
at org.axonframework.eventsourcing.EventSourcingRepository.doLoad(EventSourcingRepository.java:107)
at org.axonframework.eventsourcing.CachingEventSourcingRepository.doLoad(CachingEventSourcingRepository.java:88)
at org.axonframework.eventsourcing.CachingEventSourcingRepository.doLoad(CachingEventSourcingRepository.java:37)
at org.axonframework.repository.AbstractRepository.load(AbstractRepository.java:82)
at org.axonframework.repository.LockingRepository.load(LockingRepository.java:105)
at org.axonframework.repository.AbstractRepository.load(AbstractRepository.java:93)
at se.combol.reaper.core.command.AlarmUnitCommandHandler.handle(AlarmUnitCommandHandler.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.axonframework.util.AbstractHandlerInvoker.invokeHandlerMethod(AbstractHandlerInvoker.java:83)
at org.axonframework.commandhandling.annotation.AnnotationCommandHandlerAdapter.handle(AnnotationCommandHandlerAdapter.java:75)
at org.axonframework.commandhandling.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:54)
at org.axonframework.commandhandling.interceptors.SimpleUnitOfWorkInterceptor.startNewUnitOfWorkAndProceed(SimpleUnitOfWorkInterceptor.java:59)
at org.axonframework.commandhandling.interceptors.SimpleUnitOfWorkInterceptor.handle(SimpleUnitOfWorkInterceptor.java:48)
at org.axonframework.commandhandling.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:52)
at org.axonframework.commandhandling.SimpleCommandBus.dispatch(SimpleCommandBus.java:64)
…
Caused by: org.axonframework.eventstore.EventStreamNotFoundException: Aggregate of type [AlarmUnit] with identifier [53a1378a-b354-4f67-8eb2-195a653d0f64] cannot be found.
at org.axonframework.eventstore.jpa.JpaEventStore.readEvents(JpaEventStore.java:100)
at org.axonframework.eventsourcing.EventSourcingRepository.doLoad(EventSourcingRepository.java:105)
… 50 more
java.lang.AssertionError: Expected exception: org.axonframework.repository.AggregateNotFoundException
at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:32)
…
The dispatch implementation in SimpleCommandBus looks like this:
try {
interceptorChain.proceed(new CommandContextImpl(command, handler));
} catch (Error e) {
throw e;
} catch (Throwable throwable) {
logger.error(“An error occurred while dispatching a command.”, throwable); // swallows all exceptions
}
Should it swallow all exceptions by design or is this a bug?
If by design what is the recommended solution?
Should I use command callbacks instead when dispatching?
Regards,
Ola