You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2020/08/20 16:00:35 UTC
[camel] 01/03: lifecycle: split inititialization event in
initializing and initialized
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 5c131659db31534ca7cdde230abc32bafd26cbc2
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Thu Aug 20 00:15:16 2020 +0200
lifecycle: split inititialization event in initializing and initialized
---
.../org/apache/camel/spi/LifecycleStrategy.java | 11 +++++++++
.../camel/spi/OnCamelContextInitialized.java | 2 +-
...alized.java => OnCamelContextInitializing.java} | 4 ++--
.../camel/impl/engine/AbstractCamelContext.java | 17 +++++++++++++-
.../engine/OnCamelContextLifecycleStrategy.java | 13 +++++++++++
.../camel/impl/LifecycleStrategyDiscoveryTest.java | 27 ++++++++++++++++------
.../org/apache/camel/main/ContextEventsTest.java | 14 ++++++++---
.../camel/support/LifecycleStrategySupport.java | 14 +++++++++++
8 files changed, 88 insertions(+), 14 deletions(-)
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/LifecycleStrategy.java b/core/camel-api/src/main/java/org/apache/camel/spi/LifecycleStrategy.java
index 560a1e9..a3e3c0f 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/LifecycleStrategy.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/LifecycleStrategy.java
@@ -41,6 +41,17 @@ public interface LifecycleStrategy {
* exceptions will be logged at <tt>WARN</tt> level by Camel will continue
* starting itself.
*/
+ default void onContextInitializing(CamelContext context) throws VetoCamelContextStartException {
+ }
+
+ /**
+ * Notification on initialized a {@link CamelContext}.
+ *
+ * @param context the camel context
+ * @throws VetoCamelContextStartException can be thrown to veto starting {@link CamelContext}. Any other runtime
+ * exceptions will be logged at <tt>WARN</tt> level by Camel will continue
+ * starting itself.
+ */
default void onContextInitialized(CamelContext context) throws VetoCamelContextStartException {
}
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/OnCamelContextInitialized.java b/core/camel-api/src/main/java/org/apache/camel/spi/OnCamelContextInitialized.java
index 1588a89..737bdc0 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/OnCamelContextInitialized.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/OnCamelContextInitialized.java
@@ -19,7 +19,7 @@ package org.apache.camel.spi;
import org.apache.camel.CamelContext;
/**
- * Notification on initializing a {@link CamelContext}.
+ * Notification on initialized a {@link CamelContext}.
*/
@FunctionalInterface
public interface OnCamelContextInitialized extends OnCamelContextEvent {
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/OnCamelContextInitialized.java b/core/camel-api/src/main/java/org/apache/camel/spi/OnCamelContextInitializing.java
similarity index 88%
copy from core/camel-api/src/main/java/org/apache/camel/spi/OnCamelContextInitialized.java
copy to core/camel-api/src/main/java/org/apache/camel/spi/OnCamelContextInitializing.java
index 1588a89..db323cc 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/OnCamelContextInitialized.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/OnCamelContextInitializing.java
@@ -22,6 +22,6 @@ import org.apache.camel.CamelContext;
* Notification on initializing a {@link CamelContext}.
*/
@FunctionalInterface
-public interface OnCamelContextInitialized extends OnCamelContextEvent {
- void onContextInitialized(CamelContext context);
+public interface OnCamelContextInitializing extends OnCamelContextEvent {
+ void onContextInitializing(CamelContext context);
}
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 e350d33..364fe95 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
@@ -2559,7 +2559,7 @@ public abstract class AbstractCamelContext extends BaseService
ServiceHelper.initService(lifecycleStrategies);
for (LifecycleStrategy strategy : lifecycleStrategies) {
try {
- strategy.onContextInitialized(this);
+ strategy.onContextInitializing(this);
} catch (VetoCamelContextStartException e) {
// okay we should not start Camel since it was vetoed
LOG.warn("Lifecycle strategy " + strategy + " vetoed initializing CamelContext ({}) due to: {}", getName(),
@@ -2640,6 +2640,21 @@ public abstract class AbstractCamelContext extends BaseService
// start the route definitions before the routes is started
startRouteDefinitions();
+ for (LifecycleStrategy strategy : lifecycleStrategies) {
+ try {
+ strategy.onContextInitialized(this);
+ } catch (VetoCamelContextStartException e) {
+ // okay we should not start Camel since it was vetoed
+ LOG.warn("Lifecycle strategy " + strategy + " vetoed initializing CamelContext ({}) due to: {}", getName(),
+ e.getMessage());
+ throw e;
+ } catch (Exception e) {
+ LOG.warn("Lifecycle strategy " + strategy + " failed initializing CamelContext ({}) due to: {}", getName(),
+ e.getMessage());
+ throw e;
+ }
+ }
+
EventHelper.notifyCamelContextInitialized(this);
}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/OnCamelContextLifecycleStrategy.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/OnCamelContextLifecycleStrategy.java
index 95e77b3..9449aac 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/OnCamelContextLifecycleStrategy.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/OnCamelContextLifecycleStrategy.java
@@ -21,6 +21,7 @@ import org.apache.camel.RoutesBuilder;
import org.apache.camel.VetoCamelContextStartException;
import org.apache.camel.spi.LifecycleStrategy;
import org.apache.camel.spi.OnCamelContextInitialized;
+import org.apache.camel.spi.OnCamelContextInitializing;
import org.apache.camel.spi.OnCamelContextStart;
import org.apache.camel.spi.OnCamelContextStop;
import org.apache.camel.support.LifecycleStrategySupport;
@@ -32,6 +33,18 @@ import org.apache.camel.support.LifecycleStrategySupport;
class OnCamelContextLifecycleStrategy extends LifecycleStrategySupport {
@Override
+ public void onContextInitializing(CamelContext context) throws VetoCamelContextStartException {
+ for (OnCamelContextInitializing handler : context.getRegistry().findByType(OnCamelContextInitializing.class)) {
+ // RoutesBuilder should register them-self to the camel context
+ // to avoid invoking them multiple times if routes are discovered
+ // from the registry (i.e. camel-main)
+ if (!(handler instanceof RoutesBuilder)) {
+ handler.onContextInitializing(context);
+ }
+ }
+ }
+
+ @Override
public void onContextInitialized(CamelContext context) throws VetoCamelContextStartException {
for (OnCamelContextInitialized handler : context.getRegistry().findByType(OnCamelContextInitialized.class)) {
// RoutesBuilder should register them-self to the camel context
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/LifecycleStrategyDiscoveryTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/LifecycleStrategyDiscoveryTest.java
index 00ca357..7347808 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/LifecycleStrategyDiscoveryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/LifecycleStrategyDiscoveryTest.java
@@ -22,37 +22,48 @@ import org.apache.camel.CamelContext;
import org.apache.camel.TestSupport;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.spi.OnCamelContextInitialized;
+import org.apache.camel.spi.OnCamelContextInitializing;
import org.apache.camel.spi.OnCamelContextStart;
import org.apache.camel.spi.OnCamelContextStop;
import org.junit.jupiter.api.Test;
import static org.apache.camel.support.LifecycleStrategySupport.onCamelContextInitialized;
+import static org.apache.camel.support.LifecycleStrategySupport.onCamelContextInitializing;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class LifecycleStrategyDiscoveryTest extends TestSupport {
@Test
public void testLifecycleStrategyDiscovery() throws Exception {
- final AtomicInteger onInit = new AtomicInteger();
+ final AtomicInteger onInitializing = new AtomicInteger();
+ final AtomicInteger onInitialized = new AtomicInteger();
final AtomicInteger onStart = new AtomicInteger();
final AtomicInteger onStop = new AtomicInteger();
- final AtomicInteger onInitRoute = new AtomicInteger();
+ final AtomicInteger onInitializingRoute = new AtomicInteger();
+ final AtomicInteger onInitializedRoute = new AtomicInteger();
final AtomicInteger onStartRoute = new AtomicInteger();
final AtomicInteger onStopRoute = new AtomicInteger();
CamelContext context = new DefaultCamelContext();
- context.getRegistry().bind("myOnInit", onCamelContextInitialized(c -> onInit.incrementAndGet()));
+ context.getRegistry().bind("myOnInitializing", onCamelContextInitializing(c -> onInitializing.incrementAndGet()));
+ context.getRegistry().bind("myOnInitialized", onCamelContextInitialized(c -> onInitialized.incrementAndGet()));
context.getRegistry().bind("myOnStart", onCamelContextInitialized(c -> onStart.incrementAndGet()));
context.getRegistry().bind("myOnStop", onCamelContextInitialized(c -> onStop.incrementAndGet()));
try {
- class MyBuilder extends RouteBuilder implements OnCamelContextInitialized, OnCamelContextStart, OnCamelContextStop {
+ class MyBuilder extends RouteBuilder
+ implements OnCamelContextInitializing, OnCamelContextInitialized, OnCamelContextStart, OnCamelContextStop {
@Override
public void configure() throws Exception {
}
@Override
+ public void onContextInitializing(CamelContext context) {
+ onInitializingRoute.incrementAndGet();
+ }
+
+ @Override
public void onContextInitialized(CamelContext context) {
- onInitRoute.incrementAndGet();
+ onInitializedRoute.incrementAndGet();
}
@Override
@@ -72,10 +83,12 @@ public class LifecycleStrategyDiscoveryTest extends TestSupport {
context.stop();
}
- assertEquals(1, onInit.get());
+ assertEquals(1, onInitializing.get());
+ assertEquals(1, onInitialized.get());
assertEquals(1, onStart.get());
assertEquals(1, onStop.get());
- assertEquals(1, onInitRoute.get());
+ assertEquals(1, onInitializingRoute.get());
+ assertEquals(1, onInitializedRoute.get());
assertEquals(1, onStartRoute.get());
assertEquals(1, onStopRoute.get());
}
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/ContextEventsTest.java b/core/camel-main/src/test/java/org/apache/camel/main/ContextEventsTest.java
index 8083a65..314feb5 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/ContextEventsTest.java
+++ b/core/camel-main/src/test/java/org/apache/camel/main/ContextEventsTest.java
@@ -20,6 +20,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.camel.BindToRegistry;
import org.apache.camel.spi.OnCamelContextInitialized;
+import org.apache.camel.spi.OnCamelContextInitializing;
import org.apache.camel.spi.OnCamelContextStart;
import org.apache.camel.spi.OnCamelContextStop;
import org.junit.jupiter.api.Test;
@@ -36,19 +37,26 @@ public class ContextEventsTest {
main.configure().addConfiguration(config);
main.run();
- assertEquals(1, config.onInit.get());
+ assertEquals(1, config.onInitializing.get());
+ assertEquals(1, config.onInitialized.get());
assertEquals(1, config.onStart.get());
assertEquals(1, config.onStop.get());
}
public static class MyConfig {
- final AtomicInteger onInit = new AtomicInteger();
+ final AtomicInteger onInitializing = new AtomicInteger();
+ final AtomicInteger onInitialized = new AtomicInteger();
final AtomicInteger onStart = new AtomicInteger();
final AtomicInteger onStop = new AtomicInteger();
@BindToRegistry
+ public OnCamelContextInitializing onContextInitializing() {
+ return context -> onInitializing.incrementAndGet();
+ }
+
+ @BindToRegistry
public OnCamelContextInitialized onContextInitialized() {
- return context -> onInit.incrementAndGet();
+ return context -> onInitialized.incrementAndGet();
}
@BindToRegistry
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/LifecycleStrategySupport.java b/core/camel-support/src/main/java/org/apache/camel/support/LifecycleStrategySupport.java
index b5013f4..37627bd 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/LifecycleStrategySupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/LifecycleStrategySupport.java
@@ -31,6 +31,7 @@ import org.apache.camel.VetoCamelContextStartException;
import org.apache.camel.spi.LifecycleStrategy;
import org.apache.camel.spi.OnCamelContextEvent;
import org.apache.camel.spi.OnCamelContextInitialized;
+import org.apache.camel.spi.OnCamelContextInitializing;
import org.apache.camel.spi.OnCamelContextStart;
import org.apache.camel.spi.OnCamelContextStop;
@@ -141,6 +142,15 @@ public abstract class LifecycleStrategySupport implements LifecycleStrategy {
};
}
+ public static LifecycleStrategy adapt(OnCamelContextInitializing handler) {
+ return new LifecycleStrategySupport() {
+ @Override
+ public void onContextInitializing(CamelContext context) throws VetoCamelContextStartException {
+ handler.onContextInitializing(context);
+ }
+ };
+ }
+
public static LifecycleStrategy adapt(OnCamelContextInitialized handler) {
return new LifecycleStrategySupport() {
@Override
@@ -168,6 +178,10 @@ public abstract class LifecycleStrategySupport implements LifecycleStrategy {
};
}
+ public static OnCamelContextInitializing onCamelContextInitializing(Consumer<CamelContext> consumer) {
+ return consumer::accept;
+ }
+
public static OnCamelContextInitialized onCamelContextInitialized(Consumer<CamelContext> consumer) {
return consumer::accept;
}