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",

Reply via email to