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 2022/08/17 11:33:22 UTC
[camel] branch main updated: feat: add a global route builder interceptors
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new ff375a00060 feat: add a global route builder interceptors
ff375a00060 is described below
commit ff375a00060148926c321adb342ee4bd44f82e93
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Wed Aug 17 11:01:32 2022 +0200
feat: add a global route builder interceptors
---
.../org/apache/camel/builder/RouteBuilder.java | 9 ++-
.../builder/RouteBuilderLifecycleStrategy.java | 16 ++++-
.../org/apache/camel/builder/RouteBuilderTest.java | 69 ++++++++++++++++++++++
3 files changed, 91 insertions(+), 3 deletions(-)
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
index 622b581e835..359bad8d584 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
@@ -18,6 +18,7 @@ package org.apache.camel.builder;
import java.io.Reader;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Optional;
@@ -665,7 +666,11 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
camelContext.adapt(ExtendedCamelContext.class).getErrorHandlerFactory());
}
- for (RouteBuilderLifecycleStrategy interceptor : lifecycleInterceptors) {
+ List<RouteBuilderLifecycleStrategy> strategies = new ArrayList<>(lifecycleInterceptors);
+ strategies.addAll(camelContext.getRegistry().findByType(RouteBuilderLifecycleStrategy.class));
+ strategies.sort(Comparator.comparing(Ordered::getOrder));
+
+ for (RouteBuilderLifecycleStrategy interceptor : strategies) {
interceptor.beforeConfigure(this);
}
@@ -679,7 +684,7 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
getRouteCollection().prepareRoute(route);
}
- for (RouteBuilderLifecycleStrategy interceptor : lifecycleInterceptors) {
+ for (RouteBuilderLifecycleStrategy interceptor : strategies) {
interceptor.afterConfigure(this);
}
}
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilderLifecycleStrategy.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilderLifecycleStrategy.java
index dc6b8d4f594..61af4c72ab3 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilderLifecycleStrategy.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilderLifecycleStrategy.java
@@ -16,10 +16,12 @@
*/
package org.apache.camel.builder;
+import org.apache.camel.Ordered;
+
/**
* Strategy for {@link RouteBuilder} lifecycle notifications.
*/
-public interface RouteBuilderLifecycleStrategy {
+public interface RouteBuilderLifecycleStrategy extends Ordered {
/**
* This method is invoked before the {@link RouteBuilder#configure()} method is invoked.
*/
@@ -31,4 +33,16 @@ public interface RouteBuilderLifecycleStrategy {
*/
default void afterConfigure(RouteBuilder builder) {
}
+
+ /**
+ * Gets the order.
+ * <p/>
+ * Default to {@link Ordered#LOWEST}.
+ *
+ * @return the order
+ */
+ @Override
+ default int getOrder() {
+ return Ordered.LOWEST;
+ }
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
index f5f6228e26e..183b91959f8 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.builder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.camel.CamelContext;
@@ -26,6 +27,7 @@ import org.apache.camel.Channel;
import org.apache.camel.DelegateProcessor;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.Ordered;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.Route;
@@ -579,4 +581,71 @@ public class RouteBuilderTest extends TestSupport {
assertEquals(1, before.get());
assertEquals(1, after.get());
}
+
+ @Test
+ public void testLifecycleInterceptorFromContext() throws Exception {
+ List<String> ordered = new ArrayList<>();
+
+ RouteBuilder builder = new RouteBuilder() {
+ public void configure() throws Exception {
+ }
+ };
+
+ builder.addLifecycleInterceptor(new RouteBuilderLifecycleStrategy() {
+ @Override
+ public void beforeConfigure(RouteBuilder builder) {
+ ordered.add("before-1");
+ }
+
+ @Override
+ public void afterConfigure(RouteBuilder builder) {
+ ordered.add("after-1");
+ }
+
+ @Override
+ public int getOrder() {
+ return Ordered.LOWEST - 2000;
+ }
+ });
+
+ builder.addLifecycleInterceptor(new RouteBuilderLifecycleStrategy() {
+ @Override
+ public void beforeConfigure(RouteBuilder builder) {
+ ordered.add("before-2");
+ }
+
+ @Override
+ public void afterConfigure(RouteBuilder builder) {
+ ordered.add("after-2");
+ }
+
+ @Override
+ public int getOrder() {
+ return Ordered.LOWEST;
+ }
+ });
+
+ try (DefaultCamelContext context = new DefaultCamelContext()) {
+ context.getRegistry().bind(UUID.randomUUID().toString(), new RouteBuilderLifecycleStrategy() {
+ @Override
+ public void beforeConfigure(RouteBuilder builder) {
+ ordered.add("before-3");
+ }
+
+ @Override
+ public void afterConfigure(RouteBuilder builder) {
+ ordered.add("after-3");
+ }
+
+ @Override
+ public int getOrder() {
+ return Ordered.HIGHEST;
+ }
+ });
+
+ context.addRoutes(builder);
+
+ assertEquals(ordered, List.of("before-3", "before-1", "before-2", "after-3", "after-1", "after-2"));
+ }
+ }
}