You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/05/15 09:03:46 UTC
[camel] 01/11: CAMEL-13501: Component should move initialization
logic to doInit instead of doStart
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 <cl...@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();
}