You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2017/02/22 10:07:45 UTC
camel git commit: CAMEL-10686: service-call eip : generate
service-call auto configurations for spring-boot
Repository: camel
Updated Branches:
refs/heads/master 5350f010f -> f13acd39a
CAMEL-10686: service-call eip : generate service-call auto configurations for spring-boot
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f13acd39
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f13acd39
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f13acd39
Branch: refs/heads/master
Commit: f13acd39a791893c1e79428931755a0729856898
Parents: 5350f01
Author: lburgazzoli <lb...@gmail.com>
Authored: Wed Feb 22 11:06:42 2017 +0100
Committer: lburgazzoli <lb...@gmail.com>
Committed: Wed Feb 22 11:07:25 2017 +0100
----------------------------------------------------------------------
...bonServiceCallLoadBalancerConfiguration.java | 77 +++++++++++++++++++
.../ribbon/cloud/RibbonLoadBalancerFactory.java | 34 ++++++++-
.../cloud/RibbonCloudAutoConfiguration.java | 79 ++++++++++++++++++++
.../cloud/RibbonCloudConfiguration.java | 45 +++++++++++
.../main/resources/META-INF/spring.factories | 18 +++++
.../src/main/resources/application.properties | 1 +
6 files changed, 251 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/f13acd39/camel-core/src/main/java/org/apache/camel/model/cloud/RibbonServiceCallLoadBalancerConfiguration.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/cloud/RibbonServiceCallLoadBalancerConfiguration.java b/camel-core/src/main/java/org/apache/camel/model/cloud/RibbonServiceCallLoadBalancerConfiguration.java
index 05f2523..b605890 100644
--- a/camel-core/src/main/java/org/apache/camel/model/cloud/RibbonServiceCallLoadBalancerConfiguration.java
+++ b/camel-core/src/main/java/org/apache/camel/model/cloud/RibbonServiceCallLoadBalancerConfiguration.java
@@ -16,11 +16,13 @@
*/
package org.apache.camel.model.cloud;
+import java.util.Map;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
+import org.apache.camel.CamelContext;
import org.apache.camel.spi.Metadata;
@Metadata(label = "routing,cloud,load-balancing")
@@ -28,6 +30,12 @@ import org.apache.camel.spi.Metadata;
@XmlAccessorType(XmlAccessType.FIELD)
public class RibbonServiceCallLoadBalancerConfiguration extends ServiceCallLoadBalancerConfiguration {
@XmlAttribute
+ private String namespace;
+ @XmlAttribute
+ private String username;
+ @XmlAttribute
+ private String password;
+ @XmlAttribute
private String clientName;
public RibbonServiceCallLoadBalancerConfiguration() {
@@ -42,6 +50,39 @@ public class RibbonServiceCallLoadBalancerConfiguration extends ServiceCallLoadB
// Properties
// *************************************************************************
+ public String getNamespace() {
+ return namespace;
+ }
+
+ /**
+ * The namespace
+ */
+ public void setNamespace(String namespace) {
+ this.namespace = namespace;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ /**
+ * The username
+ */
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ /**
+ * The password
+ */
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
public String getClientName() {
return clientName;
}
@@ -58,10 +99,46 @@ public class RibbonServiceCallLoadBalancerConfiguration extends ServiceCallLoadB
// *************************************************************************
/**
+ * Sets the namespace
+ */
+ public RibbonServiceCallLoadBalancerConfiguration namespace(String namespace) {
+ setNamespace(namespace);
+ return this;
+ }
+
+ /**
+ * Sets the username
+ */
+ public RibbonServiceCallLoadBalancerConfiguration username(String username) {
+ setUsername(username);
+ return this;
+ }
+
+ /**
+ * Sets the password
+ */
+ public RibbonServiceCallLoadBalancerConfiguration password(String password) {
+ setPassword(password);
+ return this;
+ }
+
+ /**
* Sets the Ribbon client name
*/
public RibbonServiceCallLoadBalancerConfiguration clientName(String clientName) {
setClientName(clientName);
return this;
}
+
+ // *************************************************************************
+ // Helpers
+ // *************************************************************************
+
+ @Override
+ protected void postProcessFactoryParameters(CamelContext camelContext, Map<String, Object> parameters) throws Exception {
+ Map<String, Object> properties = (Map<String, Object>)parameters.get("properties");
+ if (properties != null) {
+ parameters.put("clientConfig", properties);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/f13acd39/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/cloud/RibbonLoadBalancerFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/cloud/RibbonLoadBalancerFactory.java b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/cloud/RibbonLoadBalancerFactory.java
index 86874f0..5a211fc 100644
--- a/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/cloud/RibbonLoadBalancerFactory.java
+++ b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/cloud/RibbonLoadBalancerFactory.java
@@ -27,13 +27,41 @@ public class RibbonLoadBalancerFactory implements LoadBalancerFactory {
private final RibbonConfiguration configuration;
public RibbonLoadBalancerFactory() {
- this.configuration = new RibbonConfiguration();
+ this(new RibbonConfiguration());
+ }
+
+ public RibbonLoadBalancerFactory(RibbonConfiguration configuration) {
+ this.configuration = configuration;
}
// *************************************************************************
// Properties
// *************************************************************************
+ public String getNamespace() {
+ return configuration.getNamespace();
+ }
+
+ public void setNamespace(String namespace) {
+ configuration.setNamespace(namespace);
+ }
+
+ public String getUsername() {
+ return configuration.getUsername();
+ }
+
+ public void setUsername(String username) {
+ configuration.setUsername(username);
+ }
+
+ public String getPassword() {
+ return configuration.getPassword();
+ }
+
+ public void setPassword(String password) {
+ configuration.setPassword(password);
+ }
+
public String getClientName() {
return configuration.getClientName();
}
@@ -42,11 +70,11 @@ public class RibbonLoadBalancerFactory implements LoadBalancerFactory {
configuration.setClientName(clientName);
}
- public Map<String, String> getProperies() {
+ public Map<String, String> getClientConfig() {
return configuration.getClientConfig();
}
- public void setProperties(Map<String, String> clientConfig) {
+ public void setClientConfig(Map<String, String> clientConfig) {
configuration.setClientConfig(clientConfig);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/f13acd39/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java
new file mode 100644
index 0000000..cfb7f88
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.ribbon.springboot.cloud;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.cloud.LoadBalancer;
+import org.apache.camel.component.ribbon.cloud.RibbonLoadBalancerFactory;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.util.IntrospectionSupport;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionMessage;
+import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
+import org.springframework.boot.bind.RelaxedPropertyResolver;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ConditionContext;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.core.type.AnnotatedTypeMetadata;
+
+@Configuration
+@ConditionalOnBean(CamelAutoConfiguration.class)
+@Conditional(RibbonCloudAutoConfiguration.Condition.class)
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties(RibbonCloudConfiguration.class)
+public class RibbonCloudAutoConfiguration {
+ @Lazy
+ @Bean(name = "ribbon-load-balancer")
+ @ConditionalOnClass(CamelContext.class)
+ public LoadBalancer configureServiceDiscoveryFactory(CamelContext camelContext, RibbonCloudConfiguration configuration) throws Exception {
+ RibbonLoadBalancerFactory factory = new RibbonLoadBalancerFactory();
+
+ Map<String, Object> parameters = new HashMap<>();
+ IntrospectionSupport.getProperties(configuration, parameters, null, false);
+ IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), factory, parameters);
+
+ return factory.newInstance(camelContext);
+ }
+
+ public static class Condition extends SpringBootCondition {
+ @Override
+ public ConditionOutcome getMatchOutcome(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
+ boolean groupEnabled = isEnabled(conditionContext, "camel.cloud.", true);
+
+ ConditionMessage.Builder message = ConditionMessage.forCondition("camel.cloud.ribbon");
+ if (isEnabled(conditionContext, "camel.cloud.ribbon.", groupEnabled)) {
+ return ConditionOutcome.match(message.because("enabled"));
+ }
+
+ return ConditionOutcome.noMatch(message.because("not enabled"));
+ }
+
+ private boolean isEnabled(ConditionContext context, String prefix, boolean defaultValue) {
+ RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(context.getEnvironment(), prefix);
+ return resolver.getProperty("enabled", Boolean.class, defaultValue);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/f13acd39/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudConfiguration.java b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudConfiguration.java
new file mode 100644
index 0000000..dd31bea
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudConfiguration.java
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.ribbon.springboot.cloud;
+
+import org.apache.camel.component.ribbon.RibbonConfiguration;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = "camel.cloud.ribbon")
+public class RibbonCloudConfiguration {
+ private boolean enabled = true;
+ private LoadBalancerConfiguration loadBalancer = new LoadBalancerConfiguration();
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ public LoadBalancerConfiguration getLoadBalancer() {
+ return loadBalancer;
+ }
+
+ // *************************************************************************
+ //
+ // *************************************************************************
+
+ public class LoadBalancerConfiguration extends RibbonConfiguration {
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/f13acd39/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/resources/META-INF/spring.factories
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..567d3d4
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.apache.camel.component.ribbon.springboot.cloud.RibbonCloudAutoConfiguration
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/f13acd39/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/resources/application.properties
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/resources/application.properties b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/resources/application.properties
new file mode 100644
index 0000000..024710e
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/resources/application.properties
@@ -0,0 +1 @@
+camel.cloud.ribbon.load-balancer.
\ No newline at end of file