This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 1d9ea747b9aea5da7f35bff5b0ee7ad188555d62
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Sun Feb 18 09:28:42 2024 +0100

    CAMEL-20361: camel-jbang - Make jolokia pluggable for 
camel-platform-http-main (#12985)
---
 .../DefaultJolokiaPlatformHttpPluginTest.java      |  5 +--
 .../platform/http/main/MainHttpServer.java         | 42 +++++++++++-----------
 .../platform/http/PlatformHttpPluginRegistry.java  |  4 +--
 .../http/spi/PlatformHttpPluginRegistry.java       |  7 ++--
 4 files changed, 31 insertions(+), 27 deletions(-)

diff --git 
a/components/camel-platform-http-jolokia/src/test/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPluginTest.java
 
b/components/camel-platform-http-jolokia/src/test/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPluginTest.java
index f98ef6e22bf..6b7f6caf9cc 100644
--- 
a/components/camel-platform-http-jolokia/src/test/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPluginTest.java
+++ 
b/components/camel-platform-http-jolokia/src/test/java/org/apache/camel/component/platform/http/plugin/DefaultJolokiaPlatformHttpPluginTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.platform.http.plugin;
 import java.util.HashMap;
 import java.util.Optional;
 
+import com.fasterxml.jackson.core.util.VersionUtil;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.component.platform.http.spi.PlatformHttpPluginRegistry;
 import org.apache.camel.support.ResolverHelper;
@@ -37,8 +38,8 @@ public class DefaultJolokiaPlatformHttpPluginTest extends 
ContextTestSupport {
     public void jolokiaPlatformHttpPluginContextTest() throws Exception {
         PlatformHttpPluginRegistry registry = 
resolvePlatformHttpPluginRegistry();
         Assertions.assertNotNull(registry);
-        DefaultJolokiaPlatformHttpPlugin plugin = 
(DefaultJolokiaPlatformHttpPlugin) registry
-                .resolvePluginById("jolokia").orElseThrow();
+        DefaultJolokiaPlatformHttpPlugin plugin = registry
+                .resolvePluginById("jolokia", 
DefaultJolokiaPlatformHttpPlugin.class).orElseThrow();
         Assertions.assertNotNull(plugin);
         HttpRequestHandler handler = plugin.getRequestHandler();
 
diff --git 
a/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
 
b/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
index 882e50ea706..e573fb55254 100644
--- 
a/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
+++ 
b/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
@@ -96,6 +96,8 @@ public class MainHttpServer extends ServiceSupport implements 
CamelContextAware,
 
     private CamelContext camelContext;
     private PlatformHttpComponent platformHttpComponent;
+    private PlatformHttpPluginRegistry pluginRegistry;
+    private JolokiaPlatformHttpPlugin jolokiaPlugin;
 
     private VertxPlatformHttpServerConfiguration configuration = new 
VertxPlatformHttpServerConfiguration();
     private boolean devConsoleEnabled;
@@ -275,24 +277,20 @@ public class MainHttpServer extends ServiceSupport 
implements CamelContextAware,
         server = new VertxPlatformHttpServer(configuration);
         camelContext.addService(server);
 
-        PlatformHttpPluginRegistry pluginRegistry
-                = 
getCamelContext().getCamelContextExtension().getContextPlugin(PlatformHttpPluginRegistry.class);
+        pluginRegistry = 
getCamelContext().getCamelContextExtension().getContextPlugin(PlatformHttpPluginRegistry.class);
         if (pluginRegistry == null && pluginsEnabled()) {
             pluginRegistry = resolvePlatformHttpPluginRegistry();
             pluginRegistry.setCamelContext(getCamelContext());
             
getCamelContext().getCamelContextExtension().addContextPlugin(PlatformHttpPluginRegistry.class,
 pluginRegistry);
         }
-    }
-
-    private boolean pluginsEnabled() {
-        return jolokiaEnabled;
+        ServiceHelper.initService(pluginRegistry);
     }
 
     @Override
     protected void doStart() throws Exception {
         ObjectHelper.notNull(camelContext, "CamelContext");
 
-        ServiceHelper.startService(server);
+        ServiceHelper.startService(server, pluginRegistry);
         router = VertxPlatformHttpRouter.lookup(camelContext);
         platformHttpComponent = camelContext.getComponent("platform-http", 
PlatformHttpComponent.class);
 
@@ -300,6 +298,15 @@ public class MainHttpServer extends ServiceSupport 
implements CamelContextAware,
         setupStartupSummary();
     }
 
+    @Override
+    protected void doShutdown() throws Exception {
+        ServiceHelper.stopAndShutdownService(pluginRegistry);
+    }
+
+    private boolean pluginsEnabled() {
+        return jolokiaEnabled;
+    }
+
     protected void setupConsoles() {
         if (devConsoleEnabled) {
             setupDevConsole();
@@ -451,17 +458,21 @@ public class MainHttpServer extends ServiceSupport 
implements CamelContextAware,
     }
 
     protected void setupJolokia() {
+        // load plugin
+        jolokiaPlugin = 
pluginRegistry.resolvePluginById(JolokiaPlatformHttpPlugin.NAME, 
JolokiaPlatformHttpPlugin.class)
+                .orElseThrow(() -> new RuntimeException(
+                        "JolokiaPlatformHttpPlugin not found. Please add 
camel-platform-http-jolokia dependency."));
+
         Route jolokia = router.route("/q/jolokia/*");
         jolokia.method(HttpMethod.GET);
         jolokia.method(HttpMethod.POST);
 
         Handler<RoutingContext> handler = routingContext -> {
+            HttpRequestHandler requestHandler = 
jolokiaPlugin.getRequestHandler();
 
             HttpServerRequest req = routingContext.request();
             String remainingPath = Utils.pathOffset(req.path(), 
routingContext);
 
-            HttpRequestHandler requestHandler = getHttpRequestHandler();
-
             JSONAware json = null;
             try {
                 requestHandler.checkAccess(req.remoteAddress().host(), 
req.remoteAddress().host(), getOriginOrReferer(req));
@@ -497,17 +508,8 @@ public class MainHttpServer extends ServiceSupport 
implements CamelContextAware,
                 getCamelContext(),
                 PlatformHttpPluginRegistry.FACTORY,
                 PlatformHttpPluginRegistry.class);
-        return result.orElse(null);
-    }
-
-    private HttpRequestHandler getHttpRequestHandler() {
-        PlatformHttpPluginRegistry registry
-                = 
camelContext.getCamelContextExtension().getContextPlugin(PlatformHttpPluginRegistry.class);
-        JolokiaPlatformHttpPlugin jolokia
-                = (JolokiaPlatformHttpPlugin) 
registry.resolvePluginById(JolokiaPlatformHttpPlugin.NAME)
-                        .orElseThrow(() -> new RuntimeException(
-                                "JolokiaPlatformHttpPlugin not found. Please 
add camel-platform-http-jolokia dependency."));
-        return jolokia.getRequestHandler();
+        return result.orElseThrow(() -> new IllegalArgumentException(
+                "Cannot create PlatformHttpPluginRegistry. Make sure 
camel-platform-http JAR is on classpath."));
     }
 
     private Map<String, String[]> getParams(MultiMap params) {
diff --git 
a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpPluginRegistry.java
 
b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpPluginRegistry.java
index b4acd4675e9..91f2a470632 100644
--- 
a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpPluginRegistry.java
+++ 
b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpPluginRegistry.java
@@ -48,7 +48,7 @@ public class PlatformHttpPluginRegistry extends ServiceSupport
     private final Set<PlatformHttpPlugin> plugins = new 
TreeSet<>(Comparator.comparing(PlatformHttpPlugin::getId));
 
     @Override
-    public Optional<PlatformHttpPlugin> resolvePluginById(String id) {
+    public <T extends PlatformHttpPlugin> Optional<T> resolvePluginById(String 
id, Class<T> type) {
         PlatformHttpPlugin answer = plugins.stream().filter(plugin -> 
plugin.getId().equals(id)).findFirst()
                 
.orElse(getCamelContext().getRegistry().findByTypeWithName(PlatformHttpPlugin.class).get(id));
         if (answer == null) {
@@ -58,7 +58,7 @@ public class PlatformHttpPluginRegistry extends ServiceSupport
         if (answer != null) {
             register(answer);
         }
-        return Optional.ofNullable(answer);
+        return Optional.ofNullable(type.cast(answer));
     }
 
     @Override
diff --git 
a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/spi/PlatformHttpPluginRegistry.java
 
b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/spi/PlatformHttpPluginRegistry.java
index 481ac41b6b8..016e3bd94ea 100644
--- 
a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/spi/PlatformHttpPluginRegistry.java
+++ 
b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/spi/PlatformHttpPluginRegistry.java
@@ -31,10 +31,11 @@ public interface PlatformHttpPluginRegistry extends 
CamelContextAware, StaticSer
     /**
      * Resolve a plugin by id
      *
-     * @param  id the plugin id
-     * @return    the plugin if found
+     * @param  id   the plugin id
+     * @param  type the plugin class type
+     * @return      the plugin if found
      */
-    Optional<PlatformHttpPlugin> resolvePluginById(String id);
+    <T extends PlatformHttpPlugin> Optional<T> resolvePluginById(String id, 
Class<T> type);
 
     /**
      * Register the plugin into the registry.

Reply via email to