/** * Publish an event to external event handlers using the given event bus. * * @param msg the event message to publish */ protected void publishOnEventBus(EventMessage<?> msg) { if (eventBus != null) { eventBus.publish(msg); } }
/** * Starts recording event published by the event bus. */ public void startRecording() { eventBus.subscribe(eventMessages -> eventMessages.forEach(this::handle)); }
/** * Publish a collection of events on this bus (one, or multiple). The events will be dispatched to all subscribed * listeners. * <p> * Implementations may treat the given {@code events} as a single batch and distribute the events as such to * all subscribed EventListeners. * * @param events The collection of events to publish */ default void publish(EventMessage<?>... events) { publish(Arrays.asList(events)); }
@Before public void setUp() { EventStore eventStore = spy(EmbeddedEventStore.builder() .storageEngine(new InMemoryEventStorageEngine()) .build()); Configurer configurer = DefaultConfigurer.defaultConfiguration(); configurer.eventProcessing() .usingSubscribingEventProcessors() .registerSaga(MySaga.class); configuration = configurer.configureEventStore(c -> eventStore) .configureAggregate(MyAggregate.class) .registerComponent(DeadlineManager.class, this::buildDeadlineManager) .start(); published = new CopyOnWriteArrayList<>(); configuration.eventBus().subscribe(msgs -> msgs.forEach(msg -> published.add(msg.getPayload()))); }
/** * Publishes (dispatches) an event. * * @param event The event to publish. */ protected void publish(Object event) { this.eventBus.publish(processInterceptors(asEventMessage(event))); }
@Test public void testCommandsAreRoutedToCorrectEntity() throws Exception { AggregateModel<Book> bookAggregateModel = AnnotatedAggregateMetaModelFactory.inspectAggregate(Book.class); EventBus mockEventBus = SimpleEventBus.builder().build(); mockEventBus.subscribe(m -> m.forEach(i -> System.out.println(i.getPayloadType().getName()))); AnnotatedAggregate<Book> bookAggregate = AnnotatedAggregate.initialize((Book) null, bookAggregateModel, mockEventBus); bookAggregate.handle(command(new CreateBookCommand("book1"))); bookAggregate.handle(command(new CreatePageCommand("book1"))); bookAggregate.handle(command(new CreateParagraphCommand("book1", 0))); bookAggregate.handle(command(new CreateParagraphCommand("book1", 0))); bookAggregate.handle(command(new UpdateParagraphCommand("book1", 0, 0, "Hello world"))); bookAggregate.handle(command(new UpdateParagraphCommand("book1", 0, 1, "Hello world2"))); assertEquals("Hello world", bookAggregate.getAggregateRoot().getPages().get(0).getParagraphs().get(0).getText()); assertEquals("Hello world2", bookAggregate.getAggregateRoot().getPages().get(0).getParagraphs().get(1).getText()); }
@SuppressWarnings("unchecked") @Override public void run() { EventMessage<?> eventMessage = createMessage(); if (logger.isDebugEnabled()) { logger.debug("Triggered the publication of event [{}]", eventMessage.getPayloadType().getSimpleName()); } try { UnitOfWork<EventMessage<?>> unitOfWork = new DefaultUnitOfWork<>(null); unitOfWork.attachTransaction(transactionManager); unitOfWork.execute(() -> eventBus.publish(eventMessage)); } finally { tokens.remove(tokenId); } }
public void initKafkaPublisher(final EventBus eventBus, final Sender sender, final Serializer serializer) { final KafkaMessageConverter converter = new KafkaMessageConverter(serializer); eventBus.subscribe(events -> { events.stream().map(event -> converter.createKafkaMessage(event)).forEach(kafkaMessage -> sender.send(kafkaMessage)); }); }
@Override public void execute(JobExecutionContext context) throws JobExecutionException { logger.debug("Starting job to publish a scheduled event"); JobDetail jobDetail = context.getJobDetail(); JobDataMap jobData = jobDetail.getJobDataMap(); try { SchedulerContext schedulerContext = context.getScheduler().getContext(); EventJobDataBinder jobDataBinder = (EventJobDataBinder) schedulerContext.get(EVENT_JOB_DATA_BINDER_KEY); Object event = jobDataBinder.fromJobData(jobData); EventMessage<?> eventMessage = createMessage(event); EventBus eventBus = (EventBus) context.getScheduler().getContext().get(EVENT_BUS_KEY); TransactionManager txManager = (TransactionManager) context.getScheduler().getContext().get(TRANSACTION_MANAGER_KEY); UnitOfWork<EventMessage<?>> unitOfWork = DefaultUnitOfWork.startAndGet(null); if (txManager != null) { unitOfWork.attachTransaction(txManager); } unitOfWork.execute(() -> eventBus.publish(eventMessage)); if (logger.isInfoEnabled()) { logger.info("Job successfully executed. Scheduled Event [{}] has been published.", eventMessage.getPayloadType().getSimpleName()); } } catch (Exception e) { logger.error("Exception occurred while publishing scheduled event [{}]", jobDetail.getDescription(), e); throw new JobExecutionException(e); } }
public void sendAndWaitForEvent(Object command, final EventCallback callback, final long timeoutInMillis) { final CorrelationToken correlationToken = new CorrelationToken(); final TimedEventCallback timedEventCallback = new TimedEventCallback(callback); callbacks.put(correlationToken, timedEventCallback); timedEventCallback.scheduleTimer(new Runnable() { @Override public void run() { callbacks.remove(correlationToken); } }, timeoutInMillis); if (started.compareAndSet(false, true)) { eventBus.subscribe(new AnnotationEventListenerAdapter(this)); } final CommandMessage commandMessage = asCommandMessage(command) .andMetaData(Collections.singletonMap(CorrelationToken.KEY, correlationToken)); commandBus.dispatch(commandMessage); }
@CommandHandler public void handleStubAggregateUpdatedWithExtraEvent(UpdateStubAggregateWithExtraEventCommand command, UnitOfWork<CommandMessage<?>> unitOfWork) { Aggregate<StubAggregate> aggregate = repository.load(command.getAggregateId().toString()); aggregate.execute(StubAggregate::makeAChange); eventBus.publish(new GenericEventMessage<>(new MyEvent())); aggregate.execute(StubAggregate::makeAChange); }
/** * Publish an event to external event handlers using the given event bus. * * @param msg the event message to publish */ protected void publishOnEventBus(EventMessage<?> msg) { if (eventBus != null) { eventBus.publish(msg); } }
/** * Publish an event to external event handlers using the given event bus. * * @param msg the event message to publish */ protected void publishOnEventBus(EventMessage<?> msg) { if (eventBus != null) { eventBus.publish(msg); } }
/** * Publish a collection of events on this bus (one, or multiple). The events will be dispatched to all subscribed * listeners. * <p> * Implementations may treat the given {@code events} as a single batch and distribute the events as such to * all subscribed EventListeners. * * @param events The collection of events to publish */ default void publish(EventMessage<?>... events) { publish(Arrays.asList(events)); }
/** * Publish a collection of events on this bus (one, or multiple). The events will be dispatched to all subscribed * listeners. * <p> * Implementations may treat the given {@code events} as a single batch and distribute the events as such to * all subscribed EventListeners. * * @param events The collection of events to publish */ default void publish(EventMessage<?>... events) { publish(Arrays.asList(events)); }
@SuppressWarnings("unchecked") @Override public void run() { EventMessage<?> eventMessage = createMessage(); if (logger.isDebugEnabled()) { logger.debug("Triggered the publication of event [{}]", eventMessage.getPayloadType().getSimpleName()); } try { UnitOfWork<EventMessage<?>> unitOfWork = new DefaultUnitOfWork<>(null); unitOfWork.attachTransaction(transactionManager); unitOfWork.execute(() -> eventBus.publish(eventMessage)); } finally { tokens.remove(tokenId); } }
@SuppressWarnings("unchecked") @Override public void run() { EventMessage<?> eventMessage = createMessage(); if (logger.isDebugEnabled()) { logger.debug("Triggered the publication of event [{}]", eventMessage.getPayloadType().getSimpleName()); } try { UnitOfWork<EventMessage<?>> unitOfWork = new DefaultUnitOfWork<>(null); unitOfWork.attachTransaction(transactionManager); unitOfWork.execute(() -> eventBus.publish(eventMessage)); } finally { tokens.remove(tokenId); } }
@Override public void execute(JobExecutionContext context) throws JobExecutionException { logger.debug("Starting job to publish a scheduled event"); JobDetail jobDetail = context.getJobDetail(); JobDataMap jobData = jobDetail.getJobDataMap(); try { SchedulerContext schedulerContext = context.getScheduler().getContext(); EventJobDataBinder jobDataBinder = (EventJobDataBinder) schedulerContext.get(EVENT_JOB_DATA_BINDER_KEY); Object event = jobDataBinder.fromJobData(jobData); EventMessage<?> eventMessage = createMessage(event); EventBus eventBus = (EventBus) context.getScheduler().getContext().get(EVENT_BUS_KEY); TransactionManager txManager = (TransactionManager) context.getScheduler().getContext().get(TRANSACTION_MANAGER_KEY); UnitOfWork<EventMessage<?>> unitOfWork = DefaultUnitOfWork.startAndGet(null); if (txManager != null) { unitOfWork.attachTransaction(txManager); } unitOfWork.execute(() -> eventBus.publish(eventMessage)); if (logger.isInfoEnabled()) { logger.info("Job successfully executed. Scheduled Event [{}] has been published.", eventMessage.getPayloadType().getSimpleName()); } } catch (Exception e) { logger.error("Exception occurred while publishing scheduled event [{}]", jobDetail.getDescription(), e); throw new JobExecutionException(e); } }
@Override public void execute(JobExecutionContext context) throws JobExecutionException { logger.debug("Starting job to publish a scheduled event"); JobDetail jobDetail = context.getJobDetail(); JobDataMap jobData = jobDetail.getJobDataMap(); try { SchedulerContext schedulerContext = context.getScheduler().getContext(); EventJobDataBinder jobDataBinder = (EventJobDataBinder) schedulerContext.get(EVENT_JOB_DATA_BINDER_KEY); Object event = jobDataBinder.fromJobData(jobData); EventMessage<?> eventMessage = createMessage(event); EventBus eventBus = (EventBus) context.getScheduler().getContext().get(EVENT_BUS_KEY); TransactionManager txManager = (TransactionManager) context.getScheduler().getContext().get(TRANSACTION_MANAGER_KEY); UnitOfWork<EventMessage<?>> unitOfWork = DefaultUnitOfWork.startAndGet(null); if (txManager != null) { unitOfWork.attachTransaction(txManager); } unitOfWork.execute(() -> eventBus.publish(eventMessage)); if (logger.isInfoEnabled()) { logger.info("Job successfully executed. Scheduled Event [{}] has been published.", eventMessage.getPayloadType().getSimpleName()); } } catch (Exception e) { logger.error("Exception occurred while publishing scheduled event [{}]", jobDetail.getDescription(), e); throw new JobExecutionException(e); } }
@CommandHandler public void handle(DebitSourceBankAccountCommand command) { try { Aggregate<BankAccount> bankAccountAggregate = repository.load(command.getBankAccountId()); bankAccountAggregate.execute(bankAccount -> bankAccount .debit(command.getAmount(), command.getBankTransferId())); } catch (AggregateNotFoundException exception) { eventBus.publish(asEventMessage(new SourceBankAccountNotFoundEvent(command.getBankTransferId()))); } }