This is an automated email from the ASF dual-hosted git repository.

davsclaus 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 c827cba4535 CAMEL-21353: camel-core - Add possibility to set some 
condition for Camel to wait during startup before continuing
c827cba4535 is described below

commit c827cba4535843f277e06f639512aecf8cf37d8f
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Oct 19 11:19:17 2024 +0200

    CAMEL-21353: camel-core - Add possibility to set some condition for Camel 
to wait during startup before continuing
---
 .../apache/camel/spi/StartupConditionStrategy.java |  6 +++++
 .../camel/impl/engine/SimpleCamelContext.java      |  1 +
 .../org/apache/camel/main/BaseMainSupport.java     |  2 +-
 .../startup}/DefaultStartupConditionStrategy.java  | 31 ++++++++++++++++++++--
 4 files changed, 37 insertions(+), 3 deletions(-)

diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/StartupConditionStrategy.java
 
b/core/camel-api/src/main/java/org/apache/camel/spi/StartupConditionStrategy.java
index a17996387bd..eddccdfa87d 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/spi/StartupConditionStrategy.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/spi/StartupConditionStrategy.java
@@ -79,6 +79,12 @@ public interface StartupConditionStrategy extends 
StaticService {
      */
     void addStartupCondition(StartupCondition startupCondition);
 
+    /**
+     * A list of custom class names (FQN) for {@link StartupCondition} 
classes. Multiple classes can be separated by
+     * comma.
+     */
+    void addStartupConditions(String classNames);
+
     /**
      * Lists all the {@link StartupCondition}.
      */
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 266f416e8e0..77cb3275d65 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -99,6 +99,7 @@ import org.apache.camel.support.DefaultRegistry;
 import org.apache.camel.support.DefaultUuidGenerator;
 import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.ResolverHelper;
+import org.apache.camel.support.startup.DefaultStartupConditionStrategy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
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 5ae380e9d21..142a11b96f4 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
@@ -754,7 +754,7 @@ public abstract class BaseMainSupport extends BaseService {
         }
         String file = 
mainConfigurationProperties.startupCondition().getFileExists();
         if (file != null) {
-            scs.addStartupCondition(new FileStartupCondition(env));
+            scs.addStartupCondition(new FileStartupCondition(file));
         }
         String classes = 
mainConfigurationProperties.startupCondition().getCustomClassNames();
         if (classes != null) {
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultStartupConditionStrategy.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/startup/DefaultStartupConditionStrategy.java
similarity index 83%
rename from 
core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultStartupConditionStrategy.java
rename to 
core/camel-support/src/main/java/org/apache/camel/support/startup/DefaultStartupConditionStrategy.java
index f6bbf5a4508..33414fab273 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultStartupConditionStrategy.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/startup/DefaultStartupConditionStrategy.java
@@ -14,16 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl.engine;
+package org.apache.camel.support.startup;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.StartupStep;
 import org.apache.camel.VetoCamelContextStartException;
 import org.apache.camel.spi.StartupCondition;
 import org.apache.camel.spi.StartupConditionStrategy;
+import org.apache.camel.spi.StartupStepRecorder;
 import org.apache.camel.support.OrderedComparator;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.StopWatch;
@@ -40,6 +43,7 @@ public class DefaultStartupConditionStrategy extends 
ServiceSupport implements S
 
     private CamelContext camelContext;
     private final List<StartupCondition> conditions = new ArrayList<>();
+    private String classNames;
     private boolean enabled;
     private int interval = 500;
     private int timeout = 20000;
@@ -98,6 +102,11 @@ public class DefaultStartupConditionStrategy extends 
ServiceSupport implements S
         conditions.add(startupCondition);
     }
 
+    @Override
+    public void addStartupConditions(String classNames) {
+        this.classNames = classNames;
+    }
+
     @Override
     public List<StartupCondition> getStartupConditions() {
         return conditions;
@@ -109,8 +118,26 @@ public class DefaultStartupConditionStrategy extends 
ServiceSupport implements S
             try {
                 var list = new ArrayList<>(conditions);
                 
list.addAll(camelContext.getRegistry().findByType(StartupCondition.class));
+                if (classNames != null) {
+                    for (String fqn : classNames.split(",")) {
+                        fqn = fqn.trim();
+                        Class<? extends StartupCondition> clazz
+                                = 
camelContext.getClassResolver().resolveMandatoryClass(fqn, 
StartupCondition.class);
+                        
list.add(camelContext.getInjector().newInstance(clazz));
+                    }
+                }
                 list.sort(OrderedComparator.get());
-                doCheckConditions(list);
+
+                if (!list.isEmpty()) {
+                    StartupStepRecorder recorder = 
camelContext.getCamelContextExtension().getStartupStepRecorder();
+                    StartupStep step = recorder.beginStep(CamelContext.class, 
camelContext.getCamelContextExtension().getName(),
+                            "Check Startup Conditions");
+                    doCheckConditions(list);
+                    recorder.endStep(step);
+                }
+
+            } catch (ClassNotFoundException e) {
+                throw RuntimeCamelException.wrapRuntimeCamelException(e);
             } finally {
                 checkDone = true;
             }

Reply via email to