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/02 06:26:30 UTC

[camel] 02/04: CAMEL-15105: make the ProcessorFactory 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 878825560b0a3457a3827d10cee07d657b3e5eba
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Sat Apr 1 14:00:08 2023 +0200

    CAMEL-15105: make the ProcessorFactory a plugin of the context
---
 .../camel/component/knative/KnativeEndpoint.java     |  7 ++++---
 .../camel/component/knative/KnativeProducer.java     |  5 +++--
 .../apache/camel/component/seda/SedaEndpoint.java    |  5 +++--
 .../java/org/apache/camel/ExtendedCamelContext.java  | 15 ---------------
 .../camel/impl/engine/AbstractCamelContext.java      |  2 +-
 .../impl/engine/DefaultCamelContextExtension.java    | 19 -------------------
 .../engine/DefaultServiceBootstrapCloseable.java     |  3 +--
 .../impl/cloud/DefaultServiceCallProcessor.java      |  3 ++-
 .../camel/impl/ExtendedCamelContextConfigurer.java   |  6 ------
 .../impl/lw/LightweightCamelContextExtension.java    | 12 ------------
 .../reifier/InterceptSendToEndpointReifier.java      |  3 ++-
 .../org/apache/camel/reifier/ProcessorReifier.java   | 17 +++++++++++------
 .../core/xml/AbstractCamelContextFactoryBean.java    |  2 +-
 .../camel/processor/CustomProcessorFactoryTest.java  |  2 +-
 .../camel/main/DefaultConfigurationConfigurer.java   |  2 +-
 .../java/org/apache/camel/support/PluginHelper.java  | 20 ++++++++++++++++++++
 16 files changed, 50 insertions(+), 73 deletions(-)

diff --git a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
index 37f78addc13..16728919979 100644
--- a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
+++ b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
@@ -40,6 +40,7 @@ import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
 import org.apache.camel.support.DefaultEndpoint;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
@@ -115,15 +116,15 @@ public class KnativeEndpoint extends DefaultEndpoint {
         if (replyProcessor != null) {
             list.add(replyProcessor);
         }
-        CamelContext ecc = getCamelContext();
+        CamelContext camelContext = getCamelContext();
         Processor pipeline
-                = ecc.getCamelContextExtension().getProcessorFactory().createProcessor(ecc, "Pipeline", new Object[] { list });
+                = PluginHelper.getProcessorFactory(camelContext).createProcessor(camelContext, "Pipeline", new Object[] { list });
 
         Consumer consumer = getComponent().getConsumerFactory().createConsumer(this,
                 createTransportConfiguration(service), service, pipeline);
 
         PropertyBindingSupport.build()
-                .withCamelContext(getCamelContext())
+                .withCamelContext(camelContext)
                 .withProperties(configuration.getTransportOptions())
                 .withRemoveParameters(false)
                 .withMandatory(false)
diff --git a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
index f94186c3f94..8434f7c0f28 100644
--- a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
+++ b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
@@ -28,6 +28,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.support.AsyncProcessorConverterHelper;
 import org.apache.camel.support.DefaultAsyncProducer;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.service.ServiceHelper;
 
 public class KnativeProducer extends DefaultAsyncProducer {
@@ -40,8 +41,8 @@ public class KnativeProducer extends DefaultAsyncProducer {
         elements.add(processor);
         Collections.addAll(elements, processors);
 
-        CamelContext ecc = getEndpoint().getCamelContext();
-        Processor pipeline = ecc.getCamelContextExtension().getProcessorFactory().createProcessor(ecc, "Pipeline",
+        CamelContext camelContext = getEndpoint().getCamelContext();
+        Processor pipeline = PluginHelper.getProcessorFactory(camelContext).createProcessor(camelContext, "Pipeline",
                 new Object[] { elements });
 
         this.processor = AsyncProcessorConverterHelper.convert(pipeline);
diff --git a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
index d3fba484761..d59944d047a 100644
--- a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
+++ b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
@@ -44,6 +44,7 @@ import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
 import org.apache.camel.support.DefaultEndpoint;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.URISupport;
 import org.slf4j.Logger;
@@ -267,8 +268,8 @@ public class SedaEndpoint extends DefaultEndpoint implements AsyncEndpoint, Brow
             // create multicast processor
             multicastStarted = false;
 
-            consumerMulticastProcessor = (AsyncProcessor) getCamelContext().getCamelContextExtension()
-                    .getProcessorFactory().createProcessor(getCamelContext(), "MulticastProcessor",
+            consumerMulticastProcessor = (AsyncProcessor) PluginHelper.getProcessorFactory(getCamelContext())
+                    .createProcessor(getCamelContext(), "MulticastProcessor",
                             new Object[] { processors, multicastExecutor, false });
         }
     }
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 d365aceda38..50f9a58a498 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
@@ -45,7 +45,6 @@ import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.NormalizedEndpointUri;
 import org.apache.camel.spi.PluginManager;
 import org.apache.camel.spi.ProcessorExchangeFactory;
-import org.apache.camel.spi.ProcessorFactory;
 import org.apache.camel.spi.ReactiveExecutor;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.ResourceLoader;
@@ -317,20 +316,6 @@ public interface ExtendedCamelContext {
      */
     FactoryFinder getFactoryFinder(String path);
 
-    /**
-     * Gets the current {@link org.apache.camel.spi.ProcessorFactory}
-     *
-     * @return the factory, can be <tt>null</tt> if no custom factory has been set
-     */
-    ProcessorFactory getProcessorFactory();
-
-    /**
-     * Sets a custom {@link org.apache.camel.spi.ProcessorFactory}
-     *
-     * @param processorFactory the custom factory
-     */
-    void setProcessorFactory(ProcessorFactory processorFactory);
-
     /**
      * Gets the current {@link org.apache.camel.spi.InternalProcessorFactory}
      *
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 36c172cfab7..47609926f46 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
@@ -221,7 +221,6 @@ public abstract class AbstractCamelContext extends BaseService
     volatile ModelToXMLDumper modelToXMLDumper;
     volatile RestBindingJaxbDataFormatFactory restBindingJaxbDataFormatFactory;
     volatile RuntimeCamelCatalog runtimeCamelCatalog;
-    volatile ProcessorFactory processorFactory;
     volatile InternalProcessorFactory internalProcessorFactory;
     volatile InterceptEndpointFactory interceptEndpointFactory;
     volatile RouteFactory routeFactory;
@@ -380,6 +379,7 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.lazyAddContextPlugin(PeriodTaskScheduler.class, this::createPeriodTaskScheduler);
         camelContextExtension.lazyAddContextPlugin(HealthCheckResolver.class, this::createHealthCheckResolver);
         camelContextExtension.lazyAddContextPlugin(DevConsoleResolver.class, this::createDevConsoleResolver);
+        camelContextExtension.lazyAddContextPlugin(ProcessorFactory.class, this::createProcessorFactory);
 
         if (build) {
             try {
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 8423dba0a54..7e5f6e45a66 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
@@ -36,7 +36,6 @@ import org.apache.camel.Route;
 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.spi.AnnotationBasedProcessorFactory;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.BeanIntrospection;
@@ -65,7 +64,6 @@ import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.NormalizedEndpointUri;
 import org.apache.camel.spi.PluginManager;
 import org.apache.camel.spi.ProcessorExchangeFactory;
-import org.apache.camel.spi.ProcessorFactory;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.ReactiveExecutor;
 import org.apache.camel.spi.Registry;
@@ -468,23 +466,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
         this.lightweight = lightweight;
     }
 
-    @Override
-    public ProcessorFactory getProcessorFactory() {
-        if (camelContext.processorFactory == null) {
-            synchronized (camelContext.lock) {
-                if (camelContext.processorFactory == null) {
-                    setProcessorFactory(camelContext.createProcessorFactory());
-                }
-            }
-        }
-        return camelContext.processorFactory;
-    }
-
-    @Override
-    public void setProcessorFactory(ProcessorFactory processorFactory) {
-        camelContext.processorFactory = camelContext.getInternalServiceManager().addService(processorFactory);
-    }
-
     @Override
     public InternalProcessorFactory getInternalProcessorFactory() {
         if (camelContext.internalProcessorFactory == null) {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultServiceBootstrapCloseable.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultServiceBootstrapCloseable.java
index ff10d2c453c..b85463f9ac1 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultServiceBootstrapCloseable.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultServiceBootstrapCloseable.java
@@ -79,7 +79,7 @@ public class DefaultServiceBootstrapCloseable implements BootstrapCloseable {
         }
 
         // clear processor factory
-        ProcessorFactory pf = camelContextExtension.getProcessorFactory();
+        ProcessorFactory pf = PluginHelper.getProcessorFactory(camelContextExtension);
         if (pf instanceof BootstrapCloseable) {
             try {
                 ((BootstrapCloseable) pf).close();
@@ -87,7 +87,6 @@ public class DefaultServiceBootstrapCloseable implements BootstrapCloseable {
                 LOG.warn("Error during closing bootstrap service. This exception is ignored", e);
             }
         }
-        camelContextExtension.setProcessorFactory(null);
 
         // clear bootstrap factory finder
         FactoryFinder ff = camelContextExtension.getBootstrapFactoryFinder();
diff --git a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
index bb8e5a4bc50..13f34f209ba 100644
--- a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
+++ b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
@@ -33,6 +33,7 @@ import org.apache.camel.spi.Language;
 import org.apache.camel.spi.ProcessorFactory;
 import org.apache.camel.support.AsyncProcessorConverterHelper;
 import org.apache.camel.support.AsyncProcessorSupport;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
@@ -130,7 +131,7 @@ public class DefaultServiceCallProcessor extends AsyncProcessorSupport {
     @Override
     protected void doBuild() throws Exception {
         ObjectHelper.notNull(camelContext, "camel context");
-        processorFactory = camelContext.getCamelContextExtension().getProcessorFactory();
+        processorFactory = PluginHelper.getProcessorFactory(camelContext);
     }
 
     @Override
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 7c3ea5cc9c2..244fd82d8c2 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
@@ -57,8 +57,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "Name": target.setName(property(camelContext, java.lang.String.class, value)); return true;
         case "processorexchangefactory":
         case "ProcessorExchangeFactory": target.setProcessorExchangeFactory(property(camelContext, org.apache.camel.spi.ProcessorExchangeFactory.class, value)); return true;
-        case "processorfactory":
-        case "ProcessorFactory": target.setProcessorFactory(property(camelContext, org.apache.camel.spi.ProcessorFactory.class, value)); return true;
         case "reactiveexecutor":
         case "ReactiveExecutor": target.setReactiveExecutor(property(camelContext, org.apache.camel.spi.ReactiveExecutor.class, value)); return true;
         case "registry":
@@ -120,8 +118,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "Name": return java.lang.String.class;
         case "processorexchangefactory":
         case "ProcessorExchangeFactory": return org.apache.camel.spi.ProcessorExchangeFactory.class;
-        case "processorfactory":
-        case "ProcessorFactory": return org.apache.camel.spi.ProcessorFactory.class;
         case "reactiveexecutor":
         case "ReactiveExecutor": return org.apache.camel.spi.ReactiveExecutor.class;
         case "registry":
@@ -184,8 +180,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "Name": return target.getName();
         case "processorexchangefactory":
         case "ProcessorExchangeFactory": return target.getProcessorExchangeFactory();
-        case "processorfactory":
-        case "ProcessorFactory": return target.getProcessorFactory();
         case "reactiveexecutor":
         case "ReactiveExecutor": return target.getReactiveExecutor();
         case "registry":
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 f38d25c1c73..e280a82d6dc 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
@@ -37,7 +37,6 @@ import org.apache.camel.Route;
 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.spi.AnnotationBasedProcessorFactory;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.BeanIntrospection;
@@ -60,7 +59,6 @@ import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.NormalizedEndpointUri;
 import org.apache.camel.spi.PluginManager;
 import org.apache.camel.spi.ProcessorExchangeFactory;
-import org.apache.camel.spi.ProcessorFactory;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.ReactiveExecutor;
 import org.apache.camel.spi.Registry;
@@ -244,16 +242,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public ProcessorFactory getProcessorFactory() {
-        return camelContext.getCamelContextExtension().getProcessorFactory();
-    }
-
-    @Override
-    public void setProcessorFactory(ProcessorFactory processorFactory) {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public InternalProcessorFactory getInternalProcessorFactory() {
         return camelContext.getCamelContextExtension().getInternalProcessorFactory();
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
index e9bb28cac5d..fc4f53f659d 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
@@ -26,6 +26,7 @@ import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.ToDefinition;
 import org.apache.camel.processor.InterceptEndpointProcessor;
 import org.apache.camel.processor.InterceptSendToEndpointCallback;
+import org.apache.camel.support.PluginHelper;
 
 public class InterceptSendToEndpointReifier extends ProcessorReifier<InterceptSendToEndpointDefinition> {
 
@@ -43,7 +44,7 @@ public class InterceptSendToEndpointReifier extends ProcessorReifier<InterceptSe
         if (afterUri != null) {
             ToDefinition to = new ToDefinition(afterUri);
             // at first use custom factory
-            afterProcessor = camelContext.getCamelContextExtension().getProcessorFactory().createProcessor(route, to);
+            afterProcessor = PluginHelper.getProcessorFactory(camelContext).createProcessor(route, to);
             // fallback to default implementation if factory did not create the processor
             if (afterProcessor == null) {
                 afterProcessor = createProcessor(to);
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 0d233c8e967..41096b48c89 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
@@ -115,9 +115,11 @@ 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.ProcessorFactory;
 import org.apache.camel.spi.ReifierStrategy;
 import org.apache.camel.spi.RouteIdAware;
 import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -572,8 +574,9 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
     protected Processor createChildProcessor(boolean mandatory) throws Exception {
         Processor children = null;
         // at first use custom factory
-        if (camelContext.getCamelContextExtension().getProcessorFactory() != null) {
-            children = camelContext.getCamelContextExtension().getProcessorFactory().createChildProcessor(route,
+        final ProcessorFactory processorFactory = PluginHelper.getProcessorFactory(camelContext);
+        if (processorFactory != null) {
+            children = processorFactory.createChildProcessor(route,
                     definition, mandatory);
         }
         // fallback to default implementation if factory did not create the
@@ -820,8 +823,9 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
 
         Processor processor = null;
         // at first use custom factory
-        if (camelContext.getCamelContextExtension().getProcessorFactory() != null) {
-            processor = camelContext.getCamelContextExtension().getProcessorFactory().createProcessor(route, output);
+        final ProcessorFactory processorFactory = PluginHelper.getProcessorFactory(camelContext);
+        if (processorFactory != null) {
+            processor = processorFactory.createProcessor(route, output);
         }
         // fallback to default implementation if factory did not create the processor
         if (processor == null) {
@@ -842,8 +846,9 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
         preCreateProcessor();
 
         // at first use custom factory
-        if (camelContext.getCamelContextExtension().getProcessorFactory() != null) {
-            processor = camelContext.getCamelContextExtension().getProcessorFactory().createProcessor(route, definition);
+        final ProcessorFactory processorFactory = PluginHelper.getProcessorFactory(camelContext);
+        if (processorFactory != null) {
+            processor = processorFactory.createProcessor(route, definition);
         }
         // fallback to default implementation if factory did not create the
         // 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 e09166f34c2..faa44550efd 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
@@ -1503,7 +1503,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
         ProcessorFactory processorFactory = getBeanForType(ProcessorFactory.class);
         if (processorFactory != null) {
             LOG.info("Using custom ProcessorFactory: {}", processorFactory);
-            getContext().getCamelContextExtension().setProcessorFactory(processorFactory);
+            getContext().getCamelContextExtension().addContextPlugin(ProcessorFactory.class, processorFactory);
         }
         Debugger debugger = getBeanForType(Debugger.class);
         if (debugger != null) {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
index ace4ecf2e98..82dced26ea2 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
@@ -36,7 +36,7 @@ public class CustomProcessorFactoryTest extends ContextTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         // register our custom factory
-        context.getCamelContextExtension().setProcessorFactory(new MyFactory());
+        context.getCamelContextExtension().addContextPlugin(ProcessorFactory.class, new MyFactory());
         return context;
     }
     // END SNIPPET: e1
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 00aed04324e..cfd445143f5 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
@@ -435,7 +435,7 @@ public final class DefaultConfigurationConfigurer {
         }
         ProcessorFactory pf = getSingleBeanOfType(registry, ProcessorFactory.class);
         if (pf != null) {
-            ecc.getCamelContextExtension().setProcessorFactory(pf);
+            ecc.getCamelContextExtension().addContextPlugin(ProcessorFactory.class, pf);
         }
         Debugger debugger = getSingleBeanOfType(registry, Debugger.class);
         if (debugger != null) {
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 ebd084d0b00..30ddec8e04e 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
@@ -37,6 +37,7 @@ import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.PackageScanResourceResolver;
 import org.apache.camel.spi.PeriodTaskResolver;
 import org.apache.camel.spi.PeriodTaskScheduler;
+import org.apache.camel.spi.ProcessorFactory;
 import org.apache.camel.spi.UriFactoryResolver;
 
 public final class PluginHelper {
@@ -345,4 +346,23 @@ public final class PluginHelper {
     public static DevConsoleResolver getDevConsoleResolver(ExtendedCamelContext extendedCamelContext) {
         return extendedCamelContext.getContextPlugin(DevConsoleResolver.class);
     }
+
+    /**
+     * Gets the current {@link org.apache.camel.spi.ProcessorFactory}
+     *
+     * @return the factory, can be <tt>null</tt> if no custom factory has been set
+     */
+    public static ProcessorFactory getProcessorFactory(CamelContext camelContext) {
+        return getProcessorFactory(camelContext.getCamelContextExtension());
+    }
+
+    /**
+     * Gets the current {@link org.apache.camel.spi.ProcessorFactory}
+     *
+     * @return the factory, can be <tt>null</tt> if no custom factory has been set
+     */
+    public static ProcessorFactory getProcessorFactory(ExtendedCamelContext extendedCamelContext) {
+        return extendedCamelContext.getContextPlugin(ProcessorFactory.class);
+    }
+
 }