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

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


The following commit(s) were added to refs/heads/master by this push:
     new 446b34a  camel-health - microprofile-health make it work better with 
camel-quarkus as it has some special builditem in its feature to discover from 
classpath health-check implementations and auto register them. So we need to 
handle this and have its own context check too.
446b34a is described below

commit 446b34a5eec403e07973d35aabfb84370d138076
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Sun May 31 11:33:16 2020 +0200

    camel-health - microprofile-health make it work better with camel-quarkus 
as it has some special builditem in its feature to discover from classpath 
health-check implementations and auto register them. So we need to handle this 
and have its own context check too.
---
 .../AbstractCamelMicroProfileHealthCheck.java      |  5 +++-
 .../health/CamelMicroProfileContextCheck.java      | 30 +++++-----------------
 .../health/CamelMicroProfileLivenessCheck.java     |  3 ---
 .../health/CamelMicroProfileReadinessCheck.java    |  3 ---
 .../health/CamelMicroProfileHealthCheckTest.java   |  2 --
 .../apache/camel/health/HealthCheckRegistry.java   |  5 ++++
 .../camel/impl/engine/AbstractCamelContext.java    |  4 ++-
 .../impl/health/DefaultHealthCheckRegistry.java    | 25 ++++++++++++++++--
 ...ory.java => HealthCheckRegistryRepository.java} | 12 ++++++---
 .../camel/main/DefaultConfigurationConfigurer.java | 30 ++++++++--------------
 10 files changed, 59 insertions(+), 60 deletions(-)

diff --git 
a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java
 
b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java
index 5e55165..fcdd558 100644
--- 
a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java
+++ 
b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/AbstractCamelMicroProfileHealthCheck.java
@@ -46,7 +46,10 @@ public abstract class AbstractCamelMicroProfileHealthCheck 
implements HealthChec
         builder.name(getHealthCheckName());
 
         if (camelContext != null) {
-            Collection<Result> results = 
HealthCheckHelper.invoke(camelContext, (HealthCheckFilter) check -> 
check.getGroup() != null && 
check.getGroup().equals(getHealthGroupFilterExclude()));
+            Collection<Result> results = HealthCheckHelper.invoke(camelContext,
+                    (HealthCheckFilter) check ->
+                            // skip context as we have our own context check
+                            check.getId().equals("context") || 
check.getGroup() != null && 
check.getGroup().equals(getHealthGroupFilterExclude()));
             if (!results.isEmpty()) {
                 builder.up();
             }
diff --git 
a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileContextCheck.java
 
b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileContextCheck.java
index 770fb5a..1e754a7 100644
--- 
a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileContextCheck.java
+++ 
b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileContextCheck.java
@@ -16,17 +16,15 @@
  */
 package org.apache.camel.microprofile.health;
 
-import java.util.Map;
-
 import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
+import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.health.HealthCheck.Result;
 import org.apache.camel.health.HealthCheck.State;
-import org.apache.camel.health.HealthCheckRegistry;
+import org.apache.camel.impl.health.ContextHealthCheck;
 import org.eclipse.microprofile.health.HealthCheck;
 import org.eclipse.microprofile.health.HealthCheckResponse;
 import org.eclipse.microprofile.health.HealthCheckResponseBuilder;
@@ -38,37 +36,21 @@ import org.eclipse.microprofile.health.Readiness;
  */
 @Readiness
 @Liveness
-@ApplicationScoped
 public class CamelMicroProfileContextCheck implements HealthCheck, 
CamelContextAware {
 
     @Inject
     CamelContext camelContext;
 
-    private org.apache.camel.health.HealthCheck contextHealthCheck;
-
-    @PostConstruct
-    public void init() {
-        HealthCheckRegistry hcr = 
camelContext.getExtension(HealthCheckRegistry.class);
-        if (hcr != null) {
-            // load and register context health check into Camel and use it 
here with microprofile
-            hcr.setId("camel-microprofile-health");
-            if (!hcr.getCheck("context").isPresent()) {
-                contextHealthCheck = (org.apache.camel.health.HealthCheck) 
hcr.resolveById("context");
-                if (contextHealthCheck != null) {
-                    hcr.register(contextHealthCheck);
-                }
-            }
-        }
-    }
-
     @Override
     public HealthCheckResponse call() {
         final HealthCheckResponseBuilder builder = 
HealthCheckResponse.builder();
         builder.name("camel");
         builder.down();
 
-        if (contextHealthCheck != null) {
-            Result result = contextHealthCheck.call();
+        if (camelContext != null) {
+            ContextHealthCheck chc = new ContextHealthCheck();
+            chc.setCamelContext(camelContext);
+            Result result = chc.call();
             Map<String, Object> details = result.getDetails();
             builder.withData("name", details.get("context.name").toString());
             builder.withData("contextStatus", 
details.get("context.status").toString());
diff --git 
a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileLivenessCheck.java
 
b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileLivenessCheck.java
index 426b6e0..b8025a2 100644
--- 
a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileLivenessCheck.java
+++ 
b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileLivenessCheck.java
@@ -16,15 +16,12 @@
  */
 package org.apache.camel.microprofile.health;
 
-import javax.enterprise.context.ApplicationScoped;
-
 import org.eclipse.microprofile.health.Liveness;
 
 /**
  * Liveness checks
  */
 @Liveness
-@ApplicationScoped
 public class CamelMicroProfileLivenessCheck extends 
AbstractCamelMicroProfileHealthCheck {
 
     @Override
diff --git 
a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileReadinessCheck.java
 
b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileReadinessCheck.java
index 8ab254d..c497841 100644
--- 
a/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileReadinessCheck.java
+++ 
b/components/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileReadinessCheck.java
@@ -16,15 +16,12 @@
  */
 package org.apache.camel.microprofile.health;
 
-import javax.enterprise.context.ApplicationScoped;
-
 import org.eclipse.microprofile.health.Readiness;
 
 /**
  * Readiness checks
  */
 @Readiness
-@ApplicationScoped
 public class CamelMicroProfileReadinessCheck extends 
AbstractCamelMicroProfileHealthCheck {
 
     @Override
diff --git 
a/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java
 
b/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java
index 5aeb3a2..c40f342 100644
--- 
a/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java
+++ 
b/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java
@@ -33,7 +33,6 @@ public class CamelMicroProfileHealthCheckTest extends 
CamelMicroProfileHealthTes
         context.setNameStrategy(new 
ExplicitCamelContextNameStrategy("health-context"));
         CamelMicroProfileContextCheck check = new 
CamelMicroProfileContextCheck();
         check.setCamelContext(context);
-        check.init();
         reporter.addHealthCheck(check);
 
         SmallRyeHealth health = reporter.getHealth();
@@ -56,7 +55,6 @@ public class CamelMicroProfileHealthCheckTest extends 
CamelMicroProfileHealthTes
         context.setNameStrategy(new 
ExplicitCamelContextNameStrategy("health-context"));
         CamelMicroProfileContextCheck check = new 
CamelMicroProfileContextCheck();
         check.setCamelContext(context);
-        check.init();
         reporter.addHealthCheck(check);
 
         context.stop();
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckRegistry.java 
b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckRegistry.java
index a389035..b34fd7e 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckRegistry.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/health/HealthCheckRegistry.java
@@ -88,6 +88,11 @@ public interface HealthCheckRegistry extends 
CamelContextAware, StaticService, I
     }
 
     /**
+     * Returns the repository identified by the given <code>id</code> if 
available.
+     */
+    Optional<HealthCheckRepository> getRepository(String id);
+
+    /**
      * Returns an optional {@link HealthCheckRegistry}, by default no registry 
is
      * present and it must be explicit activated. Components can 
register/unregister
      * health checks in response to life-cycle events (i.e. start/stop).
diff --git 
a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
 
b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 287b4a7..9d005d2 100644
--- 
a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ 
b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -2498,7 +2498,9 @@ public abstract class AbstractCamelContext extends 
BaseService
         HealthCheckRegistry hcr = getExtension(HealthCheckRegistry.class);
         if (hcr == null) {
             // install health-check registry if discovered from classpath
-            setExtension(HealthCheckRegistry.class, 
createHealthCheckRegistry());
+            hcr = createHealthCheckRegistry();
+            hcr.setCamelContext(this);
+            setExtension(HealthCheckRegistry.class, hcr);
         }
 
         // Call all registered trackers with this context
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 b45943c..1c2b811 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
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.impl.health;
 
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.stream.Stream;
@@ -29,6 +30,7 @@ import org.apache.camel.health.HealthCheckRepository;
 import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.annotations.JdkService;
 import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -52,7 +54,7 @@ public class DefaultHealthCheckRegistry extends 
ServiceSupport implements Health
     public DefaultHealthCheckRegistry(CamelContext camelContext) {
         this.checks = new CopyOnWriteArraySet<>();
         this.repositories = new CopyOnWriteArraySet<>();
-        this.repositories.add(new RegistryRepository());
+        this.repositories.add(new HealthCheckRegistryRepository());
 
         setCamelContext(camelContext);
     }
@@ -114,6 +116,9 @@ public class DefaultHealthCheckRegistry extends 
ServiceSupport implements Health
         if (answer == null) {
             answer = resolveHealthCheckRepositoryById(id);
         }
+        if (answer instanceof CamelContextAware) {
+            ((CamelContextAware) answer).setCamelContext(camelContext);
+        }
         return answer;
     }
 
@@ -166,6 +171,10 @@ public class DefaultHealthCheckRegistry extends 
ServiceSupport implements Health
 
         if (obj instanceof HealthCheck) {
             HealthCheck healthCheck = (HealthCheck) obj;
+            // do we have this already
+            if (getCheck(healthCheck.getId()).isPresent()) {
+                return false;
+            }
             boolean result = checks.add(healthCheck);
             if (result) {
                 if (obj instanceof CamelContextAware) {
@@ -177,8 +186,11 @@ public class DefaultHealthCheckRegistry extends 
ServiceSupport implements Health
             return result;
         } else {
             HealthCheckRepository repository = (HealthCheckRepository) obj;
+            // do we have this already
+            if (getRepository(repository.getId()).isPresent()) {
+                return false;
+            }
             boolean result = this.repositories.add(repository);
-
             if (result) {
                 if (repository instanceof CamelContextAware) {
                     ((CamelContextAware) 
repository).setCamelContext(camelContext);
@@ -218,6 +230,15 @@ public class DefaultHealthCheckRegistry extends 
ServiceSupport implements Health
     //
     // ************************************
 
+    /**
+     * Returns the repository identified by the given <code>id</code> if 
available.
+     */
+    public Optional<HealthCheckRepository> getRepository(String id) {
+        return repositories.stream()
+                .filter(r -> ObjectHelper.equal(r.getId(), id))
+                .findFirst();
+    }
+
     @Override
     public Stream<HealthCheck> stream() {
         if (enabled) {
diff --git 
a/core/camel-health/src/main/java/org/apache/camel/impl/health/RegistryRepository.java
 
b/core/camel-health/src/main/java/org/apache/camel/impl/health/HealthCheckRegistryRepository.java
similarity index 82%
rename from 
core/camel-health/src/main/java/org/apache/camel/impl/health/RegistryRepository.java
rename to 
core/camel-health/src/main/java/org/apache/camel/impl/health/HealthCheckRegistryRepository.java
index edb735e..888e1c1 100644
--- 
a/core/camel-health/src/main/java/org/apache/camel/impl/health/RegistryRepository.java
+++ 
b/core/camel-health/src/main/java/org/apache/camel/impl/health/HealthCheckRegistryRepository.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.impl.health;
 
+import java.util.Set;
 import java.util.stream.Stream;
 
 import org.apache.camel.CamelContext;
@@ -28,7 +29,7 @@ import org.apache.camel.health.HealthCheckRepository;
  *
  * Camel will use this by default, so there is no need to register this 
manually.
  */
-public class RegistryRepository implements CamelContextAware, 
HealthCheckRepository {
+public class HealthCheckRegistryRepository implements CamelContextAware, 
HealthCheckRepository {
     private CamelContext context;
 
     @Override
@@ -48,8 +49,11 @@ public class RegistryRepository implements 
CamelContextAware, HealthCheckReposit
 
     @Override
     public Stream<HealthCheck> stream() {
-        return this.context != null
-            ? this.context.getRegistry().findByType(HealthCheck.class).stream()
-            : Stream.empty();
+        if (context != null) {
+            Set<HealthCheck> set = 
this.context.getRegistry().findByType(HealthCheck.class);
+            return set.stream();
+        } else {
+            return Stream.empty();
+        }
     }
 }
diff --git 
a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
 
b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
index b15775b..6959bd1 100644
--- 
a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
+++ 
b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
@@ -216,15 +216,19 @@ public final class DefaultConfigurationConfigurer {
         HealthCheckRegistry hc = 
camelContext.getExtension(HealthCheckRegistry.class);
         if (hc != null && config.isHealthCheckEnabled()) {
             // register context health-check by default
-            Object context = hc.resolveById("context");
-            if (context != null) {
-                hc.register(context);
+            if (!hc.getCheck("context").isPresent()) {
+                Object context = hc.resolveById("context");
+                if (context != null) {
+                    hc.register(context);
+                }
             }
             // register routes if enabled
             if (config.isHealthCheckRoutesEnabled()) {
-                Object routes = hc.resolveById("routes");
-                if (routes != null) {
-                    hc.register(routes);
+                if (!hc.getCheck("routes").isPresent()) {
+                    Object routes = hc.resolveById("routes");
+                    if (routes != null) {
+                        hc.register(routes);
+                    }
                 }
             }
         }
@@ -406,16 +410,6 @@ public final class DefaultConfigurationConfigurer {
         initThreadPoolProfiles(registry, camelContext);
     }
 
-    private static <T> void registerPropertyForBeanType(final Registry 
registry, final Class<T> beanType, final Consumer<T> propertySetter) {
-        T propertyBean = getSingleBeanOfType(registry, beanType);
-        if (propertyBean == null) {
-            return;
-        }
-
-        LOG.info("Using custom {}: {}", beanType.getSimpleName(), 
propertyBean);
-        propertySetter.accept(propertyBean);
-    }
-
     private static <T> T getSingleBeanOfType(Registry registry, Class<T> type) 
{
         Map<String, T> beans = registry.findByTypeWithName(type);
         if (beans.size() == 1) {
@@ -425,10 +419,6 @@ public final class DefaultConfigurationConfigurer {
         }
     }
 
-    private static <T> void registerPropertiesForBeanTypes(final Registry 
registry, final Class<T> beanType, final Consumer<T> propertySetter) {
-        registerPropertiesForBeanTypesWithCondition(registry, beanType, b -> 
true, propertySetter);
-    }
-
     private static <T> void registerPropertiesForBeanTypesWithCondition(final 
Registry registry, final Class<T> beanType, final Predicate<T> condition,
                                                                         final 
Consumer<T> propertySetter) {
         final Map<String, T> beans = registry.findByTypeWithName(beanType);

Reply via email to