@Override public ApplyMore andThenApply(Supplier<?> payloadOrMessageSupplier) { appliedMessages.add(GenericEventMessage.asEventMessage(payloadOrMessageSupplier.get())); return this; }
@Override public ScheduleToken schedule(Instant triggerDateTime, Object event) { EventMessage eventMessage = GenericEventMessage.asEventMessage(event); StubScheduleToken token = new StubScheduleToken(triggerDateTime, eventMessage, counter.getAndIncrement()); scheduledEvents.add(token); return token; }
@Override public ScheduleToken schedule(Duration triggerDuration, Object event) { EventMessage eventMessage = GenericEventMessage.asEventMessage(event); Instant scheduleTime = currentDateTime.plus(triggerDuration); StubScheduleToken token = new StubScheduleToken(scheduleTime, eventMessage, counter.getAndIncrement()); scheduledEvents.add(token); return token; }
/** * Publishes (dispatches) an event. * * @param event The event to publish. */ protected void publish(Object event) { this.eventBus.publish(processInterceptors(asEventMessage(event))); }
@Override public void prepareReset() { try { handle(GenericEventMessage.asEventMessage(new ResetTriggeredEvent())); } catch (Exception e) { throw new ResetNotSupportedException("An Error occurred while notifying handlers of the reset", e); } }
@Override public ContinuedGivenState andThenAPublished(Object event, Map<String, ?> metaData) { EventMessage<?> msg = GenericEventMessage.asEventMessage(event).andMetaData(metaData); handleInSaga(timeCorrectedEventMessage(msg)); return this; }
@Override public FixtureExecutionResult whenPublishingA(Object event, Map<String, ?> metaData) { EventMessage<?> msg = GenericEventMessage.asEventMessage(event).andMetaData(metaData); fixtureExecutionResult.startRecording(); handleInSaga(timeCorrectedEventMessage(msg)); return fixtureExecutionResult; }
private EventMessage<Object> timeCorrectedEventMessage(Object event) { EventMessage<?> msg = GenericEventMessage.asEventMessage(event); return new GenericEventMessage<>(msg.getIdentifier(), msg.getPayload(), msg.getMetaData(), currentTime()); }
@Override public ScheduleToken schedule(Instant triggerDateTime, Object event) { Assert.state(initialized, () -> "Scheduler is not yet initialized"); EventMessage eventMessage = GenericEventMessage.asEventMessage(event); String jobIdentifier = JOB_NAME_PREFIX + eventMessage.getIdentifier(); QuartzScheduleToken tr = new QuartzScheduleToken(jobIdentifier, groupIdentifier); try { JobDetail jobDetail = buildJobDetail(eventMessage, new JobKey(jobIdentifier, groupIdentifier)); scheduler.scheduleJob(jobDetail, buildTrigger(triggerDateTime, jobDetail.getKey())); } catch (SchedulerException e) { throw new SchedulingException("An error occurred while setting a timer for a saga", e); } return tr; }
@DeadlineHandler(deadlineName = "payloadlessDeadline") public void on() { eventStore.publish(asEventMessage(new SpecificDeadlineOccurredEvent(null))); } }
@DeadlineHandler(deadlineName = "specificDeadlineName") public void on(Object deadlinePayload, @Timestamp Instant timestamp) { assertNotNull(timestamp); eventStore.publish(asEventMessage(new SpecificDeadlineOccurredEvent(deadlinePayload))); }
@DeadlineHandler public void on(DeadlinePayload deadlinePayload, @Timestamp Instant timestamp) { assertNotNull(timestamp); eventStore.publish(asEventMessage(new DeadlineOccurredEvent(deadlinePayload))); }
@Test public void testDeadlineWithoutPayloadOnSaga() { configuration.eventStore().publish(asEventMessage(new SagaStartingEvent(IDENTIFIER, CANCEL_BEFORE_DEADLINE))); configuration.eventStore().publish(asEventMessage(new ScheduleSpecificDeadline(IDENTIFIER, null))); assertPublishedEvents(new SagaStartingEvent(IDENTIFIER, CANCEL_BEFORE_DEADLINE), new ScheduleSpecificDeadline(IDENTIFIER, null), new SpecificDeadlineOccurredEvent(null)); }
@Test public void testDeadlineWithSpecifiedDeadlineNameOnSaga() { String expectedDeadlinePayload = "deadlinePayload"; configuration.eventStore().publish(asEventMessage(new SagaStartingEvent(IDENTIFIER, CANCEL_BEFORE_DEADLINE))); configuration.eventStore().publish(asEventMessage( new ScheduleSpecificDeadline(IDENTIFIER, expectedDeadlinePayload)) ); assertPublishedEvents(new SagaStartingEvent(IDENTIFIER, CANCEL_BEFORE_DEADLINE), new ScheduleSpecificDeadline(IDENTIFIER, expectedDeadlinePayload), new SpecificDeadlineOccurredEvent(expectedDeadlinePayload)); }
@Test public void testDeadlineCancellationOnSaga() { configuration.eventStore().publish(asEventMessage(new SagaStartingEvent(IDENTIFIER, CANCEL_BEFORE_DEADLINE))); assertPublishedEvents(new SagaStartingEvent(IDENTIFIER, CANCEL_BEFORE_DEADLINE)); }
@Test public void testDeadlineOnSaga() { EventMessage<Object> testEventMessage = asEventMessage(new SagaStartingEvent(IDENTIFIER, DO_NOT_CANCEL_BEFORE_DEADLINE)); configuration.eventStore().publish(testEventMessage); assertPublishedEvents(new SagaStartingEvent(IDENTIFIER, DO_NOT_CANCEL_BEFORE_DEADLINE), new DeadlineOccurredEvent(new DeadlinePayload(IDENTIFIER))); }
@Test public void testDispatchInterceptorOnSaga() { EventMessage<Object> testEventMessage = asEventMessage(new SagaStartingEvent(IDENTIFIER, DO_NOT_CANCEL_BEFORE_DEADLINE)); configuration.deadlineManager().registerDispatchInterceptor(messages -> (i, m) -> GenericDeadlineMessage.asDeadlineMessage(m.getDeadlineName(), new DeadlinePayload("fakeId"))); configuration.eventStore().publish(testEventMessage); assertPublishedEvents(new SagaStartingEvent(IDENTIFIER, DO_NOT_CANCEL_BEFORE_DEADLINE), new DeadlineOccurredEvent(new DeadlinePayload("fakeId"))); }
@Test public void testHandlerInterceptorOnSaga() { EventMessage<Object> testEventMessage = asEventMessage(new SagaStartingEvent(IDENTIFIER, DO_NOT_CANCEL_BEFORE_DEADLINE)); configuration.deadlineManager().registerHandlerInterceptor((uow, chain) -> { uow.transformMessage(deadlineMessage -> GenericDeadlineMessage .asDeadlineMessage(deadlineMessage.getDeadlineName(), new DeadlinePayload("fakeId"))); return chain.proceed(); }); configuration.eventStore().publish(testEventMessage); assertPublishedEvents(new SagaStartingEvent(IDENTIFIER, DO_NOT_CANCEL_BEFORE_DEADLINE), new DeadlineOccurredEvent(new DeadlinePayload("fakeId"))); }
@Override public void prepareReset() { try { handle(GenericEventMessage.asEventMessage(new ResetTriggeredEvent())); } catch (Exception e) { throw new ResetNotSupportedException("An Error occurred while notifying handlers of the reset", e); } }
@CommandHandler public void handle(CreditDestinationBankAccountCommand command) { try { Aggregate<BankAccount> bankAccountAggregate = repository.load(command.getBankAccountId()); bankAccountAggregate.execute(bankAccount -> bankAccount .credit(command.getAmount(), command.getBankTransferId())); } catch (AggregateNotFoundException exception) { eventBus.publish(asEventMessage(new DestinationBankAccountNotFoundEvent(command.getBankTransferId()))); } } }