/** * Creates an {@link EventMessage} with given {@code payload} and {@code metaData}. * * @param payload payload of the resulting message * @param metaData metadata of the resulting message * @param <P> the payload type * @return the resulting message */ protected <P> EventMessage<P> createMessage(P payload, MetaData metaData) { if (lastKnownSequence != null) { long seq = lastKnownSequence + 1; String id = identifierAsString(); if (id == null) { Assert.state(seq == 0, () -> "The aggregate identifier has not been set. It must be set at the latest when applying the creation event"); return new LazyIdentifierDomainEventMessage<>(type(), seq, payload, metaData); } return new GenericDomainEventMessage<>(type(), identifierAsString(), seq, payload, metaData); } return new GenericEventMessage<>(payload, metaData); }
@SuppressWarnings("unchecked") private Object handle(CommandMessage<?> commandMessage) throws Exception { List<AnnotatedCommandHandlerInterceptor<? super T>> interceptors = inspector.commandHandlerInterceptors() .stream() .filter(chi -> chi.canHandle(commandMessage)) .sorted((chi1, chi2) -> Integer.compare(chi2.priority(), chi1.priority())) .map(chi -> new AnnotatedCommandHandlerInterceptor<>(chi, aggregateRoot)) .collect(Collectors.toList()); MessageHandlingMember<? super T> handler = inspector.commandHandlers() .stream() .filter(mh -> mh.canHandle(commandMessage)) .findFirst() .orElseThrow(() -> new NoHandlerForCommandException(format("No handler available to handle command [%s]", commandMessage.getCommandName()))); Object result; if (interceptors.isEmpty()) { result = handler.handle(commandMessage, aggregateRoot); } else { result = new DefaultInterceptorChain<>( (UnitOfWork<CommandMessage<?>>) CurrentUnitOfWork.get(), interceptors, m -> handler.handle(commandMessage, aggregateRoot) ).proceed(); } if (aggregateRoot == null) { aggregateRoot = (T) result; return identifierAsString(); } return result; }
/** * Creates an {@link EventMessage} with given {@code payload} and {@code metaData}. * * @param payload payload of the resulting message * @param metaData metadata of the resulting message * @param <P> the payload type * @return the resulting message */ protected <P> EventMessage<P> createMessage(P payload, MetaData metaData) { if (lastKnownSequence != null) { long seq = lastKnownSequence + 1; String id = identifierAsString(); if (id == null) { Assert.state(seq == 0, () -> "The aggregate identifier has not been set. It must be set at the latest when applying the creation event"); return new LazyIdentifierDomainEventMessage<>(type(), seq, payload, metaData); } return new GenericDomainEventMessage<>(type(), identifierAsString(), seq, payload, metaData); } return new GenericEventMessage<>(payload, metaData); }
@SuppressWarnings("unchecked") private Object handle(CommandMessage<?> commandMessage) throws Exception { List<AnnotatedCommandHandlerInterceptor<? super T>> interceptors = inspector.commandHandlerInterceptors() .stream() .filter(chi -> chi.canHandle(commandMessage)) .sorted((chi1, chi2) -> Integer.compare(chi2.priority(), chi1.priority())) .map(chi -> new AnnotatedCommandHandlerInterceptor<>(chi, aggregateRoot)) .collect(Collectors.toList()); MessageHandlingMember<? super T> handler = inspector.commandHandlers() .stream() .filter(mh -> mh.canHandle(commandMessage)) .findFirst() .orElseThrow(() -> new NoHandlerForCommandException(format("No handler available to handle command [%s]", commandMessage.getCommandName()))); Object result; if (interceptors.isEmpty()) { result = handler.handle(commandMessage, aggregateRoot); } else { result = new DefaultInterceptorChain<>( (UnitOfWork<CommandMessage<?>>) CurrentUnitOfWork.get(), interceptors, m -> handler.handle(commandMessage, aggregateRoot) ).proceed(); } if (aggregateRoot == null) { aggregateRoot = (T) result; return identifierAsString(); } return result; }