This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-4.8.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.8.x by this push: new ae9c6047a80 CAMEL-21543: camel-main - MainListenerClasses loaded from application.properties is not activated ae9c6047a80 is described below commit ae9c6047a801cd9a10014eac5647f4739b280226 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri Dec 13 10:08:45 2024 +0100 CAMEL-21543: camel-main - MainListenerClasses loaded from application.properties is not activated --- .../java/org/apache/camel/main/BaseMainSupport.java | 19 ++++++++++++++----- .../main/java/org/apache/camel/main/MainListener.java | 4 ++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java index cb7ec3a4f78..0dba8561112 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java @@ -291,7 +291,9 @@ public abstract class BaseMainSupport extends BaseService { * @param listener the listener */ public void addMainListener(MainListener listener) { - listeners.add(listener); + if (!listeners.contains(listener)) { + listeners.add(listener); + } } /** @@ -544,6 +546,9 @@ public abstract class BaseMainSupport extends BaseService { autoConfigurationMainConfiguration(camelContext, mainConfigurationProperties, autoConfiguredProperties); } + // configure main listener + configureMainListener(camelContext); + // configure from main configuration properties doConfigureCamelContextFromMainConfiguration(camelContext, mainConfigurationProperties, autoConfiguredProperties); @@ -665,10 +670,14 @@ public abstract class BaseMainSupport extends BaseService { mainConfigurationProperties.getMainListeners().forEach(this::addMainListener); if (mainConfigurationProperties.getMainListenerClasses() != null) { for (String fqn : mainConfigurationProperties.getMainListenerClasses().split(",")) { - fqn = fqn.trim(); - Class<? extends MainListener> clazz - = camelContext.getClassResolver().resolveMandatoryClass(fqn, MainListener.class); - addMainListener(camelContext.getInjector().newInstance(clazz)); + String target = fqn.trim(); + // the class may already be added so avoid creating duplicate classes + boolean added = listeners.stream().map(l -> l.getClass().getName()).anyMatch(l -> l.equals(target)); + if (!added) { + Class<? extends MainListener> clazz + = camelContext.getClassResolver().resolveMandatoryClass(fqn, MainListener.class); + addMainListener(camelContext.getInjector().newInstance(clazz)); + } } } } diff --git a/core/camel-main/src/main/java/org/apache/camel/main/MainListener.java b/core/camel-main/src/main/java/org/apache/camel/main/MainListener.java index d02190a16c7..6b1410554fe 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/MainListener.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/MainListener.java @@ -18,6 +18,10 @@ package org.apache.camel.main; /** * A lifecycle listener to receive callbacks when the Main is started and stopped. + * + * Beware that if you use MainListener then depending on how Camel is started and these main listener is configured then + * the beforeInitialize and beforeConfigure events may already have been triggered. So depending on your use-cases then + * favour using the later stage events to trigger your code. */ public interface MainListener {