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 6ae7f24 CAMEL-15036: Make it easier to switch to use supervising route controller. 6ae7f24 is described below commit 6ae7f243fa529c5382a18b1d1a0e597cd81d8349 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon May 11 12:37:43 2020 +0200 CAMEL-15036: Make it easier to switch to use supervising route controller. --- .../org/apache/camel/ExtendedCamelContext.java | 11 ------- .../java/org/apache/camel/spi/RouteController.java | 15 +++++++++ .../camel/impl/engine/AbstractCamelContext.java | 32 ++++++------------- .../camel/impl/engine/DefaultRouteController.java | 19 ++++++++++++ .../camel/impl/engine/SimpleCamelContext.java | 6 ---- .../camel/impl/ExtendedCamelContextConfigurer.java | 5 --- .../camel/impl/lw/LightweightCamelContext.java | 10 ------ .../impl/lw/LightweightRuntimeCamelContext.java | 36 ++++++++++++++-------- .../DefaultSupervisingRouteControllerTest.java | 8 ++--- .../camel/main/DefaultConfigurationConfigurer.java | 5 +-- .../modules/ROOT/pages/route-controller.adoc | 30 +++++++++++------- 11 files changed, 91 insertions(+), 86 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 0546459..ca9bd29 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 @@ -56,7 +56,6 @@ import org.apache.camel.spi.Registry; import org.apache.camel.spi.RestBindingJaxbDataFormatFactory; import org.apache.camel.spi.RouteController; import org.apache.camel.spi.RouteStartupOrder; -import org.apache.camel.spi.SupervisingRouteController; import org.apache.camel.spi.UnitOfWorkFactory; import org.apache.camel.spi.XMLRoutesDefinitionLoader; @@ -556,16 +555,6 @@ public interface ExtendedCamelContext extends CamelContext { void setConfigurerResolver(ConfigurerResolver configurerResolver); /** - * Gets the {@link SupervisingRouteController} to use. - */ - SupervisingRouteController getSupervisingRouteController(); - - /** - * Sets the {@link SupervisingRouteController} to use. - */ - void setSupervisingRouteController(SupervisingRouteController supervisingRouteController); - - /** * Internal {@link RouteController} that are only used internally by Camel to * perform basic route operations. Do not use this as end user. */ diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java b/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java index 126620b..862b816 100644 --- a/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java @@ -30,6 +30,21 @@ import org.apache.camel.StaticService; public interface RouteController extends CamelContextAware, StaticService { /** + * Enables supervising {@link RouteController}. + */ + SupervisingRouteController supervising(); + + /** + * Adapts this {@link org.apache.camel.spi.RouteController} to the specialized type. + * <p/> + * For example to adapt to <tt>SupervisingRouteController</tt>. + * + * @param type the type to adapt to + * @return this {@link org.apache.camel.CamelContext} adapted to the given type + */ + <T extends RouteController> T adapt(Class<T> type); + + /** * Return the list of routes controlled by this controller. * * @return the list of controlled routes 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 c175ae3..94b799f 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 @@ -26,7 +26,6 @@ import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -53,7 +52,6 @@ import org.apache.camel.Endpoint; import org.apache.camel.ErrorHandlerFactory; import org.apache.camel.ExchangeConstantProvider; import org.apache.camel.ExtendedCamelContext; -import org.apache.camel.ExtendedStartupListener; import org.apache.camel.FailedToStartRouteException; import org.apache.camel.FluentProducerTemplate; import org.apache.camel.GlobalEndpointConfiguration; @@ -277,7 +275,6 @@ public abstract class AbstractCamelContext extends BaseService private volatile UuidGenerator uuidGenerator; private volatile UnitOfWorkFactory unitOfWorkFactory; private volatile RouteController routeController; - private volatile SupervisingRouteController supervisingRouteController; private volatile ScheduledExecutorService errorHandlerExecutorService; private volatile BeanIntrospection beanIntrospection; private volatile Tracer tracer; @@ -1099,23 +1096,6 @@ public abstract class AbstractCamelContext extends BaseService } @Override - public SupervisingRouteController getSupervisingRouteController() { - if (supervisingRouteController == null) { - synchronized (lock) { - if (supervisingRouteController == null) { - setSupervisingRouteController(createSupervisingRouteController()); - } - } - } - return supervisingRouteController; - } - - @Override - public void setSupervisingRouteController(SupervisingRouteController supervisingRouteController) { - this.supervisingRouteController = supervisingRouteController; - } - - @Override public List<RouteStartupOrder> getRouteStartupOrder() { return routeStartupOrder; } @@ -4530,8 +4510,6 @@ public abstract class AbstractCamelContext extends BaseService protected abstract RouteController createRouteController(); - protected abstract SupervisingRouteController createSupervisingRouteController(); - protected abstract ShutdownStrategy createShutdownStrategy(); protected abstract PackageScanClassResolver createPackageScanClassResolver(); @@ -4593,6 +4571,16 @@ public abstract class AbstractCamelContext extends BaseService public RouteController getInternalRouteController() { return new RouteController() { @Override + public SupervisingRouteController supervising() { + throw new UnsupportedOperationException(); + } + + @Override + public <T extends RouteController> T adapt(Class<T> type) { + return type.cast(this); + } + + @Override public Collection<Route> getControlledRoutes() { return AbstractCamelContext.this.getRoutes(); } diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java index a13e13a..5eefe65 100644 --- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java +++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java @@ -26,6 +26,7 @@ import org.apache.camel.NonManagedService; import org.apache.camel.Route; import org.apache.camel.ServiceStatus; import org.apache.camel.spi.RouteController; +import org.apache.camel.spi.SupervisingRouteController; import org.apache.camel.support.service.ServiceSupport; /** @@ -125,6 +126,24 @@ public class DefaultRouteController extends ServiceSupport implements RouteContr // *************************************************** @Override + public <T extends RouteController> T adapt(Class<T> type) { + return type.cast(this); + } + + @Override + public SupervisingRouteController supervising() { + if (this instanceof SupervisingRouteController) { + return (SupervisingRouteController) this; + } else { + // change current route controller to be supervising + SupervisingRouteController src = new DefaultSupervisingRouteController(); + src.setCamelContext(camelContext); + camelContext.setRouteController(src); + return src; + } + } + + @Override public Collection<Route> getControlledRoutes() { return Collections.emptyList(); } 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 aae67d7..4c713e6 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 @@ -68,7 +68,6 @@ import org.apache.camel.spi.RestRegistryFactory; import org.apache.camel.spi.RouteController; import org.apache.camel.spi.ShutdownStrategy; import org.apache.camel.spi.StreamCachingStrategy; -import org.apache.camel.spi.SupervisingRouteController; import org.apache.camel.spi.Tracer; import org.apache.camel.spi.TransformerRegistry; import org.apache.camel.spi.TypeConverterRegistry; @@ -227,11 +226,6 @@ public class SimpleCamelContext extends AbstractCamelContext { } @Override - protected SupervisingRouteController createSupervisingRouteController() { - return new DefaultSupervisingRouteController(); - } - - @Override protected ShutdownStrategy createShutdownStrategy() { return new DefaultShutdownStrategy(getCamelContextReference()); } 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 895c1e1..2ba64b3 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 @@ -131,8 +131,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com case "StreamCaching": target.setStreamCaching(property(camelContext, java.lang.Boolean.class, value)); return true; case "streamcachingstrategy": case "StreamCachingStrategy": target.setStreamCachingStrategy(property(camelContext, org.apache.camel.spi.StreamCachingStrategy.class, value)); return true; - case "supervisingroutecontroller": - case "SupervisingRouteController": target.setSupervisingRouteController(property(camelContext, org.apache.camel.spi.SupervisingRouteController.class, value)); return true; case "tracer": case "Tracer": target.setTracer(property(camelContext, org.apache.camel.spi.Tracer.class, value)); return true; case "tracing": @@ -218,7 +216,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com answer.put("ShutdownStrategy", org.apache.camel.spi.ShutdownStrategy.class); answer.put("StreamCaching", java.lang.Boolean.class); answer.put("StreamCachingStrategy", org.apache.camel.spi.StreamCachingStrategy.class); - answer.put("SupervisingRouteController", org.apache.camel.spi.SupervisingRouteController.class); answer.put("Tracer", org.apache.camel.spi.Tracer.class); answer.put("Tracing", java.lang.Boolean.class); answer.put("TracingPattern", java.lang.String.class); @@ -349,8 +346,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com case "StreamCaching": return target.isStreamCaching(); case "streamcachingstrategy": case "StreamCachingStrategy": return target.getStreamCachingStrategy(); - case "supervisingroutecontroller": - case "SupervisingRouteController": return target.getSupervisingRouteController(); case "tracer": case "Tracer": return target.getTracer(); case "tracing": 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 c8c8493..8dd1887 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 @@ -498,16 +498,6 @@ public class LightweightCamelContext implements ExtendedCamelContext, CatalogCam } @Override - public void setSupervisingRouteController(SupervisingRouteController supervisingRouteController) { - delegate.adapt(ExtendedCamelContext.class).setSupervisingRouteController(supervisingRouteController); - } - - @Override - public SupervisingRouteController getSupervisingRouteController() { - return delegate.adapt(ExtendedCamelContext.class).getSupervisingRouteController(); - } - - @Override public List<Route> getRoutes() { return delegate.getRoutes(); } 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 82fd468..aa54219 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 @@ -165,7 +165,6 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat private final ClassLoader applicationContextClassLoader; private final UnitOfWorkFactory unitOfWorkFactory; private final RouteController routeController; - private final SupervisingRouteController supervisingRouteController; private final InflightRepository inflightRepository; private final Injector injector; private final ClassResolver classResolver; @@ -210,7 +209,6 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat applicationContextClassLoader = context.getApplicationContextClassLoader(); unitOfWorkFactory = context.adapt(ExtendedCamelContext.class).getUnitOfWorkFactory(); routeController = context.getRouteController(); - supervisingRouteController = context.adapt(ExtendedCamelContext.class).getSupervisingRouteController(); inflightRepository = context.getInflightRepository(); globalOptions = context.getGlobalOptions(); injector = context.getInjector(); @@ -695,11 +693,6 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat } @Override - public SupervisingRouteController getSupervisingRouteController() { - return supervisingRouteController; - } - - @Override public List<Route> getRoutes() { return routes; } @@ -1614,11 +1607,6 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat } @Override - public void setSupervisingRouteController(SupervisingRouteController supervisingRouteController) { - throw new UnsupportedOperationException(); - } - - @Override public void addRoutes(RoutesBuilder builder) throws Exception { throw new UnsupportedOperationException(); } @@ -1762,61 +1750,85 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat public RouteController getInternalRouteController() { return new RouteController() { @Override + public SupervisingRouteController supervising() { + throw new UnsupportedOperationException(); + } + + @Override + public <T extends RouteController> T adapt(Class<T> type) { + return type.cast(this); + } + + @Override public Collection<Route> getControlledRoutes() { return routes; } + @Override public void startAllRoutes() throws Exception { throw new UnsupportedOperationException(); } + @Override public boolean isStartingRoutes() { return false; } + @Override public ServiceStatus getRouteStatus(String routeId) { return ServiceStatus.Started; } + @Override public void startRoute(String routeId) throws Exception { throw new UnsupportedOperationException(); } + @Override public void stopRoute(String routeId) throws Exception { throw new UnsupportedOperationException(); } + @Override public void stopRoute(String routeId, long timeout, TimeUnit timeUnit) throws Exception { throw new UnsupportedOperationException(); } + @Override public boolean stopRoute(String routeId, long timeout, TimeUnit timeUnit, boolean abortAfterTimeout) throws Exception { throw new UnsupportedOperationException(); } + @Override public void suspendRoute(String routeId) throws Exception { throw new UnsupportedOperationException(); } + @Override public void suspendRoute(String routeId, long timeout, TimeUnit timeUnit) throws Exception { throw new UnsupportedOperationException(); } + @Override public void resumeRoute(String routeId) throws Exception { throw new UnsupportedOperationException(); } + @Override public void setCamelContext(CamelContext camelContext) { throw new UnsupportedOperationException(); } + @Override public CamelContext getCamelContext() { throw new UnsupportedOperationException(); } + @Override public void start() { throw new UnsupportedOperationException(); } + @Override public void stop() { throw new UnsupportedOperationException(); diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultSupervisingRouteControllerTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultSupervisingRouteControllerTest.java index 9cc9820..abb7ece 100644 --- a/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultSupervisingRouteControllerTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultSupervisingRouteControllerTest.java @@ -22,7 +22,6 @@ import java.util.concurrent.TimeUnit; import org.apache.camel.Consumer; import org.apache.camel.ContextTestSupport; import org.apache.camel.Endpoint; -import org.apache.camel.ExtendedCamelContext; import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; @@ -44,13 +43,12 @@ public class DefaultSupervisingRouteControllerTest extends ContextTestSupport { // lets make a simple route context.addRoutes(new MyRoute()); - // configure supervising - SupervisingRouteController src = context.adapt(ExtendedCamelContext.class).getSupervisingRouteController(); + // configure supervising route controller + SupervisingRouteController src = context.getRouteController().supervising(); src.setBackOffDelay(25); src.setBackOffMaxAttempts(3); src.setInitialDelay(100); src.setThreadPoolSize(2); - context.setRouteController(src); context.start(); @@ -89,7 +87,7 @@ public class DefaultSupervisingRouteControllerTest extends ContextTestSupport { context.addRoutes(new MyRoute()); // configure supervising - SupervisingRouteController src = context.adapt(ExtendedCamelContext.class).getSupervisingRouteController(); + SupervisingRouteController src = context.getRouteController().supervising(); src.setBackOffDelay(25); src.setBackOffMaxAttempts(10); src.setInitialDelay(100); diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java index 9ef846f..bfa5855 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java @@ -180,8 +180,7 @@ public final class DefaultConfigurationConfigurer { // supervising route controller if (config.isRouteControllerSuperviseEnabled()) { - SupervisingRouteController src = camelContext.adapt(ExtendedCamelContext.class).getSupervisingRouteController(); - src.setCamelContext(camelContext); + SupervisingRouteController src = camelContext.getRouteController().supervising(); if (config.getRouteControllerIncludeRoutes() != null) { src.setIncludeRoutes(config.getRouteControllerIncludeRoutes()); } @@ -209,8 +208,6 @@ public final class DefaultConfigurationConfigurer { if (config.getRouteControllerBackOffMultiplier() > 0) { src.setBackOffMultiplier(config.getRouteControllerBackOffMultiplier()); } - // use this as route controller - camelContext.setRouteController(src); } } diff --git a/docs/user-manual/modules/ROOT/pages/route-controller.adoc b/docs/user-manual/modules/ROOT/pages/route-controller.adoc index 5c68e0f..34c0c92 100644 --- a/docs/user-manual/modules/ROOT/pages/route-controller.adoc +++ b/docs/user-manual/modules/ROOT/pages/route-controller.adoc @@ -74,7 +74,11 @@ recover starting the salesforce route. [source,java] ----- CamelContext camel = ... -camel.setRouteController(DefaultSupervisingRouteController()); +SupervisingRouteController src = camel.getRouteController().supervise(); +src.setBackOffDelay(5000); +src.setBackOffMaxAttempts(3); +src.setInitialDelay(1000); +src.setThreadPoolSize(2); ----- If you use Camel with Spring Boot or Camel Main you can also enable supervising @@ -82,13 +86,13 @@ from `application.properties`: [source,properties] ---- -camel.main.route-controller-enabled = true +camel.main.routeControllerSuperviseEnabled = true # and you can configure more options -camel.main.route-controller-back-off-delay = 250 -camel.main.route-controller-back-off-max-attempts = 3 -camel.main.route-controller-initial-delay = 1000 -camel.main.route-controller-thread-pool-size = 2 +camel.main.routeControllerBackoffDelay = 5000 +camel.main.routeControllerBackoffMaxAttempts = 3 +camel.main.routeControllerInitialDelay = 1000 +camel.main.routeControllerThreadPoolSize = 2 ---- And in Spring Boot: @@ -98,10 +102,10 @@ And in Spring Boot: camel.springboot.route-controller-enabled = true # and you can configure more options -camel.springboot.route-controller-back-off-delay = 250 -camel.springboot.route-controller-back-off-max-attempts = 3 -camel.springboot.route-controller-initial-delay = 1000 -camel.springboot.route-controller-thread-pool-size = 2 +camel.springboot.routeControllerBackoffDelay = 5000 +camel.springboot.routeControllerBackoffMaxAttempts = 3 +camel.springboot.routeControllerInitialDelay = 1000 +camel.springboot.routeControllerThreadPoolSize = 2 ---- === Supervising Options @@ -155,9 +159,13 @@ by excluding by pattern `aws*` (uri or route id) [source,java] ----- -camel.springboot.route-controller-exclude-routes = aws* +camel.springboot.routeControllerExcludeRoutes = aws* ----- +== JMX management + +The route controllers are manageable in JMX, where you can find their MBean under the `routecontrollers` node. + == See Also When Camel is shutting down, then its xref:graceful-shutdown.adoc[Graceful Shutdown]