diff --git a/src/main/java/io/spine/helloworld/server/hello/HelloContext.java b/src/main/java/io/spine/helloworld/server/hello/HelloContext.java index f9eef69..0e505d1 100644 --- a/src/main/java/io/spine/helloworld/server/hello/HelloContext.java +++ b/src/main/java/io/spine/helloworld/server/hello/HelloContext.java @@ -52,6 +52,8 @@ private HelloContext() { public static BoundedContextBuilder newBuilder() { return BoundedContext .singleTenant(NAME) - .add(Console.class); + .add(Console.class) + // Plug a standalone event dispatcher into this Bounded Context. + .addEventDispatcher(new ListenerOfPrinted()); } } diff --git a/src/main/java/io/spine/helloworld/server/hello/ListenerOfPrinted.java b/src/main/java/io/spine/helloworld/server/hello/ListenerOfPrinted.java new file mode 100644 index 0000000..5ca1efa --- /dev/null +++ b/src/main/java/io/spine/helloworld/server/hello/ListenerOfPrinted.java @@ -0,0 +1,59 @@ +/* + * Copyright 2023, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.helloworld.server.hello; + +import io.spine.core.Subscribe; +import io.spine.helloworld.hello.event.Printed; +import io.spine.server.event.AbstractEventSubscriber; +import io.spine.string.Stringifiers; + +import static java.lang.String.format; + +/** + * Listens to {@link io.spine.helloworld.hello.event.Printed Printed} events. + */ +final class ListenerOfPrinted extends AbstractEventSubscriber { + + /** + * Subscribes to {@code Printed} domain events. + * + *

This is a no-op implementation. In real life, Spine end-users + * may choose to send this event (or whichever they subscribe to) + * down their pipeline, including any external systems, such as Kafka. + * + * @param event an event emitted somewhere outside of this subscriber + */ + @Subscribe + @SuppressWarnings({ + "UseOfSystemOutOrSystemErr" /* To print out the event in its simplest form. */, + "unused" /* This method is invoked by Spine framework. */}) + void on(Printed event) { + String message = format("[Listener of `Printed`] An event is received: %s", + Stringifiers.toString(event)); + System.out.println(message); + } +}