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 2020/10/22 13:01:18 UTC

[camel] branch master updated: CAMEL-15730: camel-core - Untangle reifier from impl

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 897d9c4  CAMEL-15730: camel-core - Untangle reifier from impl
897d9c4 is described below

commit 897d9c480b4d7e3cdeec7b876609e9f9b51eb728
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Oct 22 14:55:56 2020 +0200

    CAMEL-15730: camel-core - Untangle reifier from impl
---
 .../org/apache/camel/ExtendedCamelContext.java     | 15 ++++++++
 .../src/main/java/org/apache/camel/Route.java      |  5 +++
 .../java/org/apache/camel/spi/RouteFactory.java    | 43 ++++++++++++++++++++++
 .../camel/impl/engine/AbstractCamelContext.java    | 21 +++++++++++
 .../org/apache/camel/impl/engine/DefaultRoute.java |  1 +
 .../camel/impl/engine/DefaultRouteFactory.java     | 35 ++++++++++++++++++
 .../camel/impl/engine/SimpleCamelContext.java      |  6 +++
 .../camel/impl/ExtendedCamelContextConfigurer.java |  5 +++
 .../camel/impl/lw/LightweightCamelContext.java     | 11 ++++++
 .../impl/lw/LightweightRuntimeCamelContext.java    | 11 ++++++
 .../org/apache/camel/reifier/RouteReifier.java     |  4 +-
 11 files changed, 155 insertions(+), 2 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 8ae1ae1..c1a7a59 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
@@ -57,6 +57,7 @@ import org.apache.camel.spi.ReactiveExecutor;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.RestBindingJaxbDataFormatFactory;
 import org.apache.camel.spi.RouteController;
+import org.apache.camel.spi.RouteFactory;
 import org.apache.camel.spi.RouteStartupOrder;
 import org.apache.camel.spi.UnitOfWorkFactory;
 import org.apache.camel.spi.UriFactoryResolver;
@@ -383,6 +384,20 @@ public interface ExtendedCamelContext extends CamelContext {
     void setInterceptEndpointFactory(InterceptEndpointFactory interceptEndpointFactory);
 
     /**
+     * Gets the current {@link org.apache.camel.spi.RouteFactory}
+     *
+     * @return the factory
+     */
+    RouteFactory getRouteFactory();
+
+    /**
+     * Sets a custom {@link org.apache.camel.spi.RouteFactory}
+     *
+     * @param routeFactory the custom factory
+     */
+    void setRouteFactory(RouteFactory routeFactory);
+
+    /**
      * Returns the JAXB Context factory used to create Models.
      *
      * @return the JAXB Context factory used to create Models.
diff --git a/core/camel-api/src/main/java/org/apache/camel/Route.java b/core/camel-api/src/main/java/org/apache/camel/Route.java
index f6c8730..83a6e7b 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Route.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Route.java
@@ -88,6 +88,11 @@ public interface Route extends RuntimeConfiguration {
     Processor getProcessor();
 
     /**
+     * Sets the {@link Processor}
+     */
+    void setProcessor(Processor processor);
+
+    /**
      * Whether or not the route supports suspension (suspend and resume)
      *
      * @return <tt>true</tt> if this route supports suspension
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RouteFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/RouteFactory.java
new file mode 100644
index 0000000..cadab64
--- /dev/null
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RouteFactory.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spi;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.NamedNode;
+import org.apache.camel.Route;
+
+/**
+ * A factory to create {@link Route}
+ */
+public interface RouteFactory {
+
+    /**
+     * Creates the route which should be configured afterwards with more configurations.
+     *
+     * @param  camelContext     the camel context
+     * @param  routeDefinition  the route definition
+     * @param  routeId          the route id
+     * @param  routeDescription the route description
+     * @param  endpoint         the input endpoint (consumer)
+     * @return                  the created route
+     */
+    Route createRoute(
+            CamelContext camelContext, NamedNode routeDefinition,
+            String routeId, String routeDescription, Endpoint endpoint);
+
+}
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 7f28c9f..39f8131 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
@@ -129,6 +129,7 @@ import org.apache.camel.spi.RestRegistry;
 import org.apache.camel.spi.RestRegistryFactory;
 import org.apache.camel.spi.RouteController;
 import org.apache.camel.spi.RouteError.Phase;
+import org.apache.camel.spi.RouteFactory;
 import org.apache.camel.spi.RoutePolicyFactory;
 import org.apache.camel.spi.RouteStartupOrder;
 import org.apache.camel.spi.RouteTemplateParameterSource;
@@ -276,6 +277,7 @@ public abstract class AbstractCamelContext extends BaseService
     private volatile NodeIdFactory nodeIdFactory;
     private volatile ProcessorFactory processorFactory;
     private volatile InterceptEndpointFactory interceptEndpointFactory;
+    private volatile RouteFactory routeFactory;
     private volatile MessageHistoryFactory messageHistoryFactory;
     private volatile FactoryFinderResolver factoryFinderResolver;
     private volatile StreamCachingStrategy streamCachingStrategy;
@@ -3821,6 +3823,23 @@ public abstract class AbstractCamelContext extends BaseService
     }
 
     @Override
+    public RouteFactory getRouteFactory() {
+        if (routeFactory == null) {
+            synchronized (lock) {
+                if (routeFactory == null) {
+                    setRouteFactory(createRouteFactory());
+                }
+            }
+        }
+        return routeFactory;
+    }
+
+    @Override
+    public void setRouteFactory(RouteFactory routeFactory) {
+        this.routeFactory = routeFactory;
+    }
+
+    @Override
     public MessageHistoryFactory getMessageHistoryFactory() {
         if (messageHistoryFactory == null) {
             synchronized (lock) {
@@ -4192,6 +4211,8 @@ public abstract class AbstractCamelContext extends BaseService
 
     protected abstract InterceptEndpointFactory createInterceptEndpointFactory();
 
+    protected abstract RouteFactory createRouteFactory();
+
     protected abstract DataFormatResolver createDataFormatResolver();
 
     protected abstract MessageHistoryFactory createMessageHistoryFactory();
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRoute.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRoute.java
index 51a42c1..e17a055 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRoute.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRoute.java
@@ -549,6 +549,7 @@ public class DefaultRoute extends ServiceSupport implements Route {
         return processor;
     }
 
+    @Override
     public void setProcessor(Processor processor) {
         this.processor = processor;
     }
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteFactory.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteFactory.java
new file mode 100644
index 0000000..52a422c
--- /dev/null
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteFactory.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl.engine;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.NamedNode;
+import org.apache.camel.Route;
+import org.apache.camel.spi.RouteFactory;
+
+/**
+ * Default {@link RouteFactory}.
+ */
+public class DefaultRouteFactory implements RouteFactory {
+
+    @Override
+    public Route createRoute(
+            CamelContext camelContext, NamedNode routeDefinition, String routeId, String routeDescription, Endpoint endpoint) {
+        return new DefaultRoute(camelContext, routeDefinition, routeId, routeDescription, endpoint);
+    }
+}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 4c2b962..f7e1f05 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -64,6 +64,7 @@ import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.RestBindingJaxbDataFormatFactory;
 import org.apache.camel.spi.RestRegistryFactory;
 import org.apache.camel.spi.RouteController;
+import org.apache.camel.spi.RouteFactory;
 import org.apache.camel.spi.ShutdownStrategy;
 import org.apache.camel.spi.StreamCachingStrategy;
 import org.apache.camel.spi.Tracer;
@@ -206,6 +207,11 @@ public class SimpleCamelContext extends AbstractCamelContext {
     }
 
     @Override
+    protected RouteFactory createRouteFactory() {
+        return new DefaultRouteFactory();
+    }
+
+    @Override
     protected DataFormatResolver createDataFormatResolver() {
         return new DefaultDataFormatResolver();
     }
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 79abec6..9464b40 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
@@ -67,6 +67,7 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         map.put("RestConfiguration", org.apache.camel.spi.RestConfiguration.class);
         map.put("RestRegistry", org.apache.camel.spi.RestRegistry.class);
         map.put("RouteController", org.apache.camel.spi.RouteController.class);
+        map.put("RouteFactory", org.apache.camel.spi.RouteFactory.class);
         map.put("RuntimeCamelCatalog", org.apache.camel.catalog.RuntimeCamelCatalog.class);
         map.put("RuntimeEndpointRegistry", org.apache.camel.spi.RuntimeEndpointRegistry.class);
         map.put("SSLContextParameters", org.apache.camel.support.jsse.SSLContextParameters.class);
@@ -192,6 +193,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "RestRegistry": target.setRestRegistry(property(camelContext, org.apache.camel.spi.RestRegistry.class, value)); return true;
         case "routecontroller":
         case "RouteController": target.setRouteController(property(camelContext, org.apache.camel.spi.RouteController.class, value)); return true;
+        case "routefactory":
+        case "RouteFactory": target.setRouteFactory(property(camelContext, org.apache.camel.spi.RouteFactory.class, value)); return true;
         case "runtimecamelcatalog":
         case "RuntimeCamelCatalog": target.setRuntimeCamelCatalog(property(camelContext, org.apache.camel.catalog.RuntimeCamelCatalog.class, value)); return true;
         case "runtimeendpointregistry":
@@ -343,6 +346,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "RestRegistry": return target.getRestRegistry();
         case "routecontroller":
         case "RouteController": return target.getRouteController();
+        case "routefactory":
+        case "RouteFactory": return target.getRouteFactory();
         case "runtimecamelcatalog":
         case "RuntimeCamelCatalog": return target.getRuntimeCamelCatalog();
         case "runtimeendpointregistry":
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
index 159a8d1..60b52f1 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
@@ -120,6 +120,7 @@ import org.apache.camel.spi.RestBindingJaxbDataFormatFactory;
 import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.spi.RestRegistry;
 import org.apache.camel.spi.RouteController;
+import org.apache.camel.spi.RouteFactory;
 import org.apache.camel.spi.RoutePolicyFactory;
 import org.apache.camel.spi.RouteStartupOrder;
 import org.apache.camel.spi.RuntimeEndpointRegistry;
@@ -1254,6 +1255,16 @@ public class LightweightCamelContext implements ExtendedCamelContext, CatalogCam
     }
 
     @Override
+    public RouteFactory getRouteFactory() {
+        return getExtendedCamelContext().getRouteFactory();
+    }
+
+    @Override
+    public void setRouteFactory(RouteFactory routeFactory) {
+        getExtendedCamelContext().setRouteFactory(routeFactory);
+    }
+
+    @Override
     public ModelJAXBContextFactory getModelJAXBContextFactory() {
         return getExtendedCamelContext().getModelJAXBContextFactory();
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
index 1bb7e5e..811d895 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
@@ -116,6 +116,7 @@ import org.apache.camel.spi.RestBindingJaxbDataFormatFactory;
 import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.spi.RestRegistry;
 import org.apache.camel.spi.RouteController;
+import org.apache.camel.spi.RouteFactory;
 import org.apache.camel.spi.RoutePolicyFactory;
 import org.apache.camel.spi.RouteStartupOrder;
 import org.apache.camel.spi.RuntimeEndpointRegistry;
@@ -1391,6 +1392,16 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat
     }
 
     @Override
+    public RouteFactory getRouteFactory() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setRouteFactory(RouteFactory routeFactory) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
     public DeferServiceFactory getDeferServiceFactory() {
         throw new UnsupportedOperationException();
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
index fa5a5e1..dea09b3 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -35,7 +35,6 @@ import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.builder.AdviceWithTask;
 import org.apache.camel.builder.EndpointConsumerBuilder;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.model.Model;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.PropertyDefinition;
@@ -253,7 +252,8 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         // create route
         String id = definition.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
         String desc = definition.getDescriptionText();
-        DefaultRoute route = new DefaultRoute(camelContext, definition, id, desc, endpoint);
+        Route route = camelContext.adapt(ExtendedCamelContext.class).getRouteFactory().createRoute(camelContext, definition, id,
+                desc, endpoint);
 
         // configure error handler
         route.setErrorHandlerFactory(definition.getErrorHandlerFactory());