You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2019/05/21 08:47:24 UTC

[camel] 02/08: [CAMEL-13371] Remove some usage of the RouteDefinition model

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

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

commit 2b7c4d73dcfe06b6df65dca05aa346c0ae2a9124
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Mon May 20 14:35:55 2019 +0200

    [CAMEL-13371] Remove some usage of the RouteDefinition model
---
 .../java/org/apache/camel/spi/RouteContext.java    |  9 ++---
 .../java/org/apache/camel/spi/RoutePolicy.java     |  2 +-
 .../camel/impl/DefaultCamelBeanPostProcessor.java  |  2 ++
 .../java/org/apache/camel/impl/DefaultModel.java   | 12 +++++--
 .../org/apache/camel/impl/DefaultRouteContext.java | 20 ++---------
 .../camel/impl/cluster/ClusteredRoutePolicy.java   |  5 ---
 .../DefaultExceptionPolicyStrategy.java            |  8 ++---
 .../org/apache/camel/reifier/RouteReifier.java     | 41 +++++++---------------
 8 files changed, 35 insertions(+), 64 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java b/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
index 415ecd7..ba8d9c6 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
@@ -40,13 +40,6 @@ public interface RouteContext extends RuntimeConfiguration, EndpointAware {
     String getRouteId();
 
     /**
-     * Gets the from type
-     *
-     * @return the from type
-     */
-    NamedNode getFrom();
-
-    /**
      * Get the route type
      *
      * @return the route type
@@ -163,6 +156,8 @@ public interface RouteContext extends RuntimeConfiguration, EndpointAware {
      */
     void setIsRouteAdded(boolean value);
 
+    void setEndpoint(Endpoint endpoint);
+
     /**
      * Returns the isRouteAdded flag
      * 
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicy.java b/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicy.java
index 06a5196..6507298 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicy.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicy.java
@@ -22,7 +22,7 @@ import org.apache.camel.Route;
 /**
  * Policy for a {@link Route} which allows controlling the route at runtime.
  * <p/>
- * For example using the {@link org.apache.camel.impl.ThrottlingInflightRoutePolicy} to throttle the {@link Route}
+ * For example using the {@link org.apache.camel.throttling.ThrottlingInflightRoutePolicy} to throttle the {@link Route}
  * at runtime where it suspends and resume the {@link org.apache.camel.Route#getConsumer()}.
  * <p/>
  * See also {@link Route} class javadoc about controlling the lifecycle of a {@link Route}
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelBeanPostProcessor.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelBeanPostProcessor.java
index dfc2c46..51a715e 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelBeanPostProcessor.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelBeanPostProcessor.java
@@ -170,12 +170,14 @@ public class DefaultCamelBeanPostProcessor implements CamelBeanPostProcessor {
 
                 EndpointInject endpointInject = field.getAnnotation(EndpointInject.class);
                 if (endpointInject != null && getPostProcessorHelper().matchContext(endpointInject.context())) {
+                    @SuppressWarnings("deprecation")
                     String uri = endpointInject.value().isEmpty() ? endpointInject.uri() : endpointInject.value();
                     injectField(field, uri, endpointInject.property(), bean, beanName);
                 }
 
                 Produce produce = field.getAnnotation(Produce.class);
                 if (produce != null && getPostProcessorHelper().matchContext(produce.context())) {
+                    @SuppressWarnings("deprecation")
                     String uri = produce.value().isEmpty() ? produce.uri() : produce.value();
                     injectField(field, uri, produce.property(), bean, beanName, produce.binding());
                 }
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
index a639d38..6da696f 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -46,6 +46,7 @@ import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
 import org.apache.camel.reifier.RouteReifier;
+import org.apache.camel.spi.RouteContext;
 
 public class DefaultModel implements Model {
 
@@ -274,6 +275,11 @@ public class DefaultModel implements Model {
     }
 
     public void startRoute(RouteDefinition routeDefinition) throws Exception {
+        prepare(routeDefinition);
+        start(routeDefinition);
+    }
+
+    protected void prepare(RouteDefinition routeDefinition) throws Exception {
         // assign ids to the routes and validate that the id's is all unique
         RouteDefinitionHelper.forceAssignIds(camelContext, routeDefinitions);
         String duplicate = RouteDefinitionHelper.validateUniqueIds(routeDefinition, routeDefinitions);
@@ -286,14 +292,16 @@ public class DefaultModel implements Model {
             RouteDefinitionHelper.prepareRoute(camelContext, routeDefinition);
             routeDefinition.markPrepared();
         }
+    }
 
+    protected void start(RouteDefinition routeDefinition) throws Exception {
         // indicate we are staring the route using this thread so
         // we are able to query this if needed
         AbstractCamelContext mcc = camelContext.adapt(AbstractCamelContext.class);
         mcc.setStartingRoutes(true);
         try {
-
-            Route route = new RouteReifier(routeDefinition).createRoute(mcc);
+            RouteContext routeContext = new DefaultRouteContext(camelContext, routeDefinition);
+            Route route = new RouteReifier(routeDefinition).createRoute(camelContext, routeContext);
             RouteService routeService = new RouteService(route);
             mcc.startRouteService(routeService, true);
         } finally {
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
index 061adbe..f56465c 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
@@ -34,7 +34,6 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.ShutdownRoute;
 import org.apache.camel.ShutdownRunningTask;
 import org.apache.camel.impl.engine.EventDrivenConsumerRoute;
-import org.apache.camel.model.FromDefinition;
 import org.apache.camel.model.PropertyDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.processor.CamelInternalProcessor;
@@ -58,7 +57,6 @@ public class DefaultRouteContext implements RouteContext {
     private final Map<NamedNode, AtomicInteger> nodeIndex = new HashMap<>();
     private final RouteDefinition route;
     private final String routeId;
-    private FromDefinition from;
     private Route runtimeRoute;
     private Endpoint endpoint;
     private final List<Processor> eventDrivenProcessors = new ArrayList<>();
@@ -80,10 +78,9 @@ public class DefaultRouteContext implements RouteContext {
     private RouteError routeError;
     private RouteController routeController;
 
-    public DefaultRouteContext(CamelContext camelContext, RouteDefinition route, FromDefinition from) {
+    public DefaultRouteContext(CamelContext camelContext, RouteDefinition route) {
         this.camelContext = camelContext;
         this.route = route;
-        this.from = from;
         this.routeId = route.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
     }
 
@@ -95,11 +92,7 @@ public class DefaultRouteContext implements RouteContext {
         this.endpoint = endpoint;
     }
 
-    public FromDefinition getFrom() {
-        return from;
-    }
-
-    public RouteDefinition getRoute() {
+    public NamedNode getRoute() {
         return route;
     }
 
@@ -168,9 +161,6 @@ public class DefaultRouteContext implements RouteContext {
         if (!eventDrivenProcessors.isEmpty()) {
             Processor target = Pipeline.newInstance(getCamelContext(), eventDrivenProcessors);
 
-            // force creating the route id so its known ahead of the route is started
-            String routeId = route.idOrCreate(getCamelContext().adapt(ExtendedCamelContext.class).getNodeIdFactory());
-
             // and wrap it in a unit of work so the UoW is on the top, so the entire route will be in the same UoW
             CamelInternalProcessor internal = new CamelInternalProcessor(target);
             internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(this));
@@ -476,11 +466,7 @@ public class DefaultRouteContext implements RouteContext {
     }
     
     public int getAndIncrement(NamedNode node) {
-        AtomicInteger count = nodeIndex.get(node);
-        if (count == null) {
-            count = new AtomicInteger();
-            nodeIndex.put(node, count);
-        }
+        AtomicInteger count = nodeIndex.computeIfAbsent(node, n -> new AtomicInteger());
         return count.getAndIncrement();
     }
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java b/core/camel-core/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java
index 332807b..a5ae873 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java
@@ -36,7 +36,6 @@ import org.apache.camel.cluster.CamelClusterEventListener;
 import org.apache.camel.cluster.CamelClusterMember;
 import org.apache.camel.cluster.CamelClusterService;
 import org.apache.camel.cluster.CamelClusterView;
-import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
 import org.apache.camel.support.EventNotifierSupport;
@@ -153,10 +152,6 @@ public final class ClusteredRoutePolicy extends RoutePolicySupport implements Ca
     // life-cycle
     // ****************************************************
 
-    private RouteDefinition definition(Route route) {
-        return (RouteDefinition) route.getRouteContext().getRoute();
-    }
-
     private ServiceStatus getStatus(Route route) {
         if (camelContext != null) {
             ServiceStatus answer = camelContext.getRouteController().getRouteStatus(route.getId());
diff --git a/core/camel-core/src/main/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategy.java b/core/camel-core/src/main/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategy.java
index e3d8830..948d05a 100644
--- a/core/camel-core/src/main/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategy.java
+++ b/core/camel-core/src/main/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategy.java
@@ -135,11 +135,11 @@ public class DefaultExceptionPolicyStrategy implements ExceptionPolicyStrategy {
             // if OnException is route scoped then the current route (Exchange) must match
             // so we will not pick an OnException from another route
             if (exchange != null && exchange.getUnitOfWork() != null && type.isRouteScoped()) {
-                RouteDefinition route = exchange.getUnitOfWork().getRouteContext() != null ? (RouteDefinition) exchange.getUnitOfWork().getRouteContext().getRoute() : null;
-                RouteDefinition typeRoute = ProcessorDefinitionHelper.getRoute(type);
-                if (route != null && typeRoute != null && route != typeRoute) {
+                String route = exchange.getUnitOfWork().getRouteContext() != null ? exchange.getUnitOfWork().getRouteContext().getRouteId() : null;
+                String typeRoute = ProcessorDefinitionHelper.getRouteId(type);
+                if (route != null && typeRoute != null && !route.equals(typeRoute)) {
                     if (LOG.isTraceEnabled()) {
-                        LOG.trace("The type is scoped for route: {} however Exchange is at route: {}", typeRoute.getId(), route.getId());
+                        LOG.trace("The type is scoped for route: {} however Exchange is at route: {}", typeRoute, route);
                     }
                     continue;
                 }
diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
index 9932134..750d753 100644
--- a/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++ b/core/camel-core/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -22,18 +22,14 @@ import java.util.StringTokenizer;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
-import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.FailedToCreateRouteException;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
-import org.apache.camel.StatefulService;
 import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.builder.AdviceWithTask;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.DefaultRouteContext;
-import org.apache.camel.model.FromDefinition;
 import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.ProcessorDefinition;
@@ -88,15 +84,9 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         throw new UnsupportedOperationException("Not implemented for RouteDefinition");
     }
 
-    public Route createRoute(CamelContext camelContext) throws Exception {
-        @SuppressWarnings("deprecation")
-        ErrorHandlerFactory handler = camelContext.adapt(ExtendedCamelContext.class).getErrorHandlerFactory();
-        if (handler != null) {
-            definition.setErrorHandlerBuilderIfNull(handler);
-        }
-
+    public Route createRoute(CamelContext camelContext, RouteContext routeContext) {
         try {
-            return createRoute(camelContext, definition.getInput());
+            return doCreateRoute(camelContext, routeContext);
         } catch (FailedToCreateRouteException e) {
             throw e;
         } catch (Exception e) {
@@ -192,20 +182,15 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         log.info("Adviced route before/after as XML:\n{}\n{}", beforeAsXml, afterAsXml);
 
         // If the camel context is started then we start the route
-        if (camelContext instanceof StatefulService) {
-            StatefulService service = (StatefulService) camelContext;
-            if (service.isStarted()) {
-                camelContext.getExtension(Model.class).addRouteDefinition(merged);
-            }
+        if (camelContext.isStarted()) {
+            camelContext.getExtension(Model.class).addRouteDefinition(merged);
         }
         return merged;
     }
 
     // Implementation methods
     // -------------------------------------------------------------------------
-    protected Route createRoute(CamelContext camelContext, FromDefinition fromType) throws Exception {
-        DefaultRouteContext routeContext = new DefaultRouteContext(camelContext, definition, fromType);
-
+    protected Route doCreateRoute(CamelContext camelContext, RouteContext routeContext) throws Exception {
         // configure tracing
         if (definition.getTrace() != null) {
             Boolean isTrace = CamelContextHelper.parseBoolean(camelContext, definition.getTrace());
@@ -324,12 +309,14 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
 
         // should inherit the intercept strategies we have defined
         routeContext.setInterceptStrategies(definition.getInterceptStrategies());
+
         // resolve endpoint
-        Endpoint endpoint = routeContext.getFrom().getEndpoint();
+        Endpoint endpoint = definition.getInput().getEndpoint();
         if (endpoint == null) {
-            endpoint = routeContext.resolveEndpoint(routeContext.getFrom().getUri());
+            endpoint = routeContext.resolveEndpoint(definition.getInput().getUri());
         }
         routeContext.setEndpoint(endpoint);
+
         // notify route context created
         for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
             strategy.onRouteContextCreate(routeContext);
@@ -337,11 +324,10 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
 
         // validate route has output processors
         if (!ProcessorDefinitionHelper.hasOutputs(definition.getOutputs(), true)) {
-            RouteDefinition route = (RouteDefinition) routeContext.getRoute();
-            String at = fromType.toString();
-            Exception cause = new IllegalArgumentException("Route " + route.getId() + " has no output processors."
+            String at = definition.getInput().toString();
+            Exception cause = new IllegalArgumentException("Route " + definition.getId() + " has no output processors."
                     + " You need to add outputs to the route such as to(\"log:foo\").");
-            throw new FailedToCreateRouteException(route.getId(), route.toString(), at, cause);
+            throw new FailedToCreateRouteException(definition.getId(), definition.toString(), at, cause);
         }
 
         List<ProcessorDefinition<?>> list = new ArrayList<>(definition.getOutputs());
@@ -349,8 +335,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
             try {
                 ProcessorReifier.reifier(output).addRoutes(routeContext);
             } catch (Exception e) {
-                RouteDefinition route = (RouteDefinition) routeContext.getRoute();
-                throw new FailedToCreateRouteException(route.getId(), route.toString(), output.toString(), e);
+                throw new FailedToCreateRouteException(definition.getId(), definition.toString(), output.toString(), e);
             }
         }