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/03/31 07:13:47 UTC

[camel] 01/06: CAMEL-15105: make the NodeIdFactory 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 96e117391ef39240cf7249f0f295fdff2d812ce3
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Thu Mar 30 15:51:17 2023 +0200

    CAMEL-15105: make the NodeIdFactory a plugin of the context
---
 .../org/apache/camel/openapi/RestOpenApiReader.java    |  3 ++-
 .../org/apache/camel/spring/EndpointReferenceTest.java |  3 ++-
 .../java/org/apache/camel/ExtendedCamelContext.java    | 15 ---------------
 .../apache/camel/impl/engine/AbstractCamelContext.java |  7 ++-----
 .../impl/engine/DefaultCamelContextExtension.java      | 18 ------------------
 .../impl/engine/DefaultExecutorServiceManager.java     |  2 +-
 .../camel/impl/ExtendedCamelContextConfigurer.java     |  6 ------
 .../main/java/org/apache/camel/impl/DefaultModel.java  |  7 ++++---
 .../impl/lw/LightweightCamelContextExtension.java      | 11 -----------
 .../org/apache/camel/model/RouteDefinitionHelper.java  |  5 +++--
 .../org/apache/camel/model/rest/RestDefinition.java    |  3 ++-
 .../java/org/apache/camel/reifier/BeanReifier.java     |  3 ++-
 .../org/apache/camel/reifier/ProcessorReifier.java     |  5 +++--
 .../java/org/apache/camel/reifier/RouteReifier.java    |  6 ++++--
 .../core/xml/AbstractCamelContextFactoryBean.java      |  2 +-
 .../org/apache/camel/impl/CustomIdFactoryTest.java     | 10 +++++-----
 .../issues/RouteIdAnonymousAndFixedClashTest.java      |  2 +-
 .../camel/main/DefaultConfigurationConfigurer.java     |  2 +-
 .../camel/management/mbean/ManagedProcessor.java       |  6 ++++--
 .../apache/camel/management/ManagementTestSupport.java | 11 +++++++----
 20 files changed, 44 insertions(+), 83 deletions(-)

diff --git a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java
index 61a59573b33..fef5043faef 100644
--- a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java
+++ b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java
@@ -97,6 +97,7 @@ import org.apache.camel.model.rest.RestSecurityDefinition;
 import org.apache.camel.model.rest.SecurityDefinition;
 import org.apache.camel.model.rest.VerbDefinition;
 import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.ObjectHelper;
 import org.apache.camel.util.FileUtil;
@@ -541,7 +542,7 @@ public class RestOpenApiReader {
             } else if (rest.getId() != null) {
                 operationId = getValue(camelContext, rest.getId());
             } else {
-                verb.idOrCreate(camelContext.getCamelContextExtension().getNodeIdFactory());
+                verb.idOrCreate(camelContext.getCamelContextExtension().getContextPlugin(NodeIdFactory.class));
                 operationId = verb.getId();
             }
             op.operationId = operationId;
diff --git a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/EndpointReferenceTest.java b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/EndpointReferenceTest.java
index 67f199bf25c..74b628f55e8 100644
--- a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/EndpointReferenceTest.java
+++ b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/EndpointReferenceTest.java
@@ -21,6 +21,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spring.example.DummyBean;
 import org.apache.camel.support.CamelContextHelper;
 import org.junit.jupiter.api.Test;
@@ -80,7 +81,7 @@ public class EndpointReferenceTest extends SpringTestSupport {
     public void testReferenceEndpointFromOtherCamelContext() throws Exception {
         CamelContext context = applicationContext.getBean("camel2", CamelContext.class);
         RouteDefinition route = new RouteDefinition("temporary");
-        String routeId = route.idOrCreate(context.getCamelContextExtension().getNodeIdFactory());
+        String routeId = route.idOrCreate(context.getCamelContextExtension().getContextPlugin(NodeIdFactory.class));
         try {
             CamelContextHelper.resolveEndpoint(context, null, "endpoint1");
             fail("Should have thrown exception");
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 3be8a02ab16..faccf2112d4 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
@@ -54,7 +54,6 @@ import org.apache.camel.spi.ManagementMBeanAssembler;
 import org.apache.camel.spi.ModelJAXBContextFactory;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.ModelineFactory;
-import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.NormalizedEndpointUri;
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.PackageScanResourceResolver;
@@ -314,20 +313,6 @@ public interface ExtendedCamelContext {
      */
     void setErrorHandlerFactory(ErrorHandlerFactory errorHandlerFactory);
 
-    /**
-     * Gets the node id factory
-     *
-     * @return the node id factory
-     */
-    NodeIdFactory getNodeIdFactory();
-
-    /**
-     * Uses a custom node id factory when generating auto assigned ids to the nodes in the route definitions
-     *
-     * @param factory custom factory to use
-     */
-    void setNodeIdFactory(NodeIdFactory factory);
-
     /**
      * Gets the {@link ComponentResolver} to use.
      */
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 e4aee514ac0..4440b794930 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
@@ -234,7 +234,6 @@ public abstract class AbstractCamelContext extends BaseService
     volatile RuntimeCamelCatalog runtimeCamelCatalog;
     volatile PackageScanClassResolver packageScanClassResolver;
     volatile PackageScanResourceResolver packageScanResourceResolver;
-    volatile NodeIdFactory nodeIdFactory;
     volatile ModelineFactory modelineFactory;
     volatile ProcessorFactory processorFactory;
     volatile PeriodTaskResolver periodTaskResolver;
@@ -2130,6 +2129,8 @@ public abstract class AbstractCamelContext extends BaseService
     public void doBuild() throws Exception {
         final StopWatch watch = new StopWatch();
 
+        getCamelContextExtension().addContextPlugin(NodeIdFactory.class, createNodeIdFactory());
+
         // auto-detect step recorder from classpath if none has been explicit configured
         if (startupStepRecorder.getClass().getSimpleName().equals("DefaultStartupStepRecorder")) {
             StartupStepRecorder fr = camelContextExtension.getBootstrapFactoryFinder()
@@ -4177,10 +4178,6 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.setBeanPostProcessor(beanPostProcessor);
     }
 
-    public void setNodeIdFactory(NodeIdFactory factory) {
-        camelContextExtension.setNodeIdFactory(factory);
-    }
-
     public void setDataFormatResolver(DataFormatResolver dataFormatResolver) {
         camelContextExtension.setDataFormatResolver(dataFormatResolver);
     }
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 4f32d2f5b16..de7e1b81270 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
@@ -73,7 +73,6 @@ import org.apache.camel.spi.ManagementStrategyFactory;
 import org.apache.camel.spi.ModelJAXBContextFactory;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.ModelineFactory;
-import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.NormalizedEndpointUri;
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.PackageScanResourceResolver;
@@ -584,23 +583,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
         camelContext.modelJAXBContextFactory = camelContext.getInternalServiceManager().addService(modelJAXBContextFactory);
     }
 
-    @Override
-    public NodeIdFactory getNodeIdFactory() {
-        if (camelContext.nodeIdFactory == null) {
-            synchronized (camelContext.lock) {
-                if (camelContext.nodeIdFactory == null) {
-                    setNodeIdFactory(camelContext.createNodeIdFactory());
-                }
-            }
-        }
-        return camelContext.nodeIdFactory;
-    }
-
-    @Override
-    public void setNodeIdFactory(NodeIdFactory idFactory) {
-        camelContext.nodeIdFactory = camelContext.getInternalServiceManager().addService(idFactory);
-    }
-
     @Override
     public ModelineFactory getModelineFactory() {
         if (camelContext.modelineFactory == null) {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultExecutorServiceManager.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultExecutorServiceManager.java
index 1433bdf8102..dfb6c06acf7 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultExecutorServiceManager.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultExecutorServiceManager.java
@@ -52,7 +52,7 @@ public class DefaultExecutorServiceManager extends BaseExecutorServiceManager {
     protected Object forceId(Object source) {
         if (source instanceof NamedNode && source instanceof IdAware) {
             NamedNode node = (NamedNode) source;
-            NodeIdFactory factory = getCamelContext().getCamelContextExtension().getNodeIdFactory();
+            NodeIdFactory factory = getCamelContext().getCamelContextExtension().getContextPlugin(NodeIdFactory.class);
             if (node.getId() == null) {
                 String id = factory.createId(node);
                 // we auto generated an id to be assigned
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 42281836564..699c2707cf3 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
@@ -81,8 +81,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ModelineFactory": target.setModelineFactory(property(camelContext, org.apache.camel.spi.ModelineFactory.class, value)); return true;
         case "name":
         case "Name": target.setName(property(camelContext, java.lang.String.class, value)); return true;
-        case "nodeidfactory":
-        case "NodeIdFactory": target.setNodeIdFactory(property(camelContext, org.apache.camel.spi.NodeIdFactory.class, value)); return true;
         case "packagescanclassresolver":
         case "PackageScanClassResolver": target.setPackageScanClassResolver(property(camelContext, org.apache.camel.spi.PackageScanClassResolver.class, value)); return true;
         case "packagescanresourceresolver":
@@ -182,8 +180,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ModelineFactory": return org.apache.camel.spi.ModelineFactory.class;
         case "name":
         case "Name": return java.lang.String.class;
-        case "nodeidfactory":
-        case "NodeIdFactory": return org.apache.camel.spi.NodeIdFactory.class;
         case "packagescanclassresolver":
         case "PackageScanClassResolver": return org.apache.camel.spi.PackageScanClassResolver.class;
         case "packagescanresourceresolver":
@@ -284,8 +280,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "ModelineFactory": return target.getModelineFactory();
         case "name":
         case "Name": return target.getName();
-        case "nodeidfactory":
-        case "NodeIdFactory": return target.getNodeIdFactory();
         case "packagescanclassresolver":
         case "PackageScanClassResolver": return target.getPackageScanClassResolver();
         case "packagescanresourceresolver":
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
index 0498e614b97..2800aee4a9f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -65,6 +65,7 @@ import org.apache.camel.model.validator.ValidatorDefinition;
 import org.apache.camel.spi.ExchangeFactory;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.ModelReifierFactory;
+import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.PropertyConfigurer;
 import org.apache.camel.spi.RouteTemplateLoaderListener;
 import org.apache.camel.spi.RouteTemplateParameterSource;
@@ -162,7 +163,7 @@ public class DefaultModel implements Model {
     @Override
     public synchronized RouteConfigurationDefinition getRouteConfigurationDefinition(String id) {
         for (RouteConfigurationDefinition def : routesConfigurations) {
-            if (def.idOrCreate(camelContext.getCamelContextExtension().getNodeIdFactory()).equals(id)) {
+            if (def.idOrCreate(camelContext.getCamelContextExtension().getContextPlugin(NodeIdFactory.class)).equals(id)) {
                 return def;
             }
         }
@@ -294,7 +295,7 @@ public class DefaultModel implements Model {
     @Override
     public synchronized RouteDefinition getRouteDefinition(String id) {
         for (RouteDefinition route : routeDefinitions) {
-            if (route.idOrCreate(camelContext.getCamelContextExtension().getNodeIdFactory()).equals(id)) {
+            if (route.idOrCreate(camelContext.getCamelContextExtension().getContextPlugin(NodeIdFactory.class)).equals(id)) {
                 return route;
             }
         }
@@ -309,7 +310,7 @@ public class DefaultModel implements Model {
     @Override
     public RouteTemplateDefinition getRouteTemplateDefinition(String id) {
         for (RouteTemplateDefinition route : routeTemplateDefinitions) {
-            if (route.idOrCreate(camelContext.getCamelContextExtension().getNodeIdFactory()).equals(id)) {
+            if (route.idOrCreate(camelContext.getCamelContextExtension().getContextPlugin(NodeIdFactory.class)).equals(id)) {
                 return route;
             }
         }
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 c2247b833f0..fa436742ee0 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
@@ -68,7 +68,6 @@ import org.apache.camel.spi.ManagementMBeanAssembler;
 import org.apache.camel.spi.ModelJAXBContextFactory;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.ModelineFactory;
-import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.NormalizedEndpointUri;
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.PackageScanResourceResolver;
@@ -682,16 +681,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public NodeIdFactory getNodeIdFactory() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setNodeIdFactory(NodeIdFactory factory) {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public void setLightweight(boolean lightweight) {
         throw new UnsupportedOperationException();
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
index 41eb7ab589d..cd85a2781c3 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
@@ -34,6 +34,7 @@ import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.VerbDefinition;
+import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -179,7 +180,7 @@ public final class RouteDefinitionHelper {
                 int attempts = 0;
                 while (!done && attempts < 1000) {
                     attempts++;
-                    id = route.idOrCreate(ecc.getNodeIdFactory());
+                    id = route.idOrCreate(ecc.getContextPlugin(NodeIdFactory.class));
                     if (customIds.contains(id)) {
                         // reset id and try again
                         route.setId(null);
@@ -745,7 +746,7 @@ public final class RouteDefinitionHelper {
      */
     public static void forceAssignIds(CamelContext context, final ProcessorDefinition processor) {
         // force id on the child
-        processor.idOrCreate(context.getCamelContextExtension().getNodeIdFactory());
+        processor.idOrCreate(context.getCamelContextExtension().getContextPlugin(NodeIdFactory.class));
 
         // if there was a custom id assigned, then make sure to support property
         // placeholders
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/rest/RestDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/rest/RestDefinition.java
index bcd4cd9615b..bf400dbfcfe 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/rest/RestDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/rest/RestDefinition.java
@@ -38,6 +38,7 @@ import org.apache.camel.model.OptionalIdentifiedDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.ToDefinition;
 import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.util.FileUtil;
@@ -815,7 +816,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
         String from = "rest-api:" + configuration.getApiContextPath();
         String routeId = configuration.getApiContextRouteId();
         if (routeId == null) {
-            routeId = answer.idOrCreate(camelContext.getCamelContextExtension().getNodeIdFactory());
+            routeId = answer.idOrCreate(camelContext.getCamelContextExtension().getContextPlugin(NodeIdFactory.class));
         }
 
         // append options
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/BeanReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/BeanReifier.java
index 786a3dbe8f2..1c8e7c7d4e5 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/BeanReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/BeanReifier.java
@@ -23,6 +23,7 @@ import org.apache.camel.model.BeanDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.spi.BeanProcessorFactory;
 import org.apache.camel.spi.IdAware;
+import org.apache.camel.spi.NodeIdFactory;
 
 public class BeanReifier extends ProcessorReifier<BeanDefinition> {
 
@@ -46,7 +47,7 @@ public class BeanReifier extends ProcessorReifier<BeanDefinition> {
         }
         Processor answer = fac.createBeanProcessor(camelContext, bean, beanType, beanClass, ref, method, scope);
         if (answer instanceof IdAware) {
-            String id = camelContext.getCamelContextExtension().getNodeIdFactory().createId(definition);
+            String id = camelContext.getCamelContextExtension().getContextPlugin(NodeIdFactory.class).createId(definition);
             ((IdAware) answer).setId(id);
         }
         return answer;
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
index 0a0fe1b0bd3..0d233c8e967 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
@@ -114,6 +114,7 @@ import org.apache.camel.spi.ErrorHandlerAware;
 import org.apache.camel.spi.ExecutorServiceManager;
 import org.apache.camel.spi.IdAware;
 import org.apache.camel.spi.InterceptStrategy;
+import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.ReifierStrategy;
 import org.apache.camel.spi.RouteIdAware;
 import org.apache.camel.support.CamelContextHelper;
@@ -814,7 +815,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
 
     protected Processor createProcessor(ProcessorDefinition<?> output) throws Exception {
         // ensure node has id assigned
-        String outputId = output.idOrCreate(camelContext.getCamelContextExtension().getNodeIdFactory());
+        String outputId = output.idOrCreate(camelContext.getCamelContextExtension().getContextPlugin(NodeIdFactory.class));
         StartupStep step = camelContext.getCamelContextExtension().getStartupStepRecorder().beginStep(ProcessorReifier.class, outputId, "Create processor");
 
         Processor processor = null;
@@ -883,7 +884,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
     }
 
     protected String getId(OptionalIdentifiedDefinition<?> def) {
-        return def.idOrCreate(camelContext.getCamelContextExtension().getNodeIdFactory());
+        return def.idOrCreate(camelContext.getCamelContextExtension().getContextPlugin(NodeIdFactory.class));
     }
 
     /**
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
index 1de338a742d..e72df220d57 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -46,6 +46,7 @@ import org.apache.camel.spi.ErrorHandlerAware;
 import org.apache.camel.spi.InternalProcessor;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.ManagementInterceptStrategy;
+import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.RoutePolicy;
 import org.apache.camel.spi.RoutePolicyFactory;
 import org.slf4j.Logger;
@@ -96,7 +97,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         }
 
         // create route
-        String id = definition.idOrCreate(camelContext.getCamelContextExtension().getNodeIdFactory());
+        String id = definition.idOrCreate(camelContext.getCamelContextExtension().getContextPlugin(NodeIdFactory.class));
         String desc = definition.getDescriptionText();
         Route route = camelContext.getCamelContextExtension().getRouteFactory().createRoute(camelContext, definition, id,
                 desc, endpoint, definition.getResource());
@@ -202,7 +203,8 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
                 ProcessorReifier<?> reifier = ProcessorReifier.reifier(route, output);
 
                 // ensure node has id assigned
-                String outputId = output.idOrCreate(camelContext.getCamelContextExtension().getNodeIdFactory());
+                String outputId
+                        = output.idOrCreate(camelContext.getCamelContextExtension().getContextPlugin(NodeIdFactory.class));
                 String eip = reifier.getClass().getSimpleName().replace("Reifier", "");
                 StartupStep step = camelContext.getCamelContextExtension().getStartupStepRecorder()
                         .beginStep(ProcessorReifier.class, outputId, "Create " + eip + " Processor");
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index fbc5c103ac2..4d2b6bf21ed 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -1516,7 +1516,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
         NodeIdFactory nodeIdFactory = getBeanForType(NodeIdFactory.class);
         if (nodeIdFactory != null) {
             LOG.info("Using custom NodeIdFactory: {}", nodeIdFactory);
-            getContext().getCamelContextExtension().setNodeIdFactory(nodeIdFactory);
+            getContext().getCamelContextExtension().addContextPlugin(NodeIdFactory.class, nodeIdFactory);
         }
         StreamCachingStrategy streamCachingStrategy = getBeanForType(StreamCachingStrategy.class);
         if (streamCachingStrategy != null) {
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java
index 4c53797e98c..a32919f8f47 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java
@@ -58,11 +58,7 @@ public class CustomIdFactoryTest extends ContextTestSupport {
             public void configure() throws Exception {
                 // use our own id factory so we can generate the keys we like to
                 // use
-                context.getCamelContextExtension().setNodeIdFactory(new NodeIdFactory() {
-                    public String createId(NamedNode definition) {
-                        return "#" + definition.getShortName() + ++counter + "#";
-                    }
-                });
+                context.getCamelContextExtension().addContextPlugin(NodeIdFactory.class, buildNodeIdFactory());
 
                 // add our debugger so we can debug camel routes when we send in
                 // messages
@@ -76,6 +72,10 @@ public class CustomIdFactoryTest extends ContextTestSupport {
         };
     }
 
+    private static NodeIdFactory buildNodeIdFactory() {
+        return definition -> "#" + definition.getShortName() + ++counter + "#";
+    }
+
     /**
      * Test path 1
      */
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/RouteIdAnonymousAndFixedClashTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/RouteIdAnonymousAndFixedClashTest.java
index 378da1c0caa..f3476b92825 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/RouteIdAnonymousAndFixedClashTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/RouteIdAnonymousAndFixedClashTest.java
@@ -43,7 +43,7 @@ public class RouteIdAnonymousAndFixedClashTest extends ContextTestSupport {
     @Override
     protected CamelContext createCamelContext() throws Exception {
         DefaultCamelContext ctx = new DefaultCamelContext(true);
-        ctx.setNodeIdFactory(new NodeIdFactory() {
+        ctx.getCamelContextExtension().addContextPlugin(NodeIdFactory.class, new NodeIdFactory() {
             AtomicInteger counter = new AtomicInteger();
 
             @Override
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 30e8ef8115b..67e4bc57fff 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
@@ -442,7 +442,7 @@ public final class DefaultConfigurationConfigurer {
         }
         NodeIdFactory nif = getSingleBeanOfType(registry, NodeIdFactory.class);
         if (nif != null) {
-            ecc.getCamelContextExtension().setNodeIdFactory(nif);
+            ecc.getCamelContextExtension().addContextPlugin(NodeIdFactory.class, nif);
         }
         MessageHistoryFactory mhf = getSingleBeanOfType(registry, MessageHistoryFactory.class);
         if (mhf != null) {
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
index dfd15d382b6..8c6d42b6671 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
@@ -30,6 +30,7 @@ import org.apache.camel.model.ProcessorDefinitionHelper;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.StepDefinition;
 import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.RouteIdAware;
 import org.apache.camel.support.service.ServiceHelper;
 
@@ -50,14 +51,15 @@ public class ManagedProcessor extends ManagedPerformanceCounter implements Manag
         this.processor = processor;
         this.definition = definition;
         this.nodeLevel = ProcessorDefinitionHelper.getNodeLevel(definition);
-        this.id = definition.idOrCreate(context.getCamelContextExtension().getNodeIdFactory());
+        this.id = definition.idOrCreate(context.getCamelContextExtension().getContextPlugin(NodeIdFactory.class));
         StepDefinition step;
         if (definition instanceof StepDefinition) {
             step = (StepDefinition) definition;
         } else {
             step = ProcessorDefinitionHelper.findFirstParentOfType(StepDefinition.class, definition, true);
         }
-        this.stepId = step != null ? step.idOrCreate(context.getCamelContextExtension().getNodeIdFactory()) : null;
+        this.stepId = step != null
+                ? step.idOrCreate(context.getCamelContextExtension().getContextPlugin(NodeIdFactory.class)) : null;
         this.sourceLocation = definition.getLocation();
         if (sourceLocation == null) {
             RouteDefinition rd = ProcessorDefinitionHelper.getRoute(definition);
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagementTestSupport.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagementTestSupport.java
index 3fa57e984b1..a1aacf9621f 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagementTestSupport.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagementTestSupport.java
@@ -30,7 +30,6 @@ import javax.management.ReflectionException;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.NamedNode;
-import org.apache.camel.impl.engine.AbstractCamelContext;
 import org.apache.camel.spi.NodeIdFactory;
 
 import static org.apache.camel.management.DefaultManagementAgent.DEFAULT_DOMAIN;
@@ -81,15 +80,19 @@ public abstract class ManagementTestSupport extends ContextTestSupport {
     @Override
     protected CamelContext createCamelContext() throws Exception {
         CamelContext ctx = super.createCamelContext();
-        ((AbstractCamelContext) ctx).setNodeIdFactory(new NodeIdFactory() {
+        ctx.getCamelContextExtension().addContextPlugin(NodeIdFactory.class, buildNodeIdFactory());
+        return ctx;
+    }
+
+    private static NodeIdFactory buildNodeIdFactory() {
+        return new NodeIdFactory() {
             private AtomicInteger counter = new AtomicInteger();
 
             @Override
             public String createId(NamedNode definition) {
                 return definition.getShortName() + counter.incrementAndGet();
             }
-        });
-        return ctx;
+        };
     }
 
     public ObjectName getContextObjectName() throws MalformedObjectNameException {