c -> SimpleEventHandlerInvoker.builder() .eventHandlers(handlers) .parameterResolverFactory(configuration.parameterResolverFactory()) .listenerInvocationErrorHandler(listenerInvocationErrorHandler( processingGroup
@Override @SuppressWarnings("unchecked") public Configurer registerQueryHandler(int phase, Function<Configuration, Object> annotatedQueryHandlerBuilder) { startHandlers.add(new RunnableHandler(phase, () -> { Object annotatedHandler = annotatedQueryHandlerBuilder.apply(config); Assert.notNull(annotatedHandler, () -> "annotatedQueryHandler may not be null"); Registration registration = new AnnotationQueryHandlerAdapter(annotatedHandler, config.parameterResolverFactory(), config.handlerDefinition(annotatedHandler .getClass())) .subscribe(config.queryBus()); shutdownHandlers.add(new RunnableHandler(phase, registration::cancel)); })); return this; }
@Override public Configurer registerCommandHandler(int phase, Function<Configuration, Object> annotatedCommandHandlerBuilder) { startHandlers.add(new RunnableHandler(phase, () -> { Object handler = annotatedCommandHandlerBuilder.apply(config); Assert.notNull(handler, () -> "annotatedCommandHandler may not be null"); Registration registration = new AnnotationCommandHandlerAdapter(handler, config.parameterResolverFactory(), config.handlerDefinition(handler.getClass())) .subscribe(config.commandBus()); shutdownHandlers.add(new RunnableHandler(phase, registration::cancel)); })); return this; }
aggregateConf.configureRepository( c -> GenericJpaRepository.builder(aggregateType) .parameterResolverFactory(c.parameterResolverFactory()) .handlerDefinition(c.handlerDefinition(aggregateType)) .lockFactory(c.getComponent(
.sagaStore(store.get()) .resourceInjector(c.resourceInjector()) .parameterResolverFactory(c.parameterResolverFactory()) .handlerDefinition(c.handlerDefinition(configurer.type)) .build(); .sagaType(configurer.type) .sagaRepository(repository.get()) .parameterResolverFactory(c.parameterResolverFactory()) .handlerDefinition(c.handlerDefinition(configurer.type)) .listenerInvocationErrorHandler(eventProcessingConfiguration.listenerInvocationErrorHandler(
c -> c.getComponent( AggregateMetaModelFactory.class, () -> new AnnotatedAggregateMetaModelFactory(c.parameterResolverFactory(), c.handlerDefinition(aggregate)) ).createModel(aggregate)); aggregateFactory.get(), snapshotTriggerDefinition.get(), c.parameterResolverFactory(), c.handlerDefinition(aggregate), c::repository);
@Override public void initialize(Configuration config) { selectors.sort(comparing(ProcessorSelector::getPriority).reversed()); this.config = config; Map<String, List<Object>> assignments = new HashMap<>(); eventHandlers.stream().map(Component::get).forEach(handler -> { String processor = selectors.stream().map(s -> s.select(handler)).filter(Optional::isPresent).map(Optional::get) .findFirst() .orElseGet(() -> defaultSelector.select(handler).orElseThrow(IllegalStateException::new)); assignments.computeIfAbsent(processor, k -> new ArrayList<>()).add(handler); }); onInit.forEach(h -> h.accept(config)); assignments.forEach((name, handlers) -> { config.eventProcessingConfiguration().registerHandlerInvoker(name, c -> new SimpleEventHandlerInvoker(handlers, c.parameterResolverFactory(), getListenerInvocationErrorHandler(c, name), getSequencingPolicy(c, name))); if (eventProcessorBuilders.containsKey(name)) { eventProcessorBuilders.get(name).accept(config, handlers); } interceptorsFor(config, name).forEach(i -> config.eventProcessingConfiguration() .registerHandlerInterceptor(name, c -> i)); }); }
c -> SimpleEventHandlerInvoker.builder() .eventHandlers(handlers) .parameterResolverFactory(configuration.parameterResolverFactory()) .listenerInvocationErrorHandler(listenerInvocationErrorHandler( processingGroup
private EventProcessor buildTrackingEventProcessor(Configuration conf, String name, List<?> handlers, Function<Configuration, TrackingEventProcessorConfiguration> config, Function<Configuration, StreamableMessageSource<TrackedEventMessage<?>>> source, Function<Configuration, SequencingPolicy<? super EventMessage<?>>> sequencingPolicy) { return new TrackingEventProcessor(name, new SimpleEventHandlerInvoker(handlers, conf.parameterResolverFactory(), getListenerInvocationErrorHandler(conf, name), sequencingPolicy.apply(conf)), source.apply(conf), tokenStore.getOrDefault( name, c -> c.getComponent(TokenStore.class, InMemoryTokenStore::new) ).apply(conf), conf.getComponent(TransactionManager.class, NoTransactionManager::instance), getMessageMonitor(conf, EventProcessor.class, name), RollbackConfigurationType.ANY_THROWABLE, getErrorHandler(conf, name), config.apply(conf)); }
@Override public Configurer registerCommandHandler(int phase, Function<Configuration, Object> annotatedCommandHandlerBuilder) { startHandlers.add(new RunnableHandler(phase, () -> { Object handler = annotatedCommandHandlerBuilder.apply(config); Assert.notNull(handler, () -> "annotatedCommandHandler may not be null"); Registration registration = new AnnotationCommandHandlerAdapter(handler, config.parameterResolverFactory(), config.handlerDefinition(handler.getClass())) .subscribe(config.commandBus()); shutdownHandlers.add(new RunnableHandler(phase, registration::cancel)); })); return this; }
@Override public Configurer registerCommandHandler(int phase, Function<Configuration, Object> annotatedCommandHandlerBuilder) { startHandlers.add(new RunnableHandler(phase, () -> { Object handler = annotatedCommandHandlerBuilder.apply(config); Assert.notNull(handler, () -> "annotatedCommandHandler may not be null"); Registration registration = new AnnotationCommandHandlerAdapter(handler, config.parameterResolverFactory(), config.handlerDefinition(handler.getClass())) .subscribe(config.commandBus()); shutdownHandlers.add(new RunnableHandler(phase, registration::cancel)); })); return this; }
@Override @SuppressWarnings("unchecked") public Configurer registerQueryHandler(int phase, Function<Configuration, Object> annotatedQueryHandlerBuilder) { startHandlers.add(new RunnableHandler(phase, () -> { Object annotatedHandler = annotatedQueryHandlerBuilder.apply(config); Assert.notNull(annotatedHandler, () -> "annotatedQueryHandler may not be null"); Registration registration = new AnnotationQueryHandlerAdapter(annotatedHandler, config.parameterResolverFactory(), config.handlerDefinition(annotatedHandler .getClass())) .subscribe(config.queryBus()); shutdownHandlers.add(new RunnableHandler(phase, registration::cancel)); })); return this; }
@Override @SuppressWarnings("unchecked") public Configurer registerQueryHandler(int phase, Function<Configuration, Object> annotatedQueryHandlerBuilder) { startHandlers.add(new RunnableHandler(phase, () -> { Object annotatedHandler = annotatedQueryHandlerBuilder.apply(config); Assert.notNull(annotatedHandler, () -> "annotatedQueryHandler may not be null"); Registration registration = new AnnotationQueryHandlerAdapter(annotatedHandler, config.parameterResolverFactory(), config.handlerDefinition(annotatedHandler .getClass())) .subscribe(config.queryBus()); shutdownHandlers.add(new RunnableHandler(phase, registration::cancel)); })); return this; }
.sagaStore(store.get()) .resourceInjector(c.resourceInjector()) .parameterResolverFactory(c.parameterResolverFactory()) .handlerDefinition(c.handlerDefinition(configurer.type)) .build(); .sagaType(configurer.type) .sagaRepository(repository.get()) .parameterResolverFactory(c.parameterResolverFactory()) .handlerDefinition(c.handlerDefinition(configurer.type)) .listenerInvocationErrorHandler(eventProcessingConfiguration.listenerInvocationErrorHandler(
() -> new AnnotatedAggregateMetaModelFactory(c.parameterResolverFactory(), c.handlerDefinition(aggregate))) .createModel(aggregate)); aggregateFactory.get(), snapshotTriggerDefinition.get(), c.parameterResolverFactory(), c.handlerDefinition(aggregate), c::repository);
sagaStore.get(), c.resourceInjector(), c.parameterResolverFactory(), c.handlerDefinition(sagaType))); sagaManager = new Component<>(() -> config, c -> new AnnotatedSagaManager<>(sagaType, sagaRepository.get(), c.parameterResolverFactory(), c.handlerDefinition(sagaType), listenerInvocationErrorHandler.get()));
c -> c.getComponent( AggregateMetaModelFactory.class, () -> new AnnotatedAggregateMetaModelFactory(c.parameterResolverFactory(), c.handlerDefinition(aggregate)) ).createModel(aggregate)); aggregateFactory.get(), snapshotTriggerDefinition.get(), c.parameterResolverFactory(), c.handlerDefinition(aggregate), c::repository);