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