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]

Reply via email to