From 148db53797971b6b2a240ed4628511c838835c47 Mon Sep 17 00:00:00 2001 From: Phillip Kruger Date: Wed, 26 Jul 2023 19:50:20 +1000 Subject: [PATCH] Remove Old Dev UI: Reactive messaging Signed-off-by: Phillip Kruger --- .../ReactiveMessagingDevUIProcessor.java} | 39 +++++++----- .../ReactiveMessagingDevUiProcessor.java | 27 --------- .../resources/dev-templates/channels.html | 44 -------------- .../resources/dev-templates/embedded.html | 4 -- .../tags/componentDescription.html | 17 ------ ...wc-smallrye-reactive-messaging-channels.js | 2 +- .../DevReactiveMessagingInfosSupplier.java | 12 ---- .../{devconsole => devui}/Connectors.java | 6 +- .../DevConsoleRecorder.java | 2 +- .../DevReactiveMessagingInfos.java | 2 +- .../ReactiveMessagingJsonRpcService.java | 4 +- .../DevConsoleReactiveMessagingSmokeTest.java | 33 ----------- .../test/devconsole/DummyConnector.java | 22 ------- .../quarkus/test/devconsole/MyProcessor.java | 59 ------------------- 14 files changed, 31 insertions(+), 242 deletions(-) rename extensions/smallrye-reactive-messaging/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/deployment/{devconsole/ReactiveMessagingDevConsoleProcessor.java => devui/ReactiveMessagingDevUIProcessor.java} (66%) delete mode 100644 extensions/smallrye-reactive-messaging/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/deployment/devui/ReactiveMessagingDevUiProcessor.java delete mode 100644 extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/channels.html delete mode 100644 extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/embedded.html delete mode 100644 extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/tags/componentDescription.html delete mode 100644 extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/DevReactiveMessagingInfosSupplier.java rename extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/{devconsole => devui}/Connectors.java (94%) rename extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/{devconsole => devui}/DevConsoleRecorder.java (87%) rename extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/{devconsole => devui}/DevReactiveMessagingInfos.java (99%) rename extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/{devconsole => devui}/ReactiveMessagingJsonRpcService.java (89%) delete mode 100644 integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleReactiveMessagingSmokeTest.java delete mode 100644 integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DummyConnector.java delete mode 100644 integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/MyProcessor.java diff --git a/extensions/smallrye-reactive-messaging/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/deployment/devconsole/ReactiveMessagingDevConsoleProcessor.java b/extensions/smallrye-reactive-messaging/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/deployment/devui/ReactiveMessagingDevUIProcessor.java similarity index 66% rename from extensions/smallrye-reactive-messaging/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/deployment/devconsole/ReactiveMessagingDevConsoleProcessor.java rename to extensions/smallrye-reactive-messaging/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/deployment/devui/ReactiveMessagingDevUIProcessor.java index a5e2610f9f6e1..86149d0b1a061 100644 --- a/extensions/smallrye-reactive-messaging/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/deployment/devconsole/ReactiveMessagingDevConsoleProcessor.java +++ b/extensions/smallrye-reactive-messaging/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/deployment/devui/ReactiveMessagingDevUIProcessor.java @@ -1,4 +1,4 @@ -package io.quarkus.smallrye.reactivemessaging.deployment.devconsole; +package io.quarkus.smallrye.reactivemessaging.deployment.devui; import static io.quarkus.deployment.annotations.ExecutionTime.STATIC_INIT; @@ -12,23 +12,17 @@ import io.quarkus.arc.processor.InjectionPointInfo; import io.quarkus.deployment.IsDevelopment; import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.deployment.annotations.Record; -import io.quarkus.deployment.pkg.builditem.CurateOutcomeBuildItem; -import io.quarkus.devconsole.spi.DevConsoleRuntimeTemplateInfoBuildItem; +import io.quarkus.devui.spi.JsonRPCProvidersBuildItem; +import io.quarkus.devui.spi.page.CardPageBuildItem; +import io.quarkus.devui.spi.page.Page; import io.quarkus.smallrye.reactivemessaging.deployment.ReactiveMessagingDotNames; -import io.quarkus.smallrye.reactivemessaging.runtime.devconsole.Connectors; -import io.quarkus.smallrye.reactivemessaging.runtime.devconsole.DevConsoleRecorder; -import io.quarkus.smallrye.reactivemessaging.runtime.devconsole.DevReactiveMessagingInfosSupplier; +import io.quarkus.smallrye.reactivemessaging.runtime.devui.Connectors; +import io.quarkus.smallrye.reactivemessaging.runtime.devui.DevConsoleRecorder; +import io.quarkus.smallrye.reactivemessaging.runtime.devui.ReactiveMessagingJsonRpcService; -public class ReactiveMessagingDevConsoleProcessor { +public class ReactiveMessagingDevUIProcessor { - @BuildStep(onlyIf = IsDevelopment.class) - public DevConsoleRuntimeTemplateInfoBuildItem collectInfos(CurateOutcomeBuildItem curateOutcomeBuildItem) { - return new DevConsoleRuntimeTemplateInfoBuildItem("reactiveMessagingInfos", - new DevReactiveMessagingInfosSupplier(), this.getClass(), curateOutcomeBuildItem); - } - - @Record(STATIC_INIT) + @io.quarkus.deployment.annotations.Record(STATIC_INIT) @BuildStep(onlyIf = IsDevelopment.class) public void collectInjectionInfo(DevConsoleRecorder recorder, BeanDiscoveryFinishedBuildItem beanDiscoveryFinished) { Map emitters = new HashMap<>(); @@ -59,4 +53,19 @@ AdditionalBeanBuildItem beans() { return AdditionalBeanBuildItem.unremovableOf(Connectors.class); } + @BuildStep(onlyIf = IsDevelopment.class) + CardPageBuildItem create() { + CardPageBuildItem card = new CardPageBuildItem(); + card.addPage(Page.webComponentPageBuilder() + .title("Channels") + .componentLink("qwc-smallrye-reactive-messaging-channels.js") + .icon("font-awesome-solid:diagram-project")); + + return card; + } + + @BuildStep(onlyIf = IsDevelopment.class) + JsonRPCProvidersBuildItem createJsonRPCServiceForCache() { + return new JsonRPCProvidersBuildItem(ReactiveMessagingJsonRpcService.class); + } } diff --git a/extensions/smallrye-reactive-messaging/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/deployment/devui/ReactiveMessagingDevUiProcessor.java b/extensions/smallrye-reactive-messaging/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/deployment/devui/ReactiveMessagingDevUiProcessor.java deleted file mode 100644 index ef4920a575f95..0000000000000 --- a/extensions/smallrye-reactive-messaging/deployment/src/main/java/io/quarkus/smallrye/reactivemessaging/deployment/devui/ReactiveMessagingDevUiProcessor.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.quarkus.smallrye.reactivemessaging.deployment.devui; - -import io.quarkus.deployment.IsDevelopment; -import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.devui.spi.JsonRPCProvidersBuildItem; -import io.quarkus.devui.spi.page.CardPageBuildItem; -import io.quarkus.devui.spi.page.Page; -import io.quarkus.smallrye.reactivemessaging.runtime.devconsole.ReactiveMessagingJsonRpcService; - -public class ReactiveMessagingDevUiProcessor { - - @BuildStep(onlyIf = IsDevelopment.class) - CardPageBuildItem create() { - CardPageBuildItem card = new CardPageBuildItem(); - card.addPage(Page.webComponentPageBuilder() - .title("Channels") - .componentLink("qwc-smallrye-reactive-messaging-channels.js") - .icon("font-awesome-solid:diagram-project")); - - return card; - } - - @BuildStep(onlyIf = IsDevelopment.class) - JsonRPCProvidersBuildItem createJsonRPCServiceForCache() { - return new JsonRPCProvidersBuildItem(ReactiveMessagingJsonRpcService.class); - } -} diff --git a/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/channels.html b/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/channels.html deleted file mode 100644 index 732c6661fd9e8..0000000000000 --- a/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/channels.html +++ /dev/null @@ -1,44 +0,0 @@ -{#include main fluid=true} - {#style} - .annotation { - color: gray; - } - {/style} - {#title}Channels{/title} - {#body} - - - - - - - - - - - {#for channel in info:reactiveMessagingInfos.channels} - - - - - - {/for} - -
#NamePublisherConsumers
{channel_count}.{channel.name}{#componentDescription channel.publisher /} - {#if channel.consumers} - {#when channel.consumers.size} - {#is 1} - {#componentDescription channel.consumers.get(0) /} - {#is > 1} -
    - {#for consumer in channel.consumers} -
  • {#componentDescription consumer /}
  • - {/for} -
- {#else} - N/A - {/when} - {/if} -
- {/body} -{/include} \ No newline at end of file diff --git a/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/embedded.html b/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/embedded.html deleted file mode 100644 index 24a6e88328be2..0000000000000 --- a/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/embedded.html +++ /dev/null @@ -1,4 +0,0 @@ - - - Channels {info:reactiveMessagingInfos.channels.size} -
\ No newline at end of file diff --git a/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/tags/componentDescription.html b/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/tags/componentDescription.html deleted file mode 100644 index 2bbf8919087c6..0000000000000 --- a/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-templates/tags/componentDescription.html +++ /dev/null @@ -1,17 +0,0 @@ -{#if it} -{#when it.type} - {#case PUBLISHER} - Publisher: - {#case SUBSCRIBER} - Subscriber: - {#case PROCESSOR} - Processor: - {#case CONNECTOR} - Connector: - {#case EMITTER} - Emitter: - {#case CHANNEL} - Channel: -{/when} -{it.description.raw} -{/if} \ No newline at end of file diff --git a/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-ui/qwc-smallrye-reactive-messaging-channels.js b/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-ui/qwc-smallrye-reactive-messaging-channels.js index e2cef7692aff2..f382cbdf19ce2 100644 --- a/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-ui/qwc-smallrye-reactive-messaging-channels.js +++ b/extensions/smallrye-reactive-messaging/deployment/src/main/resources/dev-ui/qwc-smallrye-reactive-messaging-channels.js @@ -24,7 +24,7 @@ export class QwcSmallryeReactiveMessagingChannels extends LitElement { `; static properties = { - "_channels": {state: true, type: Array} + _channels: {state: true, type: Array} } /** diff --git a/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/DevReactiveMessagingInfosSupplier.java b/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/DevReactiveMessagingInfosSupplier.java deleted file mode 100644 index 2ae717f634c93..0000000000000 --- a/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/DevReactiveMessagingInfosSupplier.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.quarkus.smallrye.reactivemessaging.runtime.devconsole; - -import java.util.function.Supplier; - -public class DevReactiveMessagingInfosSupplier implements Supplier { - - @Override - public DevReactiveMessagingInfos get() { - return new DevReactiveMessagingInfos(); - } - -} diff --git a/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/Connectors.java b/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/Connectors.java similarity index 94% rename from extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/Connectors.java rename to extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/Connectors.java index 898d181381cf3..a7a1ad38292fc 100644 --- a/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/Connectors.java +++ b/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/Connectors.java @@ -1,4 +1,4 @@ -package io.quarkus.smallrye.reactivemessaging.runtime.devconsole; +package io.quarkus.smallrye.reactivemessaging.runtime.devui; import java.util.ArrayList; import java.util.HashMap; @@ -12,8 +12,8 @@ import org.eclipse.microprofile.config.Config; import io.quarkus.runtime.StartupEvent; -import io.quarkus.smallrye.reactivemessaging.runtime.devconsole.DevReactiveMessagingInfos.Component; -import io.quarkus.smallrye.reactivemessaging.runtime.devconsole.DevReactiveMessagingInfos.ComponentType; +import io.quarkus.smallrye.reactivemessaging.runtime.devui.DevReactiveMessagingInfos.Component; +import io.quarkus.smallrye.reactivemessaging.runtime.devui.DevReactiveMessagingInfos.ComponentType; // we use a separate component due to weird class loading issues that occur when accessing config properties @Singleton diff --git a/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/DevConsoleRecorder.java b/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/DevConsoleRecorder.java similarity index 87% rename from extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/DevConsoleRecorder.java rename to extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/DevConsoleRecorder.java index ac5363b9cb5c7..60dcf5ed50b60 100644 --- a/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/DevConsoleRecorder.java +++ b/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/DevConsoleRecorder.java @@ -1,4 +1,4 @@ -package io.quarkus.smallrye.reactivemessaging.runtime.devconsole; +package io.quarkus.smallrye.reactivemessaging.runtime.devui; import java.util.HashMap; import java.util.Map; diff --git a/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/DevReactiveMessagingInfos.java b/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/DevReactiveMessagingInfos.java similarity index 99% rename from extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/DevReactiveMessagingInfos.java rename to extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/DevReactiveMessagingInfos.java index 946e13c84e338..6f79ad41b86e1 100644 --- a/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/DevReactiveMessagingInfos.java +++ b/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/DevReactiveMessagingInfos.java @@ -1,4 +1,4 @@ -package io.quarkus.smallrye.reactivemessaging.runtime.devconsole; +package io.quarkus.smallrye.reactivemessaging.runtime.devui; import java.util.ArrayList; import java.util.Collections; diff --git a/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/ReactiveMessagingJsonRpcService.java b/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/ReactiveMessagingJsonRpcService.java similarity index 89% rename from extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/ReactiveMessagingJsonRpcService.java rename to extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/ReactiveMessagingJsonRpcService.java index b5d77c01ccd3c..3e83d74354348 100644 --- a/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devconsole/ReactiveMessagingJsonRpcService.java +++ b/extensions/smallrye-reactive-messaging/runtime/src/main/java/io/quarkus/smallrye/reactivemessaging/runtime/devui/ReactiveMessagingJsonRpcService.java @@ -1,4 +1,4 @@ -package io.quarkus.smallrye.reactivemessaging.runtime.devconsole; +package io.quarkus.smallrye.reactivemessaging.runtime.devui; import java.util.List; @@ -10,8 +10,6 @@ @ApplicationScoped public class ReactiveMessagingJsonRpcService { - // IMPORTANT: To avoid having to depend on jackson, we build a JSON array containing the description of the channels. - public JsonArray getInfo() { JsonArray result = new JsonArray(); diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleReactiveMessagingSmokeTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleReactiveMessagingSmokeTest.java deleted file mode 100644 index d6c06a45359ce..0000000000000 --- a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleReactiveMessagingSmokeTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.quarkus.test.devconsole; - -import org.hamcrest.Matchers; -import org.jboss.shrinkwrap.api.asset.StringAsset; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; - -import io.quarkus.test.QuarkusDevModeTest; -import io.restassured.RestAssured; - -/** - * Note that this test cannot be placed under the relevant {@code -deployment} module because then the DEV UI processor would - * not be able to locate the template resources correctly. - */ -public class DevConsoleReactiveMessagingSmokeTest { - - @RegisterExtension - static final QuarkusDevModeTest config = new QuarkusDevModeTest() - .withApplicationRoot((jar) -> jar.addClasses(MyProcessor.class, DummyConnector.class) - .addAsResource( - new StringAsset( - "mp.messaging.incoming.input.connector=dummy\n" - + "mp.messaging.incoming.input.values=hallo"), - "application.properties")); - - @Test - public void testProcessor() { - RestAssured.get("q/dev-v1/io.quarkus.quarkus-smallrye-reactive-messaging/channels") - .then() - .statusCode(200).body(Matchers.containsString("io.quarkus.test.devconsole.MyProcessor#process")); - } - -} diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DummyConnector.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DummyConnector.java deleted file mode 100644 index 2bc3f3688b065..0000000000000 --- a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DummyConnector.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.quarkus.test.devconsole; - -import jakarta.enterprise.context.ApplicationScoped; - -import org.eclipse.microprofile.config.Config; -import org.eclipse.microprofile.reactive.messaging.Message; -import org.eclipse.microprofile.reactive.messaging.spi.Connector; -import org.eclipse.microprofile.reactive.messaging.spi.IncomingConnectorFactory; -import org.eclipse.microprofile.reactive.streams.operators.PublisherBuilder; -import org.eclipse.microprofile.reactive.streams.operators.ReactiveStreams; - -@ApplicationScoped -@Connector("dummy") -public class DummyConnector implements IncomingConnectorFactory { - - @Override - public PublisherBuilder> getPublisherBuilder(Config config) { - String values = config.getValue("values", String.class); - return ReactiveStreams.of(values, values.toUpperCase()) - .map(Message::of); - } -} diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/MyProcessor.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/MyProcessor.java deleted file mode 100644 index d9a63239dff43..0000000000000 --- a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/MyProcessor.java +++ /dev/null @@ -1,59 +0,0 @@ -package io.quarkus.test.devconsole; - -import java.util.concurrent.Flow; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.enterprise.event.Observes; -import jakarta.enterprise.inject.Instance; -import jakarta.inject.Inject; - -import org.eclipse.microprofile.reactive.messaging.Channel; -import org.eclipse.microprofile.reactive.messaging.Incoming; -import org.eclipse.microprofile.reactive.messaging.Outgoing; - -import io.smallrye.reactive.messaging.annotations.Broadcast; -import io.vertx.core.http.HttpServerResponse; -import io.vertx.ext.web.Router; - -@ApplicationScoped -public class MyProcessor { - - @Inject - @Channel("processed") - Instance> channel; - - public void init(@Observes Router router) { - router.get().handler(rc -> { - HttpServerResponse response = rc.response(); - channel.get().subscribe(new Flow.Subscriber() { - @Override - public void onSubscribe(Flow.Subscription subscription) { - response.putHeader("Transfer-encoding", "chunked"); - subscription.request(2); - } - - @Override - public void onNext(String s) { - response.write(s); - } - - @Override - public void onError(Throwable throwable) { - // ignore it. - } - - @Override - public void onComplete() { - response.end(); - } - }); - }); - } - - @Incoming("input") - @Outgoing("processed") - @Broadcast - public String process(String input) { - return input.toUpperCase(); - } -}