You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2022/01/12 16:38:04 UTC
[camel-quarkus] 09/10: Register CDI event bridges only when required
This is an automated email from the ASF dual-hosted git repository.
ppalaga pushed a commit to branch 2.2.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 7ea0f3b4df993b26717352625e759168f6f11676
Author: James Netherton <ja...@gmail.com>
AuthorDate: Mon Oct 4 10:36:14 2021 +0100
Register CDI event bridges only when required
Fixes #3149
---
.../ROOT/pages/reference/extensions/core.adoc | 8 ++
.../core/deployment/CamelContextProcessor.java | 55 ++++++++++
.../core/deployment/main/CamelMainProcessor.java | 30 ++++++
.../CamelMainEventBridgeDisabledConfigTest.java} | 97 ++++++++---------
.../main/CamelMainEventBridgeDisabledTest.java | 59 +++++++++++
.../CamelEventBridgeDisabledConfigTest.java | 116 +++++++++++++++++++++
.../core/runtime/CamelEventBridgeDisabledTest.java | 36 +++----
...bserversTest.java => CamelEventBridgeTest.java} | 24 +++--
...est.java => CamelLifecycleEventBridgeTest.java} | 22 ++--
...st.java => CamelManagementEventBridgeTest.java} | 66 +++++-------
.../org/apache/camel/quarkus/core/CamelConfig.java | 23 ++++
.../camel/quarkus/core/CamelContextRecorder.java | 14 ++-
.../quarkus/core/CamelLifecycleEventBridge.java | 43 +++++---
.../quarkus/core/CamelManagementEventBridge.java | 9 +-
.../camel/quarkus/main/CamelMainEventBridge.java | 33 ++++--
.../camel/quarkus/main/CamelMainRecorder.java | 6 +-
.../MicrometerMetricsConfigDefaultsTest.java | 2 +-
.../MicrometerMetricsConfigOverrideTest.java | 9 --
.../deployment/MicrometerMetricsDisabledTest.java | 8 --
.../MicroProfileMetricsConfigDefaultsTest.java | 2 +-
.../MicroProfileMetricsConfigOverrideTest.java | 9 --
21 files changed, 487 insertions(+), 184 deletions(-)
diff --git a/docs/modules/ROOT/pages/reference/extensions/core.adoc b/docs/modules/ROOT/pages/reference/extensions/core.adoc
index 5c575df..3a0c5aa 100644
--- a/docs/modules/ROOT/pages/reference/extensions/core.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/core.adoc
@@ -239,6 +239,14 @@ What to do if it is not possible to extract CSimple expressions from a route def
| `org.apache.camel.quarkus.core.CamelConfig.FailureRemedy`
| `warn`
+|icon:lock[title=Fixed at build time] [[quarkus.camel.event-bridge.enabled]]`link:#quarkus.camel.event-bridge.enabled[quarkus.camel.event-bridge.enabled]`
+
+Whether to enable the bridging of Camel events to CDI events.
+ This allows CDI observers to be configured for Camel events. E.g. those belonging to the `org.apache.camel.quarkus.core.events`, `org.apache.camel.quarkus.main.events` & `org.apache.camel.impl.event` packages.
+ Note that this configuration item only has any effect when observers configured for Camel events are present in the application.
+| `boolean`
+| `true`
+
|icon:lock[title=Fixed at build time] [[quarkus.camel.main.enabled]]`link:#quarkus.camel.main.enabled[quarkus.camel.main.enabled]`
If `true` all `camel-main` features are enabled; otherwise no `camel-main` features are enabled. See described the xref:user-guide/configuration.adoc[Configuration] section of Camel Quarkus documentation for more details.
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
index e5b3add..73aa229 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
@@ -16,9 +16,14 @@
*/
package org.apache.camel.quarkus.core.deployment;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
+import java.util.function.BooleanSupplier;
+import java.util.stream.Collectors;
import io.quarkus.arc.deployment.BeanContainerBuildItem;
+import io.quarkus.arc.deployment.BeanDiscoveryFinishedBuildItem;
import io.quarkus.arc.deployment.SyntheticBeansRuntimeInitBuildItem;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.Consume;
@@ -163,4 +168,54 @@ public class CamelContextProcessor {
recorder.createRuntime(beanContainer.getValue(), context.getCamelContext()),
config.bootstrap.enabled);
}
+
+ /**
+ * Registers Camel CDI event bridges if quarkus.camel.event-bridge.enabled=true and if
+ * the relevant events have CDI observers configured for them.
+ *
+ * @param beanDiscovery build item containing the results of bean discovery
+ * @param context build item containing the CamelContext instance
+ * @param recorder the CamelContext recorder instance
+ */
+ @Record(ExecutionTime.STATIC_INIT)
+ @BuildStep(onlyIf = EventBridgeEnabled.class)
+ public void registerCamelEventBridges(
+ BeanDiscoveryFinishedBuildItem beanDiscovery,
+ CamelContextBuildItem context,
+ CamelContextRecorder recorder) {
+
+ Set<String> observedLifecycleEvents = beanDiscovery.getObservers()
+ .stream()
+ .map(observerInfo -> observerInfo.getObservedType().name().toString())
+ .filter(observedType -> observedType.startsWith("org.apache.camel.quarkus.core.events"))
+ .collect(Collectors.collectingAndThen(Collectors.toUnmodifiableSet(), HashSet::new));
+
+ // For management events the event class simple name is collected as users can
+ // observe events on either the Camel event interface or the concrete event class, and
+ // these are located in different packages
+ Set<String> observedManagementEvents = beanDiscovery.getObservers()
+ .stream()
+ .map(observerInfo -> observerInfo.getObservedType().name().toString())
+ .filter(className -> className.matches("org.apache.camel(?!.quarkus).*Event$"))
+ .map(className -> CamelSupport.loadClass(className, Thread.currentThread().getContextClassLoader()))
+ .map(observedEventClass -> observedEventClass.getSimpleName())
+ .collect(Collectors.collectingAndThen(Collectors.toUnmodifiableSet(), HashSet::new));
+
+ if (!observedLifecycleEvents.isEmpty()) {
+ recorder.registerLifecycleEventBridge(context.getCamelContext(), observedLifecycleEvents);
+ }
+
+ if (!observedManagementEvents.isEmpty()) {
+ recorder.registerManagementEventBridge(context.getCamelContext(), observedManagementEvents);
+ }
+ }
+
+ public static final class EventBridgeEnabled implements BooleanSupplier {
+ CamelConfig config;
+
+ @Override
+ public boolean getAsBoolean() {
+ return config.eventBridge.enabled;
+ }
+ }
}
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java
index 5acba9e..07dae03 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/main/CamelMainProcessor.java
@@ -16,11 +16,14 @@
*/
package org.apache.camel.quarkus.core.deployment.main;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.stream.Collectors;
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.arc.deployment.BeanContainerBuildItem;
+import io.quarkus.arc.deployment.BeanDiscoveryFinishedBuildItem;
import io.quarkus.arc.deployment.SyntheticBeansRuntimeInitBuildItem;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
@@ -36,6 +39,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.quarkus.core.CamelConfig;
import org.apache.camel.quarkus.core.CamelRecorder;
import org.apache.camel.quarkus.core.CamelRuntime;
+import org.apache.camel.quarkus.core.deployment.CamelContextProcessor.EventBridgeEnabled;
import org.apache.camel.quarkus.core.deployment.main.spi.CamelMainBuildItem;
import org.apache.camel.quarkus.core.deployment.main.spi.CamelMainEnabled;
import org.apache.camel.quarkus.core.deployment.main.spi.CamelMainListenerBuildItem;
@@ -191,6 +195,32 @@ public class CamelMainProcessor {
index.getIndex().getAnnotations(DotName.createSimple(QuarkusMain.class.getName())).isEmpty());
}
+ /**
+ * Registers Camel Main CDI event bridges if quarkus.camel.event-bridge.enabled=true and if
+ * the relevant events have CDI observers configured for them.
+ *
+ * @param beanDiscovery build item containing the results of bean discovery
+ * @param main build item containing the CamelMain instance
+ * @param recorder the CamelContext recorder instance
+ */
+ @Record(ExecutionTime.STATIC_INIT)
+ @BuildStep(onlyIf = { CamelMainEnabled.class, EventBridgeEnabled.class })
+ public void registerCamelMainEventBridge(
+ BeanDiscoveryFinishedBuildItem beanDiscovery,
+ CamelMainBuildItem main,
+ CamelMainRecorder recorder) {
+
+ Set<String> observedMainEvents = beanDiscovery.getObservers()
+ .stream()
+ .map(observerInfo -> observerInfo.getObservedType().name().toString())
+ .filter(observedType -> observedType.startsWith("org.apache.camel.quarkus.main.events"))
+ .collect(Collectors.collectingAndThen(Collectors.toUnmodifiableSet(), HashSet::new));
+
+ if (!observedMainEvents.isEmpty()) {
+ recorder.registerCamelMainEventBridge(main.getInstance(), observedMainEvents);
+ }
+ }
+
@BuildStep(onlyIf = CamelMainEnabled.class)
AdditionalIndexedClassesBuildItem indexCamelMainApplication() {
// Required for launching CamelMain based applications from the IDE
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainEventBridgeDisabledConfigTest.java
similarity index 50%
copy from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java
copy to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainEventBridgeDisabledConfigTest.java
index 12a301a..032396e 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainEventBridgeDisabledConfigTest.java
@@ -14,11 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.core.runtime;
+package org.apache.camel.quarkus.core.deployment.main;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Properties;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.concurrent.TimeUnit;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
@@ -26,82 +29,82 @@ import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.direct.DirectComponent;
-import org.apache.camel.impl.event.RouteStartedEvent;
-import org.apache.camel.quarkus.core.events.ComponentAddEvent;
-import org.apache.camel.quarkus.core.events.EndpointAddEvent;
-import org.apache.camel.quarkus.core.events.ServiceAddEvent;
+import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.quarkus.main.CamelMain;
+import org.apache.camel.quarkus.main.CamelMainEventBridge;
+import org.apache.camel.quarkus.main.events.AfterConfigure;
+import org.apache.camel.quarkus.main.events.AfterStart;
import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.Asset;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
-public class CamelObserversTest {
+public class CamelMainEventBridgeDisabledConfigTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
- .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
+ .addAsResource(applicationProperties(), "application.properties"));
+
+ @Inject
+ CamelMain main;
@Inject
EventHandler handler;
@Test
public void testObservers() {
- await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
- assertThat(handler.routes())
- .contains(MyRoutes.ROUTE_ID);
- assertThat(handler.components())
- .contains(DirectComponent.class.getName());
- assertThat(handler.endpoints())
- .contains(MyRoutes.FROM_ENDPOINT);
- assertThat(handler.service())
- .isNotEmpty();
- });
+ assertFalse(main.getMainListeners().stream().anyMatch(mainListener -> mainListener
+ .getClass()
+ .equals(CamelMainEventBridge.class)));
+ assertTrue(handler.builders().isEmpty());
+ assertTrue(handler.routes().isEmpty());
}
- @ApplicationScoped
- public static class EventHandler {
- private final Set<String> routes = new CopyOnWriteArraySet<>();
- private final Set<String> endpoints = new CopyOnWriteArraySet<>();
- private final Set<String> components = new CopyOnWriteArraySet<>();
- private final Set<String> service = new CopyOnWriteArraySet<>();
+ public static Asset applicationProperties() {
+ Writer writer = new StringWriter();
- public void onRouteStarted(@Observes RouteStartedEvent event) {
- routes.add(event.getRoute().getRouteId());
- }
+ Properties props = new Properties();
+ props.setProperty("quarkus.banner.enabled", "false");
+ props.setProperty("quarkus.camel.event-bridge.enabled", "false");
- public void onComponentAdd(@Observes ComponentAddEvent event) {
- components.add(event.getComponent().getClass().getName());
+ try {
+ props.store(writer, "");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
}
- public void onEndpointAdd(@Observes EndpointAddEvent event) {
- endpoints.add(event.getEndpoint().getEndpointUri());
- }
+ return new StringAsset(writer.toString());
+ }
- public void onServiceAdd(@Observes ServiceAddEvent event) {
- service.add(event.getService().getClass().getName());
- }
+ @ApplicationScoped
+ public static class EventHandler {
+ private final Set<String> builders = new CopyOnWriteArraySet<>();
+ private final Set<String> routes = new CopyOnWriteArraySet<>();
- public Set<String> routes() {
- return routes;
+ public void afterConfigure(@Observes AfterConfigure event) {
+ event.getMain().configure().getRoutesBuilders().forEach(
+ builder -> builders.add(builder.getClass().getName()));
}
- public Set<String> components() {
- return components;
+ public void afterStart(@Observes AfterStart event) {
+ event.getCamelContext(ModelCamelContext.class).getRoutes().forEach(
+ route -> routes.add(route.getRouteId()));
}
- public Set<String> endpoints() {
- return endpoints;
+ public Set<String> builders() {
+ return builders;
}
- public Set<String> service() {
- return service;
+ public Set<String> routes() {
+ return routes;
}
}
- @ApplicationScoped
public static class MyRoutes extends RouteBuilder {
public static String ROUTE_ID = "myRoute";
public static String FROM_ENDPOINT = "direct://start";
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainEventBridgeDisabledTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainEventBridgeDisabledTest.java
new file mode 100644
index 0000000..2d63674
--- /dev/null
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/deployment/main/CamelMainEventBridgeDisabledTest.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.core.deployment.main;
+
+import javax.inject.Inject;
+
+import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.quarkus.main.CamelMain;
+import org.apache.camel.quarkus.main.CamelMainEventBridge;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+public class CamelMainEventBridgeDisabledTest {
+ @RegisterExtension
+ static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
+
+ @Inject
+ CamelMain main;
+
+ @Test
+ public void camelMainEventBridgeNotConfigured() {
+ // Since no CDI observers for main events are configured the event bridge should not be present
+ assertFalse(main.getMainListeners().stream().anyMatch(mainListener -> mainListener
+ .getClass()
+ .equals(CamelMainEventBridge.class)));
+ }
+
+ public static class MyRoutes extends RouteBuilder {
+ public static String ROUTE_ID = "myRoute";
+ public static String FROM_ENDPOINT = "direct://start";
+
+ @Override
+ public void configure() throws Exception {
+ from(FROM_ENDPOINT)
+ .routeId(ROUTE_ID)
+ .log("${body}");
+ }
+ }
+}
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelEventBridgeDisabledConfigTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelEventBridgeDisabledConfigTest.java
new file mode 100644
index 0000000..2ca706b
--- /dev/null
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelEventBridgeDisabledConfigTest.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.core.runtime;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+
+import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.event.RouteAddedEvent;
+import org.apache.camel.quarkus.core.CamelLifecycleEventBridge;
+import org.apache.camel.quarkus.core.events.ServiceAddEvent;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.Asset;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import static org.apache.camel.spi.CamelEvent.*;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class CamelEventBridgeDisabledConfigTest {
+
+ @RegisterExtension
+ static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
+ .addAsResource(applicationProperties(), "application.properties"));
+
+ @Inject
+ CamelContext context;
+
+ @Inject
+ EventHandler handler;
+
+ @Test
+ public void camelManagementEventBridgeNotConfigured() {
+ assertFalse(context.getLifecycleStrategies()
+ .stream()
+ .anyMatch(lifecycleStrategy -> lifecycleStrategy.getClass().equals(CamelLifecycleEventBridge.class)));
+ assertTrue(context.getManagementStrategy().getEventNotifiers().isEmpty());
+ assertTrue(handler.getServices().isEmpty());
+ assertTrue(handler.getRoutesAdded().isEmpty());
+ assertTrue(handler.getRoutesRemoved().isEmpty());
+ }
+
+ public static Asset applicationProperties() {
+ Writer writer = new StringWriter();
+
+ Properties props = new Properties();
+ props.setProperty("quarkus.banner.enabled", "false");
+ props.setProperty("quarkus.camel.event-bridge.enabled", "false");
+
+ try {
+ props.store(writer, "");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ return new StringAsset(writer.toString());
+ }
+
+ @ApplicationScoped
+ static final class EventHandler {
+ private final Set<ServiceAddEvent> services = new CopyOnWriteArraySet<>();
+ private final Set<RouteAddedEvent> routesAdded = new CopyOnWriteArraySet<>();
+ private final Set<RouteRemovedEvent> routesRemoved = new CopyOnWriteArraySet<>();
+
+ public void onServiceAdd(@Observes ServiceAddEvent event) {
+ services.add(event);
+ }
+
+ public void onRouteAdd(@Observes RouteAddedEvent event) {
+ routesAdded.add(event);
+ }
+
+ public void onRouteRemoved(@Observes RouteRemovedEvent event) {
+ routesRemoved.add(event);
+ }
+
+ public Set<ServiceAddEvent> getServices() {
+ return services;
+ }
+
+ public Set<RouteAddedEvent> getRoutesAdded() {
+ return routesAdded;
+ }
+
+ public Set<RouteRemovedEvent> getRoutesRemoved() {
+ return routesRemoved;
+ }
+ }
+}
diff --git a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsDisabledTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelEventBridgeDisabledTest.java
similarity index 58%
copy from extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsDisabledTest.java
copy to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelEventBridgeDisabledTest.java
index 9583704..86b8138 100644
--- a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsDisabledTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelEventBridgeDisabledTest.java
@@ -14,23 +14,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.component.micrometer.deployment;
+package org.apache.camel.quarkus.core.runtime;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
-import java.util.List;
import java.util.Properties;
import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
import org.apache.camel.CamelContext;
-import org.apache.camel.impl.engine.DefaultMessageHistoryFactory;
-import org.apache.camel.quarkus.core.CamelManagementEventBridge;
-import org.apache.camel.spi.EventNotifier;
-import org.apache.camel.spi.MessageHistoryFactory;
-import org.apache.camel.spi.RoutePolicyFactory;
+import org.apache.camel.quarkus.core.CamelLifecycleEventBridge;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
@@ -38,11 +33,10 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public class MicrometerMetricsDisabledTest {
+public class CamelEventBridgeDisabledTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
@@ -53,25 +47,19 @@ public class MicrometerMetricsDisabledTest {
CamelContext context;
@Test
- public void testMicrometerMetricsDisabled() {
- List<RoutePolicyFactory> routePolicyFactories = context.getRoutePolicyFactories();
- assertTrue(routePolicyFactories.isEmpty());
-
- MessageHistoryFactory messageHistoryFactory = context.getMessageHistoryFactory();
- assertNotNull(messageHistoryFactory);
- assertTrue(messageHistoryFactory instanceof DefaultMessageHistoryFactory);
-
- // There should always be one event notifier added by core for CamelManagementEventBridge
- List<EventNotifier> eventNotifiers = context.getManagementStrategy().getEventNotifiers();
- assertEquals(1, eventNotifiers.size());
- assertTrue(eventNotifiers.get(0) instanceof CamelManagementEventBridge);
+ public void camelEventBridgeNotConfigured() {
+ // No CDI observers for camel events are configured so event bridging support should not be present
+ assertFalse(context.getLifecycleStrategies()
+ .stream()
+ .anyMatch(lifecycleStrategy -> lifecycleStrategy.getClass().equals(CamelLifecycleEventBridge.class)));
+ assertTrue(context.getManagementStrategy().getEventNotifiers().isEmpty());
}
- public static final Asset applicationProperties() {
+ public static Asset applicationProperties() {
Writer writer = new StringWriter();
Properties props = new Properties();
- props.setProperty("quarkus.micrometer.enabled", "false");
+ props.setProperty("quarkus.banner.enabled", "false");
try {
props.store(writer, "");
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelEventBridgeTest.java
similarity index 83%
copy from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java
copy to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelEventBridgeTest.java
index 12a301a..138f631 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelEventBridgeTest.java
@@ -31,6 +31,7 @@ import org.apache.camel.impl.event.RouteStartedEvent;
import org.apache.camel.quarkus.core.events.ComponentAddEvent;
import org.apache.camel.quarkus.core.events.EndpointAddEvent;
import org.apache.camel.quarkus.core.events.ServiceAddEvent;
+import org.apache.camel.spi.CamelEvent;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
@@ -39,7 +40,7 @@ import org.junit.jupiter.api.extension.RegisterExtension;
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;
-public class CamelObserversTest {
+public class CamelEventBridgeTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
@@ -50,7 +51,9 @@ public class CamelObserversTest {
@Test
public void testObservers() {
await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
- assertThat(handler.routes())
+ assertThat(handler.routesAdded())
+ .contains(MyRoutes.ROUTE_ID);
+ assertThat(handler.routesStarted())
.contains(MyRoutes.ROUTE_ID);
assertThat(handler.components())
.contains(DirectComponent.class.getName());
@@ -63,13 +66,18 @@ public class CamelObserversTest {
@ApplicationScoped
public static class EventHandler {
- private final Set<String> routes = new CopyOnWriteArraySet<>();
+ private final Set<String> routesAdded = new CopyOnWriteArraySet<>();
+ private final Set<String> routesStarted = new CopyOnWriteArraySet<>();
private final Set<String> endpoints = new CopyOnWriteArraySet<>();
private final Set<String> components = new CopyOnWriteArraySet<>();
private final Set<String> service = new CopyOnWriteArraySet<>();
+ public void onRouteAdded(@Observes CamelEvent.RouteAddedEvent event) {
+ routesAdded.add(event.getRoute().getRouteId());
+ }
+
public void onRouteStarted(@Observes RouteStartedEvent event) {
- routes.add(event.getRoute().getRouteId());
+ routesStarted.add(event.getRoute().getRouteId());
}
public void onComponentAdd(@Observes ComponentAddEvent event) {
@@ -84,8 +92,12 @@ public class CamelObserversTest {
service.add(event.getService().getClass().getName());
}
- public Set<String> routes() {
- return routes;
+ public Set<String> routesAdded() {
+ return routesAdded;
+ }
+
+ public Set<String> routesStarted() {
+ return routesStarted;
}
public Set<String> components() {
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelLifecycleEventBridgeTest.java
similarity index 88%
copy from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java
copy to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelLifecycleEventBridgeTest.java
index 12a301a..8479439 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelLifecycleEventBridgeTest.java
@@ -25,9 +25,9 @@ import javax.enterprise.event.Observes;
import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.direct.DirectComponent;
-import org.apache.camel.impl.event.RouteStartedEvent;
import org.apache.camel.quarkus.core.events.ComponentAddEvent;
import org.apache.camel.quarkus.core.events.EndpointAddEvent;
import org.apache.camel.quarkus.core.events.ServiceAddEvent;
@@ -38,8 +38,9 @@ import org.junit.jupiter.api.extension.RegisterExtension;
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;
+import static org.junit.jupiter.api.Assertions.assertTrue;
-public class CamelObserversTest {
+public class CamelLifecycleEventBridgeTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
@@ -47,11 +48,15 @@ public class CamelObserversTest {
@Inject
EventHandler handler;
+ @Inject
+ CamelContext context;
+
@Test
public void testObservers() {
+ // We're only observing lifecycle events so the management strategy should not be configured
+ assertTrue(context.getManagementStrategy().getEventNotifiers().isEmpty());
+
await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
- assertThat(handler.routes())
- .contains(MyRoutes.ROUTE_ID);
assertThat(handler.components())
.contains(DirectComponent.class.getName());
assertThat(handler.endpoints())
@@ -63,15 +68,10 @@ public class CamelObserversTest {
@ApplicationScoped
public static class EventHandler {
- private final Set<String> routes = new CopyOnWriteArraySet<>();
private final Set<String> endpoints = new CopyOnWriteArraySet<>();
private final Set<String> components = new CopyOnWriteArraySet<>();
private final Set<String> service = new CopyOnWriteArraySet<>();
- public void onRouteStarted(@Observes RouteStartedEvent event) {
- routes.add(event.getRoute().getRouteId());
- }
-
public void onComponentAdd(@Observes ComponentAddEvent event) {
components.add(event.getComponent().getClass().getName());
}
@@ -84,10 +84,6 @@ public class CamelObserversTest {
service.add(event.getService().getClass().getName());
}
- public Set<String> routes() {
- return routes;
- }
-
public Set<String> components() {
return components;
}
diff --git a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelManagementEventBridgeTest.java
similarity index 59%
rename from extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java
rename to extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelManagementEventBridgeTest.java
index 12a301a..50b0530 100644
--- a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelObserversTest.java
+++ b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelManagementEventBridgeTest.java
@@ -25,12 +25,11 @@ import javax.enterprise.event.Observes;
import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
+import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.direct.DirectComponent;
import org.apache.camel.impl.event.RouteStartedEvent;
-import org.apache.camel.quarkus.core.events.ComponentAddEvent;
-import org.apache.camel.quarkus.core.events.EndpointAddEvent;
-import org.apache.camel.quarkus.core.events.ServiceAddEvent;
+import org.apache.camel.quarkus.core.CamelLifecycleEventBridge;
+import org.apache.camel.spi.CamelEvent.RouteAddedEvent;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
@@ -38,8 +37,9 @@ import org.junit.jupiter.api.extension.RegisterExtension;
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;
+import static org.junit.jupiter.api.Assertions.assertFalse;
-public class CamelObserversTest {
+public class CamelManagementEventBridgeTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
@@ -47,57 +47,43 @@ public class CamelObserversTest {
@Inject
EventHandler handler;
+ @Inject
+ CamelContext context;
+
@Test
public void testObservers() {
+ // We're only observing management events so the lifecycle strategy should not be configured
+ assertFalse(context.getLifecycleStrategies()
+ .stream()
+ .anyMatch(lifecycleStrategy -> lifecycleStrategy.getClass().equals(CamelLifecycleEventBridge.class)));
+
await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
- assertThat(handler.routes())
+ assertThat(handler.routesAdded())
+ .contains(MyRoutes.ROUTE_ID);
+ assertThat(handler.routesStarted())
.contains(MyRoutes.ROUTE_ID);
- assertThat(handler.components())
- .contains(DirectComponent.class.getName());
- assertThat(handler.endpoints())
- .contains(MyRoutes.FROM_ENDPOINT);
- assertThat(handler.service())
- .isNotEmpty();
});
}
@ApplicationScoped
public static class EventHandler {
- private final Set<String> routes = new CopyOnWriteArraySet<>();
- private final Set<String> endpoints = new CopyOnWriteArraySet<>();
- private final Set<String> components = new CopyOnWriteArraySet<>();
- private final Set<String> service = new CopyOnWriteArraySet<>();
-
- public void onRouteStarted(@Observes RouteStartedEvent event) {
- routes.add(event.getRoute().getRouteId());
- }
+ private final Set<String> routesAdded = new CopyOnWriteArraySet<>();
+ private final Set<String> routesStarted = new CopyOnWriteArraySet<>();
- public void onComponentAdd(@Observes ComponentAddEvent event) {
- components.add(event.getComponent().getClass().getName());
+ public void onRouteAdded(@Observes RouteAddedEvent event) {
+ routesAdded.add(event.getRoute().getRouteId());
}
- public void onEndpointAdd(@Observes EndpointAddEvent event) {
- endpoints.add(event.getEndpoint().getEndpointUri());
- }
-
- public void onServiceAdd(@Observes ServiceAddEvent event) {
- service.add(event.getService().getClass().getName());
- }
-
- public Set<String> routes() {
- return routes;
- }
-
- public Set<String> components() {
- return components;
+ public void onRouteStarted(@Observes RouteStartedEvent event) {
+ routesStarted.add(event.getRoute().getRouteId());
}
- public Set<String> endpoints() {
- return endpoints;
+ public Set<String> routesAdded() {
+ return routesAdded;
}
- public Set<String> service() {
- return service;
+ public Set<String> routesStarted() {
+ return routesStarted;
}
}
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
index 4288399..0249167 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelConfig.java
@@ -66,6 +66,12 @@ public class CamelConfig {
@ConfigItem
public CSimpleConfig csimple;
+ /**
+ * Build time configuration options for the Camel CDI event bridge.
+ */
+ @ConfigItem
+ public EventBridgeConfig eventBridge;
+
@ConfigGroup
public static class BootstrapConfig {
/**
@@ -353,4 +359,21 @@ public class CamelConfig {
@ConfigItem(defaultValue = "warn")
public FailureRemedy onBuildTimeAnalysisFailure;
}
+
+ @ConfigGroup
+ public static class EventBridgeConfig {
+
+ /**
+ * Whether to enable the bridging of Camel events to CDI events.
+ * <p>
+ * This allows CDI observers to be configured for Camel events. E.g. those belonging to the
+ * {@code org.apache.camel.quarkus.core.events}, {@code org.apache.camel.quarkus.main.events} &
+ * {@code org.apache.camel.impl.event} packages.
+ * <p>
+ * Note that this configuration item only has any effect when observers configured for Camel events
+ * are present in the application.
+ */
+ @ConfigItem(defaultValue = "true")
+ public boolean enabled;
+ }
}
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
index 25deef0..7c2df25 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.quarkus.core;
+import java.util.Set;
+
import io.quarkus.arc.runtime.BeanContainer;
import io.quarkus.runtime.RuntimeValue;
import io.quarkus.runtime.annotations.Recorder;
@@ -63,8 +65,6 @@ public class CamelContextRecorder {
context.setModelJAXBContextFactory(contextFactory.getValue());
context.adapt(ExtendedCamelContext.class).setStartupStepRecorder(startupStepRecorder.getValue());
context.build();
- context.addLifecycleStrategy(new CamelLifecycleEventBridge());
- context.getManagementStrategy().addEventNotifier(new CamelManagementEventBridge());
context.setComponentNameResolver(componentNameResolver.getValue());
// register to the container
@@ -122,4 +122,14 @@ public class CamelContextRecorder {
throw new RuntimeException(e);
}
}
+
+ public void registerLifecycleEventBridge(RuntimeValue<CamelContext> context, Set<String> observedLifecycleEvents) {
+ context.getValue().addLifecycleStrategy(new CamelLifecycleEventBridge(observedLifecycleEvents));
+ }
+
+ public void registerManagementEventBridge(RuntimeValue<CamelContext> camelContext, Set<String> observedManagementEvents) {
+ camelContext.getValue()
+ .getManagementStrategy()
+ .addEventNotifier(new CamelManagementEventBridge(observedManagementEvents));
+ }
}
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelLifecycleEventBridge.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelLifecycleEventBridge.java
index a675ed9..0f9fcc9 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelLifecycleEventBridge.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelLifecycleEventBridge.java
@@ -17,6 +17,7 @@
package org.apache.camel.quarkus.core;
import java.util.Collection;
+import java.util.Set;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.function.Supplier;
@@ -45,7 +46,7 @@ import org.apache.camel.util.function.Suppliers;
/**
* Bridges {@link org.apache.camel.spi.LifecycleStrategy} callbacks and CDI by producing the correspondent
- * events.
+ * events. Events are only fired if a corresponding CDI observer is configured for them.
* <p>
* Note that this class does not implement all the callback as some notifications them are already covered
* by management events {@link CamelManagementEventBridge}
@@ -64,9 +65,11 @@ import org.apache.camel.util.function.Suppliers;
*/
public class CamelLifecycleEventBridge implements LifecycleStrategy {
private final Supplier<BeanManager> beanManager;
+ private final Set<String> observedLifecycleEvents;
- public CamelLifecycleEventBridge() {
+ public CamelLifecycleEventBridge(Set<String> observedLifecycleEvents) {
this.beanManager = Suppliers.memorize(Arc.container()::beanManager);
+ this.observedLifecycleEvents = observedLifecycleEvents;
}
private <T extends CamelEvent> void fireEvent(T event) {
@@ -75,43 +78,59 @@ public class CamelLifecycleEventBridge implements LifecycleStrategy {
@Override
public void onComponentAdd(String name, Component component) {
- fireEvent(new ComponentAddEvent(component));
+ if (observedLifecycleEvents.contains(ComponentAddEvent.class.getName())) {
+ fireEvent(new ComponentAddEvent(component));
+ }
}
@Override
public void onComponentRemove(String name, Component component) {
- fireEvent(new ComponentRemoveEvent(component));
+ if (observedLifecycleEvents.contains(ComponentRemoveEvent.class.getName())) {
+ fireEvent(new ComponentRemoveEvent(component));
+ }
}
@Override
public void onEndpointAdd(Endpoint endpoint) {
- fireEvent(new EndpointAddEvent(endpoint));
+ if (observedLifecycleEvents.contains(EndpointAddEvent.class.getName())) {
+ fireEvent(new EndpointAddEvent(endpoint));
+ }
}
@Override
public void onEndpointRemove(Endpoint endpoint) {
- fireEvent(new EndpointRemoveEvent(endpoint));
+ if (observedLifecycleEvents.contains(EndpointRemoveEvent.class.getName())) {
+ fireEvent(new EndpointRemoveEvent(endpoint));
+ }
}
@Override
public void onThreadPoolAdd(CamelContext camelContext, ThreadPoolExecutor threadPool, String id,
String sourceId, String routeId, String threadPoolProfileId) {
- fireEvent(new ThreadPoolAddEvent(camelContext, threadPool, id, sourceId, routeId, threadPoolProfileId));
+ if (observedLifecycleEvents.contains(ThreadPoolAddEvent.class.getName())) {
+ fireEvent(new ThreadPoolAddEvent(camelContext, threadPool, id, sourceId, routeId, threadPoolProfileId));
+ }
}
@Override
public void onThreadPoolRemove(CamelContext camelContext, ThreadPoolExecutor threadPool) {
- fireEvent(new ThreadPoolRemoveEvent(camelContext, threadPool));
+ if (observedLifecycleEvents.contains(ThreadPoolRemoveEvent.class.getName())) {
+ fireEvent(new ThreadPoolRemoveEvent(camelContext, threadPool));
+ }
}
@Override
public void onServiceAdd(CamelContext context, Service service, org.apache.camel.Route route) {
- fireEvent(new ServiceAddEvent(context, service, route));
+ if (observedLifecycleEvents.contains(ServiceAddEvent.class.getName())) {
+ fireEvent(new ServiceAddEvent(context, service, route));
+ }
}
@Override
public void onServiceRemove(CamelContext context, Service service, org.apache.camel.Route route) {
- fireEvent(new ServiceRemoveEvent(context, service, route));
+ if (observedLifecycleEvents.contains(ServiceAddEvent.class.getName())) {
+ fireEvent(new ServiceRemoveEvent(context, service, route));
+ }
}
@Override
@@ -121,25 +140,21 @@ public class CamelLifecycleEventBridge implements LifecycleStrategy {
@Override
public void onContextStop(CamelContext context) {
-
// superseded by management events
}
@Override
public void onRoutesAdd(Collection<Route> routes) {
-
// superseded by management events
}
@Override
public void onRoutesRemove(Collection<Route> routes) {
-
// superseded by management events
}
@Override
public void onRouteContextCreate(Route route) {
-
// superseded by management events
}
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelManagementEventBridge.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelManagementEventBridge.java
index 980b847..94c45e4 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelManagementEventBridge.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelManagementEventBridge.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.quarkus.core;
+import java.util.Set;
+
import javax.enterprise.inject.spi.BeanManager;
import io.quarkus.arc.Arc;
@@ -29,8 +31,13 @@ import org.apache.camel.support.EventNotifierSupport;
* @see EventNotifier
*/
public class CamelManagementEventBridge extends EventNotifierSupport {
+ private final Set<String> observedManagementEvents;
private BeanManager beanManager;
+ public CamelManagementEventBridge(Set<String> observedManagementEvents) {
+ this.observedManagementEvents = observedManagementEvents;
+ }
+
@Override
protected void doInit() {
beanManager = Arc.container().beanManager();
@@ -43,6 +50,6 @@ public class CamelManagementEventBridge extends EventNotifierSupport {
@Override
public boolean isEnabled(CamelEvent event) {
- return true;
+ return observedManagementEvents.contains(event.getClass().getSimpleName());
}
}
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainEventBridge.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainEventBridge.java
index 2128008..1522ca4 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainEventBridge.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainEventBridge.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.quarkus.main;
+import java.util.Set;
import java.util.function.Supplier;
import javax.enterprise.inject.spi.BeanManager;
@@ -40,24 +41,32 @@ import org.apache.camel.util.function.Suppliers;
*/
public class CamelMainEventBridge implements MainListener {
private final Supplier<BeanManager> beanManager;
+ private final Set<String> observedMainEvents;
- public CamelMainEventBridge() {
+ public CamelMainEventBridge(Set<String> observedMainEvents) {
this.beanManager = Suppliers.memorize(Arc.container()::beanManager);
+ this.observedMainEvents = observedMainEvents;
}
@Override
public void beforeInitialize(BaseMainSupport main) {
- fireEvent(new BeforeInitialize(main));
+ if (observedMainEvents.contains(BeforeInitialize.class.getName())) {
+ fireEvent(new BeforeInitialize(main));
+ }
}
@Override
public void beforeConfigure(BaseMainSupport main) {
- fireEvent(new BeforeConfigure(main));
+ if (observedMainEvents.contains(BeforeConfigure.class.getName())) {
+ fireEvent(new BeforeConfigure(main));
+ }
}
@Override
public void afterConfigure(BaseMainSupport main) {
- fireEvent(new AfterConfigure(main));
+ if (observedMainEvents.contains(AfterConfigure.class.getName())) {
+ fireEvent(new AfterConfigure(main));
+ }
}
@Override
@@ -67,22 +76,30 @@ public class CamelMainEventBridge implements MainListener {
@Override
public void beforeStart(BaseMainSupport main) {
- fireEvent(new BeforeStart(main));
+ if (observedMainEvents.contains(BeforeStart.class.getName())) {
+ fireEvent(new BeforeStart(main));
+ }
}
@Override
public void afterStart(BaseMainSupport main) {
- fireEvent(new AfterStart(main));
+ if (observedMainEvents.contains(AfterStart.class.getName())) {
+ fireEvent(new AfterStart(main));
+ }
}
@Override
public void beforeStop(BaseMainSupport main) {
- fireEvent(new BeforeStop(main));
+ if (observedMainEvents.contains(BeforeStop.class.getName())) {
+ fireEvent(new BeforeStop(main));
+ }
}
@Override
public void afterStop(BaseMainSupport main) {
- fireEvent(new AfterStop(main));
+ if (observedMainEvents.contains(AfterStop.class.getName())) {
+ fireEvent(new AfterStop(main));
+ }
}
private <T extends MainEvent> void fireEvent(T event) {
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
index edba747..55e7651 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java
@@ -17,6 +17,7 @@
package org.apache.camel.quarkus.main;
import java.util.List;
+import java.util.Set;
import io.quarkus.arc.runtime.BeanContainer;
import io.quarkus.runtime.RuntimeValue;
@@ -41,7 +42,6 @@ public class CamelMainRecorder {
FailureRemedy failureRemedy) {
CamelMain main = new CamelMain(runtime.getValue(), failureRemedy);
main.setRoutesCollector(routesCollector.getValue());
- main.addMainListener(new CamelMainEventBridge());
// properties are loaded through MicroProfile Config so there's
// no need to look for sources.
@@ -95,4 +95,8 @@ public class CamelMainRecorder {
return new RuntimeValue<>(runtime);
}
+
+ public void registerCamelMainEventBridge(RuntimeValue<CamelMain> main, Set<String> observedMainEvents) {
+ main.getValue().addMainListener(new CamelMainEventBridge(observedMainEvents));
+ }
}
diff --git a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsConfigDefaultsTest.java b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsConfigDefaultsTest.java
index 0131b0c..2a1f088 100644
--- a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsConfigDefaultsTest.java
+++ b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsConfigDefaultsTest.java
@@ -56,6 +56,6 @@ public class MicrometerMetricsConfigDefaultsTest {
assertTrue(messageHistoryFactory instanceof DefaultMessageHistoryFactory);
List<EventNotifier> eventNotifiers = context.getManagementStrategy().getEventNotifiers();
- assertEquals(3, eventNotifiers.size());
+ assertEquals(2, eventNotifiers.size());
}
}
diff --git a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsConfigOverrideTest.java b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsConfigOverrideTest.java
index 6867a78..16b9651 100644
--- a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsConfigOverrideTest.java
+++ b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsConfigOverrideTest.java
@@ -19,7 +19,6 @@ package org.apache.camel.quarkus.component.micrometer.deployment;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
-import java.util.List;
import java.util.Properties;
import javax.inject.Inject;
@@ -27,8 +26,6 @@ import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
import org.apache.camel.CamelContext;
import org.apache.camel.component.micrometer.messagehistory.MicrometerMessageHistoryFactory;
-import org.apache.camel.quarkus.core.CamelManagementEventBridge;
-import org.apache.camel.spi.EventNotifier;
import org.apache.camel.spi.MessageHistoryFactory;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
@@ -37,7 +34,6 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -58,11 +54,6 @@ public class MicrometerMetricsConfigOverrideTest {
MessageHistoryFactory messageHistoryFactory = context.getMessageHistoryFactory();
assertNotNull(messageHistoryFactory);
assertTrue(messageHistoryFactory instanceof MicrometerMessageHistoryFactory);
-
- // There should always be one event notifier added by core for CamelManagementEventBridge
- List<EventNotifier> eventNotifiers = context.getManagementStrategy().getEventNotifiers();
- assertEquals(1, eventNotifiers.size());
- assertTrue(eventNotifiers.get(0) instanceof CamelManagementEventBridge);
}
public static final Asset applicationProperties() {
diff --git a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsDisabledTest.java b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsDisabledTest.java
index 9583704..22b1d79 100644
--- a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsDisabledTest.java
+++ b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsDisabledTest.java
@@ -27,8 +27,6 @@ import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
import org.apache.camel.CamelContext;
import org.apache.camel.impl.engine.DefaultMessageHistoryFactory;
-import org.apache.camel.quarkus.core.CamelManagementEventBridge;
-import org.apache.camel.spi.EventNotifier;
import org.apache.camel.spi.MessageHistoryFactory;
import org.apache.camel.spi.RoutePolicyFactory;
import org.jboss.shrinkwrap.api.ShrinkWrap;
@@ -38,7 +36,6 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -60,11 +57,6 @@ public class MicrometerMetricsDisabledTest {
MessageHistoryFactory messageHistoryFactory = context.getMessageHistoryFactory();
assertNotNull(messageHistoryFactory);
assertTrue(messageHistoryFactory instanceof DefaultMessageHistoryFactory);
-
- // There should always be one event notifier added by core for CamelManagementEventBridge
- List<EventNotifier> eventNotifiers = context.getManagementStrategy().getEventNotifiers();
- assertEquals(1, eventNotifiers.size());
- assertTrue(eventNotifiers.get(0) instanceof CamelManagementEventBridge);
}
public static final Asset applicationProperties() {
diff --git a/extensions/microprofile-metrics/deployment/src/test/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsConfigDefaultsTest.java b/extensions/microprofile-metrics/deployment/src/test/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsConfigDefaultsTest.java
index 844c8c3..bf22d1d 100644
--- a/extensions/microprofile-metrics/deployment/src/test/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsConfigDefaultsTest.java
+++ b/extensions/microprofile-metrics/deployment/src/test/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsConfigDefaultsTest.java
@@ -56,6 +56,6 @@ public class MicroProfileMetricsConfigDefaultsTest {
assertTrue(messageHistoryFactory instanceof DefaultMessageHistoryFactory);
List<EventNotifier> eventNotifiers = context.getManagementStrategy().getEventNotifiers();
- assertEquals(4, eventNotifiers.size());
+ assertEquals(3, eventNotifiers.size());
}
}
diff --git a/extensions/microprofile-metrics/deployment/src/test/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsConfigOverrideTest.java b/extensions/microprofile-metrics/deployment/src/test/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsConfigOverrideTest.java
index 2b6b740..8f27318 100644
--- a/extensions/microprofile-metrics/deployment/src/test/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsConfigOverrideTest.java
+++ b/extensions/microprofile-metrics/deployment/src/test/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsConfigOverrideTest.java
@@ -19,7 +19,6 @@ package org.apache.camel.quarkus.component.microprofile.metrics.deployment;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
-import java.util.List;
import java.util.Properties;
import javax.inject.Inject;
@@ -27,8 +26,6 @@ import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
import org.apache.camel.CamelContext;
import org.apache.camel.component.microprofile.metrics.message.history.MicroProfileMetricsMessageHistoryFactory;
-import org.apache.camel.quarkus.core.CamelManagementEventBridge;
-import org.apache.camel.spi.EventNotifier;
import org.apache.camel.spi.MessageHistoryFactory;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
@@ -37,7 +34,6 @@ import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -58,11 +54,6 @@ public class MicroProfileMetricsConfigOverrideTest {
MessageHistoryFactory messageHistoryFactory = context.getMessageHistoryFactory();
assertNotNull(messageHistoryFactory);
assertTrue(messageHistoryFactory instanceof MicroProfileMetricsMessageHistoryFactory);
-
- // There should always be one event notifier added by core for CamelManagementEventBridge
- List<EventNotifier> eventNotifiers = context.getManagementStrategy().getEventNotifiers();
- assertEquals(1, eventNotifiers.size());
- assertTrue(eventNotifiers.get(0) instanceof CamelManagementEventBridge);
}
public static final Asset applicationProperties() {