From 942328bf7549cefe96d9a1fda0ab5801b282b644 Mon Sep 17 00:00:00 2001 From: JohT Date: Tue, 28 Dec 2021 20:52:40 +0100 Subject: [PATCH] Added EventPublishingService that represents AxonFramework EventGateway --- .../axon/AxonConfiguration.java | 8 +++++ .../query/axon/EventPublishingAdapter.java | 32 +++++++++++++++++++ .../boundary/EventPublishingService.java | 15 +++++++++ .../axon/EventPublishingAdapterTest.java | 31 ++++++++++++++++++ 4 files changed, 86 insertions(+) create mode 100644 showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/axon/EventPublishingAdapter.java create mode 100644 showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/boundary/EventPublishingService.java create mode 100644 showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/axon/EventPublishingAdapterTest.java diff --git a/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/infrastructure/axon/AxonConfiguration.java b/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/infrastructure/axon/AxonConfiguration.java index 514c288..4ac059c 100644 --- a/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/infrastructure/axon/AxonConfiguration.java +++ b/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/infrastructure/axon/AxonConfiguration.java @@ -54,9 +54,11 @@ import io.github.joht.showcase.quarkuseventsourcing.messaging.infrastructure.axon.serializer.jsonb.axon.JsonbSerializer; import io.github.joht.showcase.quarkuseventsourcing.messaging.infrastructure.axon.transaction.jta.JtaTransactionManager; import io.github.joht.showcase.quarkuseventsourcing.messaging.infrastructure.axon.upcaster.AnnotationEventRevisionResolver; +import io.github.joht.showcase.quarkuseventsourcing.messaging.query.axon.EventPublishingAdapter; import io.github.joht.showcase.quarkuseventsourcing.messaging.query.axon.QueryReplayAdapter; import io.github.joht.showcase.quarkuseventsourcing.messaging.query.axon.QuerySubmitterAdapter; import io.github.joht.showcase.quarkuseventsourcing.messaging.query.axon.QueryUpdateEmitterAdapter; +import io.github.joht.showcase.quarkuseventsourcing.messaging.query.boundary.EventPublishingService; import io.github.joht.showcase.quarkuseventsourcing.messaging.query.boundary.QueryModelProjection; import io.github.joht.showcase.quarkuseventsourcing.messaging.query.boundary.QueryProcessor; import io.github.joht.showcase.quarkuseventsourcing.messaging.query.boundary.QueryProjectionManagementService; @@ -177,6 +179,12 @@ public QueryProjectionManagementService getQueryReplayService() { return new QueryReplayAdapter(configuration.eventProcessingConfiguration()); } + @Produces + @ApplicationScoped + public EventPublishingService getEventPublishingService() { + return new EventPublishingAdapter(configuration.eventGateway()); + } + private Connection getConnection() throws SQLException { return dataSource.getConnection(); } diff --git a/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/axon/EventPublishingAdapter.java b/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/axon/EventPublishingAdapter.java new file mode 100644 index 0000000..c77144c --- /dev/null +++ b/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/axon/EventPublishingAdapter.java @@ -0,0 +1,32 @@ +package io.github.joht.showcase.quarkuseventsourcing.messaging.query.axon; + +import static javax.transaction.Transactional.TxType.REQUIRED; + +import javax.transaction.Transactional; + +import org.axonframework.eventhandling.gateway.EventGateway; + +import io.github.joht.showcase.quarkuseventsourcing.messaging.query.boundary.EventPublishingService; + +public class EventPublishingAdapter implements EventPublishingService { + + private final EventGateway eventGateway; + + public EventPublishingAdapter(EventGateway eventGateway) { + this.eventGateway = eventGateway; + } + + /** + * {@inheritDoc} + */ + @Override + @Transactional(REQUIRED) + public void publish(Object... events) { + eventGateway.publish(events); + } + + @Override + public String toString() { + return "EventPublishingAdapter [eventGateway=" + eventGateway + "]"; + } +} diff --git a/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/boundary/EventPublishingService.java b/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/boundary/EventPublishingService.java new file mode 100644 index 0000000..0185b9b --- /dev/null +++ b/showcase-quarkus-eventsourcing/src/main/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/boundary/EventPublishingService.java @@ -0,0 +1,15 @@ +package io.github.joht.showcase.quarkuseventsourcing.messaging.query.boundary; + +/** + * Provides methods to publish events. + * Based on the "EventGateway" in "AxonFramework". + */ +public interface EventPublishingService { + + /** + * Publishes events that will be dispatched to all subscribed listeners. + * + * @param events The collection of events to publish + */ + void publish(Object... events); +} diff --git a/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/axon/EventPublishingAdapterTest.java b/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/axon/EventPublishingAdapterTest.java new file mode 100644 index 0000000..f28458a --- /dev/null +++ b/showcase-quarkus-eventsourcing/src/test/java/io/github/joht/showcase/quarkuseventsourcing/messaging/query/axon/EventPublishingAdapterTest.java @@ -0,0 +1,31 @@ +package io.github.joht.showcase.quarkuseventsourcing.messaging.query.axon; + +import static org.mockito.Mockito.verify; + +import org.axonframework.eventhandling.gateway.EventGateway; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class EventPublishingAdapterTest { + + @Mock + EventGateway eventGateway; + + @InjectMocks + EventPublishingAdapter adapterUnderTest; + + @Test + void eventPublishDelegatedToEventGateway() { + TestEvent testEvent = new TestEvent(); + adapterUnderTest.publish(testEvent); + verify(eventGateway).publish(testEvent); + } + + private static class TestEvent { + + } +}