You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/04/01 11:30:31 UTC

[camel] 02/02: CAMEL-15105: make the HealthCheckResolver a plugin of the context

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

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

commit 5a8152e8fda68aea05ce5c0e35d7e153220611ce
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Sat Apr 1 12:27:59 2023 +0200

    CAMEL-15105: make the HealthCheckResolver a plugin of the context
---
 .../java/org/apache/camel/ExtendedCamelContext.java   | 16 ----------------
 .../org/apache/camel/health/HealthCheckHelper.java    |  4 ++--
 .../camel/impl/engine/AbstractCamelContext.java       |  4 +---
 .../impl/engine/DefaultCamelContextExtension.java     | 18 ------------------
 .../camel/impl/ExtendedCamelContextConfigurer.java    |  6 ------
 .../impl/lw/LightweightCamelContextExtension.java     | 12 ------------
 .../impl/health/HealthCheckResultStrategyTest.java    |  7 +++----
 .../camel/impl/health/MyFooHealthCheckTest.java       |  7 +++----
 .../camel/impl/health/DefaultHealthCheckRegistry.java |  5 +++--
 .../camel/impl/health/DefaultHealthChecksLoader.java  |  2 +-
 .../java/org/apache/camel/support/PluginHelper.java   | 19 +++++++++++++++++++
 11 files changed, 32 insertions(+), 68 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
index 3cd1cc335be..e1f660b45f6 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -23,7 +23,6 @@ import java.util.function.Supplier;
 
 import org.apache.camel.catalog.RuntimeCamelCatalog;
 import org.apache.camel.console.DevConsoleResolver;
-import org.apache.camel.health.HealthCheckResolver;
 import org.apache.camel.spi.AnnotationBasedProcessorFactory;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.BeanIntrospection;
@@ -45,7 +44,6 @@ import org.apache.camel.spi.LogListener;
 import org.apache.camel.spi.ManagementMBeanAssembler;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.NormalizedEndpointUri;
-import org.apache.camel.spi.PeriodTaskScheduler;
 import org.apache.camel.spi.PluginManager;
 import org.apache.camel.spi.ProcessorExchangeFactory;
 import org.apache.camel.spi.ProcessorFactory;
@@ -277,20 +275,6 @@ public interface ExtendedCamelContext {
      */
     void setErrorHandlerFactory(ErrorHandlerFactory errorHandlerFactory);
 
-    /**
-     * Gets the current health check resolver
-     *
-     * @return the resolver
-     */
-    HealthCheckResolver getHealthCheckResolver();
-
-    /**
-     * Sets a custom health check resolver
-     *
-     * @param healthCheckResolver the resolver
-     */
-    void setHealthCheckResolver(HealthCheckResolver healthCheckResolver);
-
     /**
      * Gets the current dev console resolver
      *
diff --git a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
index ae8451eb1df..581abc7d57d 100644
--- a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
+++ b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckHelper.java
@@ -226,7 +226,7 @@ public final class HealthCheckHelper {
             if (check.isEmpty()) {
                 // use resolver to load from classpath if needed
                 HealthCheckResolver resolver
-                        = context.getCamelContextExtension().getHealthCheckResolver();
+                        = context.getCamelContextExtension().getContextPlugin(HealthCheckResolver.class);
                 HealthCheck hc = resolver.resolveHealthCheck(id);
                 if (hc != null) {
                     check = Optional.of(hc);
@@ -272,7 +272,7 @@ public final class HealthCheckHelper {
             if (repo.isEmpty()) {
                 // use resolver to load from classpath if needed
                 HealthCheckResolver resolver
-                        = context.getCamelContextExtension().getHealthCheckResolver();
+                        = context.getCamelContextExtension().getContextPlugin(HealthCheckResolver.class);
                 HealthCheckRepository hr = resolver.resolveHealthCheckRepository(id);
                 if (hr != null) {
                     repo = Optional.of(hr);
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 5fbee500fa4..e757fe2ce8b 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -211,7 +211,6 @@ public abstract class AbstractCamelContext extends BaseService
     volatile ProcessorExchangeFactory processorExchangeFactory;
     volatile ReactiveExecutor reactiveExecutor;
     volatile Registry registry;
-    volatile HealthCheckResolver healthCheckResolver;
     volatile DevConsoleResolver devConsoleResolver;
     volatile ManagementStrategy managementStrategy;
     volatile ManagementMBeanAssembler managementMBeanAssembler;
@@ -380,6 +379,7 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.addContextPlugin(DataFormatResolver.class, createDataFormatResolver());
         camelContextExtension.lazyAddContextPlugin(PeriodTaskResolver.class, this::createPeriodTaskResolver);
         camelContextExtension.lazyAddContextPlugin(PeriodTaskScheduler.class, this::createPeriodTaskScheduler);
+        camelContextExtension.lazyAddContextPlugin(HealthCheckResolver.class, this::createHealthCheckResolver);
 
         if (build) {
             try {
@@ -3263,8 +3263,6 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.getDefaultFactoryFinder();
         getPropertiesComponent();
 
-        camelContextExtension.getHealthCheckResolver();
-
         getExecutorServiceManager();
         camelContextExtension.getExchangeFactoryManager();
         camelContextExtension.getExchangeFactory();
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
index 5d67e91d200..620cc38228c 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
@@ -37,7 +37,6 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.Service;
 import org.apache.camel.catalog.RuntimeCamelCatalog;
 import org.apache.camel.console.DevConsoleResolver;
-import org.apache.camel.health.HealthCheckResolver;
 import org.apache.camel.spi.AnnotationBasedProcessorFactory;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.BeanIntrospection;
@@ -64,7 +63,6 @@ import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.spi.ManagementStrategyFactory;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.NormalizedEndpointUri;
-import org.apache.camel.spi.PeriodTaskScheduler;
 import org.apache.camel.spi.PluginManager;
 import org.apache.camel.spi.ProcessorExchangeFactory;
 import org.apache.camel.spi.ProcessorFactory;
@@ -460,22 +458,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
         this.basePackageScan = basePackageScan;
     }
 
-    public HealthCheckResolver getHealthCheckResolver() {
-        if (camelContext.healthCheckResolver == null) {
-            synchronized (camelContext.lock) {
-                if (camelContext.healthCheckResolver == null) {
-                    setHealthCheckResolver(camelContext.createHealthCheckResolver());
-                }
-            }
-        }
-        return camelContext.healthCheckResolver;
-    }
-
-    @Override
-    public void setHealthCheckResolver(HealthCheckResolver healthCheckResolver) {
-        camelContext.healthCheckResolver = camelContext.getInternalServiceManager().addService(healthCheckResolver);
-    }
-
     public DevConsoleResolver getDevConsoleResolver() {
         if (camelContext.devConsoleResolver == null) {
             synchronized (camelContext.lock) {
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 1d4595d1dd8..982cebd9d75 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -47,8 +47,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ExchangeFactoryManager": target.setExchangeFactoryManager(property(camelContext, org.apache.camel.spi.ExchangeFactoryManager.class, value)); return true;
         case "headersmapfactory":
         case "HeadersMapFactory": target.setHeadersMapFactory(property(camelContext, org.apache.camel.spi.HeadersMapFactory.class, value)); return true;
-        case "healthcheckresolver":
-        case "HealthCheckResolver": target.setHealthCheckResolver(property(camelContext, org.apache.camel.health.HealthCheckResolver.class, value)); return true;
         case "interceptendpointfactory":
         case "InterceptEndpointFactory": target.setInterceptEndpointFactory(property(camelContext, org.apache.camel.spi.InterceptEndpointFactory.class, value)); return true;
         case "internalprocessorfactory":
@@ -114,8 +112,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ExchangeFactoryManager": return org.apache.camel.spi.ExchangeFactoryManager.class;
         case "headersmapfactory":
         case "HeadersMapFactory": return org.apache.camel.spi.HeadersMapFactory.class;
-        case "healthcheckresolver":
-        case "HealthCheckResolver": return org.apache.camel.health.HealthCheckResolver.class;
         case "interceptendpointfactory":
         case "InterceptEndpointFactory": return org.apache.camel.spi.InterceptEndpointFactory.class;
         case "internalprocessorfactory":
@@ -182,8 +178,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ExchangeFactoryManager": return target.getExchangeFactoryManager();
         case "headersmapfactory":
         case "HeadersMapFactory": return target.getHeadersMapFactory();
-        case "healthcheckresolver":
-        case "HealthCheckResolver": return target.getHealthCheckResolver();
         case "interceptendpointfactory":
         case "InterceptEndpointFactory": return target.getInterceptEndpointFactory();
         case "internalprocessorfactory":
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
index 9257979aedd..35da047b4ee 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
@@ -38,7 +38,6 @@ import org.apache.camel.Service;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.catalog.RuntimeCamelCatalog;
 import org.apache.camel.console.DevConsoleResolver;
-import org.apache.camel.health.HealthCheckResolver;
 import org.apache.camel.spi.AnnotationBasedProcessorFactory;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.BeanIntrospection;
@@ -59,7 +58,6 @@ import org.apache.camel.spi.LogListener;
 import org.apache.camel.spi.ManagementMBeanAssembler;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.NormalizedEndpointUri;
-import org.apache.camel.spi.PeriodTaskScheduler;
 import org.apache.camel.spi.PluginManager;
 import org.apache.camel.spi.ProcessorExchangeFactory;
 import org.apache.camel.spi.ProcessorFactory;
@@ -106,16 +104,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public HealthCheckResolver getHealthCheckResolver() {
-        return camelContext.getCamelContextExtension().getHealthCheckResolver();
-    }
-
-    @Override
-    public void setHealthCheckResolver(HealthCheckResolver healthCheckResolver) {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public DevConsoleResolver getDevConsoleResolver() {
         return camelContext.getCamelContextExtension().getDevConsoleResolver();
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/health/HealthCheckResultStrategyTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/health/HealthCheckResultStrategyTest.java
index ee327fb07e5..8aa633e8929 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/health/HealthCheckResultStrategyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/health/HealthCheckResultStrategyTest.java
@@ -25,6 +25,7 @@ import org.apache.camel.health.HealthCheckHelper;
 import org.apache.camel.health.HealthCheckRegistry;
 import org.apache.camel.health.HealthCheckResultBuilder;
 import org.apache.camel.health.HealthCheckResultStrategy;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -40,8 +41,7 @@ public class HealthCheckResultStrategyTest extends ContextTestSupport {
         context.getRegistry().bind("myStrategy", new MyResultStrategy());
         context.start();
 
-        HealthCheck hc
-                = context.getCamelContextExtension().getHealthCheckResolver().resolveHealthCheck("myfoo");
+        HealthCheck hc = PluginHelper.getHealthCheckResolver(context).resolveHealthCheck("myfoo");
         Assertions.assertNotNull(hc);
 
         Assertions.assertEquals("acme", hc.getGroup());
@@ -58,8 +58,7 @@ public class HealthCheckResultStrategyTest extends ContextTestSupport {
         context.getRegistry().bind("myStrategy", new MyResultStrategy());
         context.start();
 
-        HealthCheck hc
-                = context.getCamelContextExtension().getHealthCheckResolver().resolveHealthCheck("myfoo");
+        HealthCheck hc = PluginHelper.getHealthCheckResolver(context).resolveHealthCheck("myfoo");
         Assertions.assertNotNull(hc);
 
         HealthCheckRegistry hcr = context.getCamelContextExtension().getContextPlugin(HealthCheckRegistry.class);
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/health/MyFooHealthCheckTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/health/MyFooHealthCheckTest.java
index 78af86ca0b7..1808736f25b 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/health/MyFooHealthCheckTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/health/MyFooHealthCheckTest.java
@@ -22,6 +22,7 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.health.HealthCheck;
 import org.apache.camel.health.HealthCheckHelper;
 import org.apache.camel.health.HealthCheckRegistry;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -36,8 +37,7 @@ public class MyFooHealthCheckTest extends ContextTestSupport {
     public void testMyFoo() throws Exception {
         context.start();
 
-        HealthCheck hc
-                = context.getCamelContextExtension().getHealthCheckResolver().resolveHealthCheck("myfoo");
+        HealthCheck hc = PluginHelper.getHealthCheckResolver(context).resolveHealthCheck("myfoo");
         Assertions.assertNotNull(hc);
 
         Assertions.assertEquals("acme", hc.getGroup());
@@ -53,8 +53,7 @@ public class MyFooHealthCheckTest extends ContextTestSupport {
     public void testAddToRegistry() throws Exception {
         context.start();
 
-        HealthCheck hc
-                = context.getCamelContextExtension().getHealthCheckResolver().resolveHealthCheck("myfoo");
+        HealthCheck hc = PluginHelper.getHealthCheckResolver(context).resolveHealthCheck("myfoo");
         Assertions.assertNotNull(hc);
 
         HealthCheckRegistry hcr = context.getCamelContextExtension().getContextPlugin(HealthCheckRegistry.class);
diff --git a/core/camel-health/src/main/java/org/apache/camel/impl/health/DefaultHealthCheckRegistry.java b/core/camel-health/src/main/java/org/apache/camel/impl/health/DefaultHealthCheckRegistry.java
index ea7dde4d017..c5d6869bc6b 100644
--- a/core/camel-health/src/main/java/org/apache/camel/impl/health/DefaultHealthCheckRegistry.java
+++ b/core/camel-health/src/main/java/org/apache/camel/impl/health/DefaultHealthCheckRegistry.java
@@ -30,6 +30,7 @@ import org.apache.camel.health.HealthCheckRegistry;
 import org.apache.camel.health.HealthCheckRepository;
 import org.apache.camel.health.HealthCheckResolver;
 import org.apache.camel.support.PatternHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
@@ -177,7 +178,7 @@ public class DefaultHealthCheckRegistry extends ServiceSupport implements Health
         HealthCheck answer = checks.stream().filter(h -> h.getId().equals(id)).findFirst()
                 .orElse(camelContext.getRegistry().findByTypeWithName(HealthCheck.class).get(id));
         if (answer == null) {
-            HealthCheckResolver resolver = camelContext.getCamelContextExtension().getHealthCheckResolver();
+            HealthCheckResolver resolver = PluginHelper.getHealthCheckResolver(camelContext);
             answer = resolver.resolveHealthCheck(id);
         }
 
@@ -190,7 +191,7 @@ public class DefaultHealthCheckRegistry extends ServiceSupport implements Health
                 .orElse(camelContext.getRegistry().findByTypeWithName(HealthCheckRepository.class).get(id));
         if (answer == null) {
             // discover via classpath (try first via -health-check-repository and then id as-is)
-            HealthCheckResolver resolver = camelContext.getCamelContextExtension().getHealthCheckResolver();
+            HealthCheckResolver resolver = PluginHelper.getHealthCheckResolver(camelContext);
             answer = resolver.resolveHealthCheckRepository(id);
         }
 
diff --git a/core/camel-health/src/main/java/org/apache/camel/impl/health/DefaultHealthChecksLoader.java b/core/camel-health/src/main/java/org/apache/camel/impl/health/DefaultHealthChecksLoader.java
index d9f6eb684f6..3457e6fec6b 100644
--- a/core/camel-health/src/main/java/org/apache/camel/impl/health/DefaultHealthChecksLoader.java
+++ b/core/camel-health/src/main/java/org/apache/camel/impl/health/DefaultHealthChecksLoader.java
@@ -44,7 +44,7 @@ public class DefaultHealthChecksLoader {
     public DefaultHealthChecksLoader(CamelContext camelContext) {
         this.camelContext = camelContext;
         this.resolver = PluginHelper.getPackageScanResourceResolver(camelContext);
-        this.healthCheckResolver = camelContext.getCamelContextExtension().getHealthCheckResolver();
+        this.healthCheckResolver = PluginHelper.getHealthCheckResolver(camelContext);
     }
 
     public Collection<HealthCheck> loadHealthChecks() {
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
index 7e04519984b..9e2c84da612 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
@@ -21,6 +21,7 @@ import java.util.concurrent.ScheduledExecutorService;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.health.HealthCheckResolver;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.CamelDependencyInjectionAnnotationFactory;
 import org.apache.camel.spi.ComponentNameResolver;
@@ -307,4 +308,22 @@ public final class PluginHelper {
     public static PeriodTaskScheduler getPeriodTaskScheduler(ExtendedCamelContext extendedCamelContext) {
         return extendedCamelContext.getContextPlugin(PeriodTaskScheduler.class);
     }
+
+    /**
+     * Gets the current health check resolver
+     *
+     * @return the resolver
+     */
+    public static HealthCheckResolver getHealthCheckResolver(CamelContext camelContext) {
+        return getHealthCheckResolver(camelContext.getCamelContextExtension());
+    }
+
+    /**
+     * Gets the current health check resolver
+     *
+     * @return the resolver
+     */
+    public static HealthCheckResolver getHealthCheckResolver(ExtendedCamelContext extendedCamelContext) {
+        return extendedCamelContext.getContextPlugin(HealthCheckResolver.class);
+    }
 }