You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/05/30 12:20:58 UTC

(camel) 04/06: CAMEL-20798: Add endpoint service registry

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

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

commit 0f4c06f543da93d2211803cbd078fbc61d03a30f
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu May 30 13:40:39 2024 +0200

    CAMEL-20798: Add endpoint service registry
---
 .../java/org/apache/camel/ExtendedCamelContext.java   | 11 +++++++++++
 .../camel/impl/engine/AbstractCamelContext.java       |  1 -
 .../impl/engine/DefaultCamelContextExtension.java     | 19 +++++++++++++++++++
 .../apache/camel/impl/console/ServiceDevConsole.java  |  4 ++--
 .../camel/impl/ExtendedCamelContextConfigurer.java    |  6 ++++++
 5 files changed, 38 insertions(+), 3 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 318d50a5743..2d6b5667c3a 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,6 +23,7 @@ import java.util.function.Supplier;
 
 import org.apache.camel.catalog.RuntimeCamelCatalog;
 import org.apache.camel.spi.BootstrapCloseable;
+import org.apache.camel.spi.EndpointServiceRegistry;
 import org.apache.camel.spi.EndpointStrategy;
 import org.apache.camel.spi.EndpointUriFactory;
 import org.apache.camel.spi.ExchangeFactory;
@@ -376,6 +377,16 @@ public interface ExtendedCamelContext {
      */
     void setReactiveExecutor(ReactiveExecutor reactiveExecutor);
 
+    /**
+     * Gets the {@link EndpointServiceRegistry} to use.
+     */
+    EndpointServiceRegistry getEndpointServiceRegistry();
+
+    /**
+     * Sets a custom {@link EndpointServiceRegistry} to be used.
+     */
+    void setEndpointServiceRegistry(EndpointServiceRegistry endpointServiceRegistry);
+
     /**
      * Whether exchange event notification is applicable (possible). This API is used internally in Camel as
      * optimization.
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 a773822c027..10642fc6eb7 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
@@ -346,7 +346,6 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.addContextPlugin(PackageScanClassResolver.class, createPackageScanClassResolver());
         camelContextExtension.addContextPlugin(PackageScanResourceResolver.class, createPackageScanResourceResolver());
         camelContextExtension.addContextPlugin(VariableRepositoryFactory.class, createVariableRepositoryFactory());
-        camelContextExtension.addContextPlugin(EndpointServiceRegistry.class, createEndpointServiceRegistry());
         camelContextExtension.lazyAddContextPlugin(ModelineFactory.class, this::createModelineFactory);
         camelContextExtension.lazyAddContextPlugin(ModelJAXBContextFactory.class, this::createModelJAXBContextFactory);
         camelContextExtension.addContextPlugin(DataFormatResolver.class, createDataFormatResolver());
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 d0f5036c2a8..40410b2915e 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
@@ -39,6 +39,7 @@ import org.apache.camel.TypeConverter;
 import org.apache.camel.spi.BootstrapCloseable;
 import org.apache.camel.spi.CamelContextNameStrategy;
 import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.spi.EndpointServiceRegistry;
 import org.apache.camel.spi.EndpointStrategy;
 import org.apache.camel.spi.EndpointUriFactory;
 import org.apache.camel.spi.EventNotifier;
@@ -124,6 +125,7 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
     private volatile TransformerRegistry<TransformerKey> transformerRegistry;
     private volatile ValidatorRegistry<ValidatorKey> validatorRegistry;
     private volatile TypeConverterRegistry typeConverterRegistry;
+    private volatile EndpointServiceRegistry endpointServiceRegistry;
     private volatile TypeConverter typeConverter;
     private volatile RouteController routeController;
     private volatile ShutdownStrategy shutdownStrategy;
@@ -773,6 +775,23 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
         this.transformerRegistry = camelContext.getInternalServiceManager().addService(camelContext, transformerRegistry);
     }
 
+    @Override
+    public EndpointServiceRegistry getEndpointServiceRegistry() {
+        if (endpointServiceRegistry == null) {
+            synchronized (lock) {
+                if (endpointServiceRegistry == null) {
+                    setEndpointServiceRegistry(camelContext.createEndpointServiceRegistry());
+                }
+            }
+        }
+        return endpointServiceRegistry;
+    }
+
+    @Override
+    public void setEndpointServiceRegistry(EndpointServiceRegistry endpointServiceRegistry) {
+        this.endpointServiceRegistry = camelContext.getInternalServiceManager().addService(camelContext, endpointServiceRegistry);
+    }
+
     ValidatorRegistry getValidatorRegistry() {
         if (validatorRegistry == null) {
             synchronized (lock) {
diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/ServiceDevConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/ServiceDevConsole.java
index 796a44e587c..3023cf71c47 100644
--- a/core/camel-console/src/main/java/org/apache/camel/impl/console/ServiceDevConsole.java
+++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/ServiceDevConsole.java
@@ -37,7 +37,7 @@ public class ServiceDevConsole extends AbstractDevConsole {
     protected String doCallText(Map<String, Object> options) {
         StringBuilder sb = new StringBuilder();
 
-        EndpointServiceRegistry esr = getCamelContext().getCamelContextExtension().getContextPlugin(EndpointServiceRegistry.class);
+        EndpointServiceRegistry esr = getCamelContext().getCamelContextExtension().getEndpointServiceRegistry();
         for (EndpointServiceRegistry.EndpointService es : esr.listAllEndpointServices()) {
             if (!sb.isEmpty()) {
                 sb.append("\n");
@@ -62,7 +62,7 @@ public class ServiceDevConsole extends AbstractDevConsole {
         List<JsonObject> list = new ArrayList<>();
         root.put("services", list);
 
-        EndpointServiceRegistry esr = getCamelContext().getCamelContextExtension().getContextPlugin(EndpointServiceRegistry.class);
+        EndpointServiceRegistry esr = getCamelContext().getCamelContextExtension().getEndpointServiceRegistry();
         for (EndpointServiceRegistry.EndpointService es : esr.listAllEndpointServices()) {
             JsonObject jo = new JsonObject();
             jo.put("component", es.getComponent());
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 c671341e579..b665fc149dc 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
@@ -30,6 +30,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "defaultfactoryfinder":
         case "defaultFactoryFinder": target.setDefaultFactoryFinder(property(camelContext, org.apache.camel.spi.FactoryFinder.class, value)); return true;
         case "description": target.setDescription(property(camelContext, java.lang.String.class, value)); return true;
+        case "endpointserviceregistry":
+        case "endpointServiceRegistry": target.setEndpointServiceRegistry(property(camelContext, org.apache.camel.spi.EndpointServiceRegistry.class, value)); return true;
         case "errorhandlerfactory":
         case "errorHandlerFactory": target.setErrorHandlerFactory(property(camelContext, org.apache.camel.ErrorHandlerFactory.class, value)); return true;
         case "eventnotificationapplicable":
@@ -65,6 +67,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "defaultfactoryfinder":
         case "defaultFactoryFinder": return org.apache.camel.spi.FactoryFinder.class;
         case "description": return java.lang.String.class;
+        case "endpointserviceregistry":
+        case "endpointServiceRegistry": return org.apache.camel.spi.EndpointServiceRegistry.class;
         case "errorhandlerfactory":
         case "errorHandlerFactory": return org.apache.camel.ErrorHandlerFactory.class;
         case "eventnotificationapplicable":
@@ -101,6 +105,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "defaultfactoryfinder":
         case "defaultFactoryFinder": return target.getDefaultFactoryFinder();
         case "description": return target.getDescription();
+        case "endpointserviceregistry":
+        case "endpointServiceRegistry": return target.getEndpointServiceRegistry();
         case "errorhandlerfactory":
         case "errorHandlerFactory": return target.getErrorHandlerFactory();
         case "eventnotificationapplicable":