You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/06/26 12:46:38 UTC

[camel] 06/07: CAMEL-13683: camel-main - Allow to turn of fail fast if configuring properties fail

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 <cl...@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",