This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit 7d11d5dd9860ad374fe28df8a8b158b7f31109c2 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Jun 26 12:05:23 2019 +0200 CAMEL-13683: camel-main - Allow to turn of fail fast if configuring properties fail --- .../camel/main/MainConfigurationProperties.java | 26 ++++++++++++++++++++++ .../java/org/apache/camel/main/MainSupport.java | 21 +++++++++++------ .../camel-main-configuration-metadata.json | 7 ++++++ .../META-INF/spring-configuration-metadata.json | 7 ++++++ .../META-INF/spring-configuration-metadata.json | 7 ++++++ 5 files changed, 61 insertions(+), 7 deletions(-) diff --git a/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java index 89518b9..2925337 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java @@ -22,6 +22,7 @@ package org.apache.camel.main; public class MainConfigurationProperties extends DefaultConfigurationProperties<MainConfigurationProperties> { private boolean autoConfigurationEnabled = true; + private boolean autoConfigurationFailFast = true; private boolean autowireComponentProperties = true; private boolean autowireComponentPropertiesDeep; private boolean autowireComponentPropertiesAllowPrivateSetter = true; @@ -80,6 +81,20 @@ public class MainConfigurationProperties extends DefaultConfigurationProperties< this.autoConfigurationEnabled = autoConfigurationEnabled; } + public boolean isAutoConfigurationFailFast() { + return autoConfigurationFailFast; + } + + /** + * Whether auto configuration should fail fast when configuring one ore more properties fails for whatever reason + * such as a invalid property name, etc. + * <p/> + * This option is default enabled. + */ + public void setAutoConfigurationFailFast(boolean autoConfigurationFailFast) { + this.autoConfigurationFailFast = autoConfigurationFailFast; + } + public boolean isAutowireComponentProperties() { return autowireComponentProperties; } @@ -173,6 +188,17 @@ public class MainConfigurationProperties extends DefaultConfigurationProperties< } /** + * Whether auto configuration should fail fast when configuring one ore more properties fails for whatever reason + * such as a invalid property name, etc. + * <p/> + * This option is default enabled. + */ + public MainConfigurationProperties withAutoConfigurationFailFast(boolean autoConfigurationFailFast) { + this.autoConfigurationFailFast = autoConfigurationFailFast; + return this; + } + + /** * Whether autowiring components with properties that are of same type, which has been added to the Camel registry, as a singleton instance. * This is used for convention over configuration to inject DataSource, AmazonLogin instances to the components. * <p/> diff --git a/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java index 8024a49..673a6a3 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java @@ -842,7 +842,7 @@ public abstract class MainSupport extends ServiceSupport { } if (!properties.isEmpty()) { LOG.info("Auto configuring CamelContext from loaded properties: {}", properties.size()); - setPropertiesOnTarget(camelContext, camelContext, properties, true, true); + setPropertiesOnTarget(camelContext, camelContext, properties, mainConfigurationProperties.isAutoConfigurationFailFast(), true); } if (!hystrixProperties.isEmpty()) { LOG.info("Auto configuring Hystrix EIP from loaded properties: {}", hystrixProperties.size()); @@ -852,7 +852,7 @@ public abstract class MainSupport extends ServiceSupport { hystrix = new HystrixConfigurationDefinition(); model.setHystrixConfiguration(hystrix); } - setPropertiesOnTarget(camelContext, hystrix, hystrixProperties, true, true); + setPropertiesOnTarget(camelContext, hystrix, hystrixProperties, mainConfigurationProperties.isAutoConfigurationFailFast(), true); } if (!restProperties.isEmpty()) { LOG.info("Auto configuring Rest DSL from loaded properties: {}", restProperties.size()); @@ -862,7 +862,7 @@ public abstract class MainSupport extends ServiceSupport { rest = new RestConfiguration(); model.setRestConfiguration(rest); } - setPropertiesOnTarget(camelContext, rest, restProperties, true, true); + setPropertiesOnTarget(camelContext, rest, restProperties, mainConfigurationProperties.isAutoConfigurationFailFast(), true); } } @@ -906,7 +906,7 @@ public abstract class MainSupport extends ServiceSupport { for (Object obj : properties.keySet()) { Map<String, Object> values = properties.get(obj); - setPropertiesOnTarget(camelContext, obj, values, true, true); + setPropertiesOnTarget(camelContext, obj, values, mainConfigurationProperties.isAutoConfigurationFailFast(), true); } } @@ -930,6 +930,7 @@ public abstract class MainSupport extends ServiceSupport { Map<String, Object> properties = new LinkedHashMap<>(); + for (String key : prop.stringPropertyNames()) { if (key.startsWith("camel.main.")) { // grab the value @@ -940,9 +941,15 @@ public abstract class MainSupport extends ServiceSupport { } } + // special for fail-fast as we need to know this early before we set all the other options + Object failFast = properties.remove("autoconfigurationfailfast"); + if (failFast != null) { + PropertyBindingSupport.bindMandatoryProperty(camelContext, config, "autoConfigurationFailFast", failFast, true); + } + if (!properties.isEmpty()) { LOG.info("Auto configuring main from loaded properties: {}", properties.size()); - setPropertiesOnTarget(camelContext, config, properties, true, true); + setPropertiesOnTarget(camelContext, config, properties, mainConfigurationProperties.isAutoConfigurationFailFast(), true); } } @@ -1053,10 +1060,10 @@ public abstract class MainSupport extends ServiceSupport { for (Object obj : properties.keySet()) { Map<String, Object> values = properties.get(obj); - setPropertiesOnTarget(camelContext, obj, values, true, true); + setPropertiesOnTarget(camelContext, obj, values, mainConfigurationProperties.isAutoConfigurationFailFast(), true); } - // TODO: log if any options was not configured + // TODO: Log which options was not set } protected void autoConfigurationFromRegistry(CamelContext camelContext, boolean deepNesting) throws Exception { diff --git a/core/camel-main/src/main/resources/META-INF/camel-main-configuration-metadata.json b/core/camel-main/src/main/resources/META-INF/camel-main-configuration-metadata.json index 096901c..0327eca 100644 --- a/core/camel-main/src/main/resources/META-INF/camel-main-configuration-metadata.json +++ b/core/camel-main/src/main/resources/META-INF/camel-main-configuration-metadata.json @@ -31,6 +31,13 @@ "defaultValue":"true" }, { + "name":"camel.main.auto-configuration-fail-fast", + "type":"boolean", + "sourceType":"org.apache.camel.main.MainConfigurationProperties", + "description":"Whether auto configuration should fail fast when configuring one ore more properties fails for whatever reason such as a invalid property name, etc. This option is default enabled.", + "defaultValue":"true" + }, + { "name":"camel.main.auto-startup", "type":"boolean", "sourceType":"org.apache.camel.main.DefaultConfigurationProperties", diff --git a/examples/camel-example-main-artemis/src/main/resources/META-INF/spring-configuration-metadata.json b/examples/camel-example-main-artemis/src/main/resources/META-INF/spring-configuration-metadata.json index ba64ce0..364d91c 100644 --- a/examples/camel-example-main-artemis/src/main/resources/META-INF/spring-configuration-metadata.json +++ b/examples/camel-example-main-artemis/src/main/resources/META-INF/spring-configuration-metadata.json @@ -171,6 +171,13 @@ "defaultValue":"true" }, { + "name":"camel.main.auto-configuration-fail-fast", + "type":"boolean", + "sourceType":"org.apache.camel.main.MainConfigurationProperties", + "description":"Whether auto configuration should fail fast when configuring one ore more properties fails for whatever reason such as a invalid property name, etc. This option is default enabled.", + "defaultValue":"true" + }, + { "name":"camel.main.auto-startup", "type":"boolean", "sourceType":"org.apache.camel.main.DefaultConfigurationProperties", diff --git a/examples/camel-example-main/src/main/resources/META-INF/spring-configuration-metadata.json b/examples/camel-example-main/src/main/resources/META-INF/spring-configuration-metadata.json index 5340af6..b5bf26c 100644 --- a/examples/camel-example-main/src/main/resources/META-INF/spring-configuration-metadata.json +++ b/examples/camel-example-main/src/main/resources/META-INF/spring-configuration-metadata.json @@ -161,6 +161,13 @@ "defaultValue":"true" }, { + "name":"camel.main.auto-configuration-fail-fast", + "type":"boolean", + "sourceType":"org.apache.camel.main.MainConfigurationProperties", + "description":"Whether auto configuration should fail fast when configuring one ore more properties fails for whatever reason such as a invalid property name, etc. This option is default enabled.", + "defaultValue":"true" + }, + { "name":"camel.main.auto-startup", "type":"boolean", "sourceType":"org.apache.camel.main.DefaultConfigurationProperties",