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());