The MicroProfile test fails if message history is turned off #650
diff --git a/extensions/microprofile-metrics/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsProcessor.java b/extensions/microprofile-metrics/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsProcessor.java
index 9f137c3..4c26c42 100644
--- a/extensions/microprofile-metrics/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsProcessor.java
+++ b/extensions/microprofile-metrics/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsProcessor.java
@@ -25,6 +25,7 @@
import org.apache.camel.quarkus.component.microprofile.metrics.runtime.CamelMicroProfileMetricsRecorder;
import org.apache.camel.quarkus.core.deployment.CamelBeanBuildItem;
import org.apache.camel.quarkus.core.deployment.CamelContextBuildItem;
+import org.apache.camel.quarkus.core.deployment.CamelMainListenerBuildItem;
import org.eclipse.microprofile.metrics.MetricRegistry;
class MicroProfileMetricsProcessor {
@@ -47,6 +48,15 @@
@Record(ExecutionTime.STATIC_INIT)
@BuildStep
+ CamelMainListenerBuildItem contextConfigurerListener(
+ CamelMicroProfileMetricsRecorder recorder,
+ CamelMicroProfileMetricsConfig config) {
+
+ return new CamelMainListenerBuildItem(recorder.createContextConfigurerListener(config));
+ }
+
+ @Record(ExecutionTime.STATIC_INIT)
+ @BuildStep
public void configureCamelContext(CamelMicroProfileMetricsRecorder recorder, CamelMicroProfileMetricsConfig config,
CamelContextBuildItem camelContextBuildItem) {
recorder.configureCamelContext(config, camelContextBuildItem.getCamelContext());
diff --git a/extensions/microprofile-metrics/runtime/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/runtime/CamelMicroProfileMetricsRecorder.java b/extensions/microprofile-metrics/runtime/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/runtime/CamelMicroProfileMetricsRecorder.java
index bfe8ba0..e0a2c75 100644
--- a/extensions/microprofile-metrics/runtime/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/runtime/CamelMicroProfileMetricsRecorder.java
+++ b/extensions/microprofile-metrics/runtime/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/runtime/CamelMicroProfileMetricsRecorder.java
@@ -25,8 +25,11 @@
import org.apache.camel.component.microprofile.metrics.event.notifier.route.MicroProfileMetricsRouteEventNotifier;
import org.apache.camel.component.microprofile.metrics.message.history.MicroProfileMetricsMessageHistoryFactory;
import org.apache.camel.component.microprofile.metrics.route.policy.MicroProfileMetricsRoutePolicyFactory;
+import org.apache.camel.main.MainListener;
+import org.apache.camel.main.MainListenerSupport;
import org.apache.camel.spi.ManagementStrategy;
import org.eclipse.microprofile.metrics.MetricRegistry;
+import org.jboss.logging.Logger;
@Recorder
public class CamelMicroProfileMetricsRecorder {
@@ -35,6 +38,10 @@
return new RuntimeValue<>(MetricRegistries.get(MetricRegistry.Type.APPLICATION));
}
+ public RuntimeValue<MainListener> createContextConfigurerListener(CamelMicroProfileMetricsConfig config) {
+ return new RuntimeValue<>(new MicroProfileMetricsContextConfigurerListener(config));
+ }
+
public void configureCamelContext(CamelMicroProfileMetricsConfig config,
RuntimeValue<CamelContext> camelContextRuntimeValue) {
CamelContext camelContext = camelContextRuntimeValue.getValue();
@@ -44,11 +51,6 @@
camelContext.addRoutePolicyFactory(new MicroProfileMetricsRoutePolicyFactory());
}
- if (config.enableMessageHistory) {
- camelContext.setMessageHistory(true);
- camelContext.setMessageHistoryFactory(new MicroProfileMetricsMessageHistoryFactory());
- }
-
if (config.enableExchangeEventNotifier) {
managementStrategy.addEventNotifier(new MicroProfileMetricsExchangeEventNotifier());
}
@@ -61,4 +63,29 @@
managementStrategy.addEventNotifier(new MicroProfileMetricsCamelContextEventNotifier());
}
}
+
+ private static class MicroProfileMetricsContextConfigurerListener extends MainListenerSupport {
+ private static final Logger LOGGER = Logger.getLogger(MicroProfileMetricsContextConfigurerListener.class);
+ private final CamelMicroProfileMetricsConfig config;
+
+ public MicroProfileMetricsContextConfigurerListener(CamelMicroProfileMetricsConfig config) {
+ this.config = config;
+ }
+
+ @Override
+ public void configure(CamelContext camelContext) {
+ if (!config.enableMessageHistory) {
+ return;
+ }
+
+ if (!camelContext.isMessageHistory()) {
+ LOGGER.warn(
+ "MessageHistory is not use and will be enabled as required by MicroProfile Metrics for MessageHistory");
+
+ camelContext.setMessageHistory(true);
+ }
+
+ camelContext.setMessageHistoryFactory(new MicroProfileMetricsMessageHistoryFactory());
+ }
+ }
}
diff --git a/integration-tests/microprofile/src/main/resources/application.properties b/integration-tests/microprofile/src/main/resources/application.properties
index 99ae16b..4381bd3 100644
--- a/integration-tests/microprofile/src/main/resources/application.properties
+++ b/integration-tests/microprofile/src/main/resources/application.properties
@@ -24,4 +24,9 @@
#
# Camel
#
-camel.context.name = quarkus-camel-example
\ No newline at end of file
+camel.context.name = quarkus-camel-example
+
+# Uncomment to turn on/off the message history
+# Note that on camel 3.1.x is off by default but is on by default on previous releases.
+#
+# camel.context.message-history = false
\ No newline at end of file