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;
}