This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch 13514 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 2f5df13a08b5429ca6d4fadcd01b228c4b9d98ed Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue May 14 09:39:35 2019 +0200 CAMEL-13501: Component should move initialization logic to doInit instead of doStart --- .../apache/camel/support/service/ServiceSupport.java | 16 +++++++++++++--- .../camel/impl/engine/AbstractCamelContext.java | 7 +++++-- .../apache/camel/processor/UnitOfWorkProducer.java | 8 ++++++-- .../camel/processor/interceptor/DefaultDebugger.java | 5 ----- .../apache/camel/language/simple/SimpleLanguage.java | 8 ++++++-- .../org/apache/camel/support/ChildServiceSupport.java | 17 +++++++++++++++-- .../apache/camel/support/ScheduledPollConsumer.java | 19 +++++++++++++------ .../camel/support/SynchronousDelegateProducer.java | 4 ++++ 8 files changed, 62 insertions(+), 22 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/support/service/ServiceSupport.java b/core/camel-api/src/main/java/org/apache/camel/support/service/ServiceSupport.java index e257ac0..5d8d40f 100644 --- a/core/camel-api/src/main/java/org/apache/camel/support/service/ServiceSupport.java +++ b/core/camel-api/src/main/java/org/apache/camel/support/service/ServiceSupport.java @@ -56,7 +56,11 @@ public abstract class ServiceSupport implements StatefulService { synchronized (lock) { if (status == NEW) { log.trace("Initializing service: {}", this); - doInit(); + try { + doInit(); + } catch (Exception e) { + throw new RuntimeException("Error initializing service", e); + } status = INITIALIZED; } } @@ -79,7 +83,13 @@ public abstract class ServiceSupport implements StatefulService { log.trace("Service: {} already starting", this); return; } - init(); + try { + init(); + } catch (Exception e) { + status = FAILED; + log.trace("Error while initializing service: " + this, e); + throw e; + } try { status = STARTING; log.trace("Starting service: {}", this); @@ -304,7 +314,7 @@ public abstract class ServiceSupport implements StatefulService { * Initialize the service. * This method will only be called once before starting. */ - protected void doInit() { + protected void doInit() throws Exception { } /** 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 29b6ff8..567ab6a 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 @@ -43,7 +43,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.function.Supplier; -import org.apache.camel.AsyncProcessor; import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; import org.apache.camel.Component; @@ -307,7 +306,11 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Cam this.startupListeners.add(deferStartupListener); if (init) { - init(); + try { + init(); + } catch (Exception e) { + throw new RuntimeException("Error initializing CamelContext", e); + } } } diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java b/core/camel-base/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java index c3181f7..c406a40 100644 --- a/core/camel-base/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java +++ b/core/camel-base/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java @@ -55,11 +55,15 @@ public final class UnitOfWorkProducer extends DefaultAsyncProducer { return processor.process(exchange, callback); } - public void start() throws Exception { + @Override + protected void doStart() throws Exception { + super.doStart(); ServiceHelper.startService(processor); } - public void stop() throws Exception { + @Override + protected void doStop() throws Exception { + super.doStop(); ServiceHelper.stopService(processor); } diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultDebugger.java b/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultDebugger.java index 0007433..538ebbf 100644 --- a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultDebugger.java +++ b/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultDebugger.java @@ -330,11 +330,6 @@ public class DefaultDebugger extends ServiceSupport implements Debugger, CamelCo } @Override - public void start() throws Exception { - super.start(); - } - - @Override protected void doStart() throws Exception { ObjectHelper.notNull(camelContext, "CamelContext", this); diff --git a/core/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java b/core/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java index 947efb1..2809e31 100644 --- a/core/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java +++ b/core/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java @@ -118,8 +118,7 @@ public class SimpleLanguage extends LanguageSupport implements StaticService { } @Override - @SuppressWarnings("unchecked") - public void start() throws Exception { + public void init() { // setup cache which requires CamelContext to be set first if (cacheExpression == null && cachePredicate == null && getCamelContext() != null) { int maxSize = CamelContextHelper.getMaximumSimpleCacheSize(getCamelContext()); @@ -134,6 +133,11 @@ public class SimpleLanguage extends LanguageSupport implements StaticService { } @Override + public void start() throws Exception { + // noop + } + + @Override public void stop() throws Exception { if (cachePredicate instanceof LRUCache) { if (LOG.isDebugEnabled()) { diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ChildServiceSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/ChildServiceSupport.java index 0f3a3db..fdbc8eb 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/ChildServiceSupport.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/ChildServiceSupport.java @@ -40,9 +40,16 @@ public abstract class ChildServiceSupport extends ServiceSupport { log.trace("Service: {} already starting", this); return; } - status = STARTING; - log.trace("Starting service: {}", this); try { + initService(childServices); + } catch (Exception e) { + status = FAILED; + log.trace("Error while initializing service: " + this, e); + throw e; + } + try { + status = STARTING; + log.trace("Starting service: {}", this); ServiceHelper.startService(childServices); doStart(); status = STARTED; @@ -125,4 +132,10 @@ public abstract class ChildServiceSupport extends ServiceSupport { return childServices != null && childServices.remove(childService); } + private void initService(List<Service> services) { + if (services != null) { + services.forEach(Service::init); + } + } + } diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ScheduledPollConsumer.java b/core/camel-support/src/main/java/org/apache/camel/support/ScheduledPollConsumer.java index e90aff3..2bc5e2f 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/ScheduledPollConsumer.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/ScheduledPollConsumer.java @@ -399,8 +399,8 @@ public abstract class ScheduledPollConsumer extends DefaultConsumer implements R protected abstract int poll() throws Exception; @Override - protected void doStart() throws Exception { - super.doStart(); + protected void doInit() throws Exception { + super.doInit(); // validate that if backoff multiplier is in use, the threshold values is set correctly if (backoffMultiplier > 0) { @@ -415,7 +415,6 @@ public abstract class ScheduledPollConsumer extends DefaultConsumer implements R } scheduler.setCamelContext(getEndpoint().getCamelContext()); scheduler.onInit(this); - scheduler.scheduleTask(this); // configure scheduler with options from this consumer Map<String, Object> properties = new HashMap<>(); @@ -435,11 +434,19 @@ public abstract class ScheduledPollConsumer extends DefaultConsumer implements R ObjectHelper.notNull(scheduler, "scheduler", this); ObjectHelper.notNull(pollStrategy, "pollStrategy", this); + } - ServiceHelper.startService(scheduler); + @Override + protected void doStart() throws Exception { + super.doStart(); + + if (scheduler != null) { + scheduler.scheduleTask(this); + ServiceHelper.startService(scheduler); - if (isStartScheduler()) { - startScheduler(); + if (isStartScheduler()) { + startScheduler(); + } } } diff --git a/core/camel-support/src/main/java/org/apache/camel/support/SynchronousDelegateProducer.java b/core/camel-support/src/main/java/org/apache/camel/support/SynchronousDelegateProducer.java index 2f99647..6531945 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/SynchronousDelegateProducer.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/SynchronousDelegateProducer.java @@ -46,6 +46,10 @@ public class SynchronousDelegateProducer implements Producer { producer.process(exchange); } + public void init() { + producer.init(); + } + public void start() throws Exception { producer.start(); }