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 <gno...@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); } }