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 2015/04/22 15:04:21 UTC
camel git commit: CAMEL-8684: Fixed load balancer model to not
implement LoadBalancer/Processor as that is runtime. Also ensure Java DSL
build the routes using the model classes instead of cheating.
Repository: camel
Updated Branches:
refs/heads/master 5b27ecc8a -> ea6d2fcc1
CAMEL-8684: Fixed load balancer model to not implement LoadBalancer/Processor as that is runtime. Also ensure Java DSL build the routes using the model classes instead of cheating.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ea6d2fcc
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ea6d2fcc
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ea6d2fcc
Branch: refs/heads/master
Commit: ea6d2fcc19acd3ed283c82c4076720b05acde016
Parents: 5b27ecc
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Apr 22 14:29:31 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Apr 22 15:07:18 2015 +0200
----------------------------------------------------------------------
.../camel/model/LoadBalanceDefinition.java | 57 ++++++++------------
.../camel/model/LoadBalancerDefinition.java | 41 +-------------
.../CircuitBreakerLoadBalancerDefinition.java | 27 ++++++++--
.../FailoverLoadBalancerDefinition.java | 31 +++++++++--
.../DoubleLoadBalancerMisconfigurationTest.java | 6 +--
5 files changed, 75 insertions(+), 87 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/ea6d2fcc/camel-core/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java b/camel-core/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java
index 05fc76b..c2d8291 100644
--- a/camel-core/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java
@@ -38,16 +38,7 @@ import org.apache.camel.model.loadbalancer.RoundRobinLoadBalancerDefinition;
import org.apache.camel.model.loadbalancer.StickyLoadBalancerDefinition;
import org.apache.camel.model.loadbalancer.TopicLoadBalancerDefinition;
import org.apache.camel.model.loadbalancer.WeightedLoadBalancerDefinition;
-import org.apache.camel.processor.loadbalancer.CircuitBreakerLoadBalancer;
-import org.apache.camel.processor.loadbalancer.FailOverLoadBalancer;
import org.apache.camel.processor.loadbalancer.LoadBalancer;
-import org.apache.camel.processor.loadbalancer.RandomLoadBalancer;
-import org.apache.camel.processor.loadbalancer.RoundRobinLoadBalancer;
-import org.apache.camel.processor.loadbalancer.StickyLoadBalancer;
-import org.apache.camel.processor.loadbalancer.TopicLoadBalancer;
-import org.apache.camel.processor.loadbalancer.WeightedLoadBalancer;
-import org.apache.camel.processor.loadbalancer.WeightedRandomLoadBalancer;
-import org.apache.camel.processor.loadbalancer.WeightedRoundRobinLoadBalancer;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.RouteContext;
import org.apache.camel.util.CollectionStringBuffer;
@@ -204,10 +195,11 @@ public class LoadBalanceDefinition extends ProcessorDefinition<LoadBalanceDefini
* @return the builder
*/
public LoadBalanceDefinition failover(int maximumFailoverAttempts, boolean inheritErrorHandler, boolean roundRobin, Class<?>... exceptions) {
- FailOverLoadBalancer failover = new FailOverLoadBalancer(Arrays.asList(exceptions));
- failover.setMaximumFailoverAttempts(maximumFailoverAttempts);
- failover.setRoundRobin(roundRobin);
- setLoadBalancerType(new LoadBalancerDefinition(failover));
+ FailoverLoadBalancerDefinition def = new FailoverLoadBalancerDefinition();
+ def.setExceptionTypes(Arrays.asList(exceptions));
+ def.setMaximumFailoverAttempts(maximumFailoverAttempts);
+ def.setRoundRobin(roundRobin);
+ setLoadBalancerType(def);
this.setInheritErrorHandler(inheritErrorHandler);
return this;
}
@@ -232,11 +224,11 @@ public class LoadBalanceDefinition extends ProcessorDefinition<LoadBalanceDefini
* @return the builder
*/
public LoadBalanceDefinition circuitBreaker(int threshold, long halfOpenAfter, Class<?>... exceptions) {
- CircuitBreakerLoadBalancer breakerLoadBalancer = new CircuitBreakerLoadBalancer(Arrays.asList(exceptions));
- breakerLoadBalancer.setThreshold(threshold);
- breakerLoadBalancer.setHalfOpenAfter(halfOpenAfter);
-
- setLoadBalancerType(new LoadBalancerDefinition(breakerLoadBalancer));
+ CircuitBreakerLoadBalancerDefinition def = new CircuitBreakerLoadBalancerDefinition();
+ def.setExceptionTypes(Arrays.asList(exceptions));
+ def.setThreshold(threshold);
+ def.setHalfOpenAfter(halfOpenAfter);
+ setLoadBalancerType(def);
return this;
}
@@ -249,20 +241,11 @@ public class LoadBalanceDefinition extends ProcessorDefinition<LoadBalanceDefini
* @return the builder
*/
public LoadBalanceDefinition weighted(boolean roundRobin, String distributionRatio, String distributionRatioDelimiter) {
- WeightedLoadBalancer weighted;
- List<Integer> distributionRatioList = new ArrayList<Integer>();
-
- String[] ratios = distributionRatio.split(distributionRatioDelimiter);
- for (String ratio : ratios) {
- distributionRatioList.add(new Integer(ratio.trim()));
- }
-
- if (!roundRobin) {
- weighted = new WeightedRandomLoadBalancer(distributionRatioList);
- } else {
- weighted = new WeightedRoundRobinLoadBalancer(distributionRatioList);
- }
- setLoadBalancerType(new LoadBalancerDefinition(weighted));
+ WeightedLoadBalancerDefinition def = new WeightedLoadBalancerDefinition();
+ def.setRoundRobin(roundRobin);
+ def.setDistributionRatio(distributionRatio);
+ def.setDistributionRatioDelimiter(distributionRatioDelimiter);
+ setLoadBalancerType(def);
return this;
}
@@ -272,7 +255,7 @@ public class LoadBalanceDefinition extends ProcessorDefinition<LoadBalanceDefini
* @return the builder
*/
public LoadBalanceDefinition roundRobin() {
- setLoadBalancerType(new LoadBalancerDefinition(new RoundRobinLoadBalancer()));
+ setLoadBalancerType(new RoundRobinLoadBalancerDefinition());
return this;
}
@@ -282,7 +265,7 @@ public class LoadBalanceDefinition extends ProcessorDefinition<LoadBalanceDefini
* @return the builder
*/
public LoadBalanceDefinition random() {
- setLoadBalancerType(new LoadBalancerDefinition(new RandomLoadBalancer()));
+ setLoadBalancerType(new RandomLoadBalancerDefinition());
return this;
}
@@ -306,7 +289,9 @@ public class LoadBalanceDefinition extends ProcessorDefinition<LoadBalanceDefini
* @return the builder
*/
public LoadBalanceDefinition sticky(Expression correlationExpression) {
- setLoadBalancerType(new LoadBalancerDefinition(new StickyLoadBalancer(correlationExpression)));
+ StickyLoadBalancerDefinition def = new StickyLoadBalancerDefinition();
+ def.setCorrelationExpression(new ExpressionSubElementDefinition(correlationExpression));
+ setLoadBalancerType(def);
return this;
}
@@ -316,7 +301,7 @@ public class LoadBalanceDefinition extends ProcessorDefinition<LoadBalanceDefini
* @return the builder
*/
public LoadBalanceDefinition topic() {
- setLoadBalancerType(new LoadBalancerDefinition(new TopicLoadBalancer()));
+ setLoadBalancerType(new TopicLoadBalancerDefinition());
return this;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/ea6d2fcc/camel-core/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java b/camel-core/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java
index 2724126..c5a99fd 100644
--- a/camel-core/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java
@@ -16,15 +16,11 @@
*/
package org.apache.camel.model;
-import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
-import org.apache.camel.AsyncCallback;
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
import org.apache.camel.processor.loadbalancer.LoadBalancer;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.RouteContext;
@@ -37,7 +33,7 @@ import org.apache.camel.util.ObjectHelper;
@Metadata(label = "eip,routing")
@XmlType(name = "loadBalancer")
@XmlAccessorType(XmlAccessType.FIELD)
-public class LoadBalancerDefinition extends IdentifiedType implements LoadBalancer {
+public class LoadBalancerDefinition extends IdentifiedType {
@XmlTransient
private LoadBalancer loadBalancer;
@XmlTransient
@@ -108,41 +104,6 @@ public class LoadBalancerDefinition extends IdentifiedType implements LoadBalanc
return null;
}
-
- public void addProcessor(Processor processor) {
- ObjectHelper.notNull(loadBalancer, "loadBalancer", this);
- loadBalancer.addProcessor(processor);
- }
-
- public List<Processor> getProcessors() {
- ObjectHelper.notNull(loadBalancer, "loadBalancer", this);
- return loadBalancer.getProcessors();
- }
-
- public void removeProcessor(Processor processor) {
- ObjectHelper.notNull(loadBalancer, "loadBalancer", this);
- loadBalancer.removeProcessor(processor);
- }
-
- public void process(Exchange exchange) throws Exception {
- ObjectHelper.notNull(loadBalancer, "loadBalancer", this);
- loadBalancer.process(exchange);
- }
-
- public boolean process(Exchange exchange, final AsyncCallback callback) {
- ObjectHelper.notNull(loadBalancer, "loadBalancer");
- return loadBalancer.process(exchange, new AsyncCallback() {
- public void done(boolean doneSync) {
- // only handle the async case
- if (doneSync) {
- return;
- } else {
- callback.done(false);
- }
- }
- });
- }
-
@Override
public String toString() {
if (loadBalancer != null) {
http://git-wip-us.apache.org/repos/asf/camel/blob/ea6d2fcc/camel-core/src/main/java/org/apache/camel/model/loadbalancer/CircuitBreakerLoadBalancerDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/loadbalancer/CircuitBreakerLoadBalancerDefinition.java b/camel-core/src/main/java/org/apache/camel/model/loadbalancer/CircuitBreakerLoadBalancerDefinition.java
index acedd6f..54b2a7d 100644
--- a/camel-core/src/main/java/org/apache/camel/model/loadbalancer/CircuitBreakerLoadBalancerDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/loadbalancer/CircuitBreakerLoadBalancerDefinition.java
@@ -23,6 +23,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
import org.apache.camel.model.LoadBalancerDefinition;
import org.apache.camel.processor.loadbalancer.CircuitBreakerLoadBalancer;
@@ -44,6 +45,8 @@ import org.apache.camel.util.ObjectHelper;
@XmlRootElement(name = "circuitBreaker")
@XmlAccessorType(XmlAccessType.FIELD)
public class CircuitBreakerLoadBalancerDefinition extends LoadBalancerDefinition {
+ @XmlTransient
+ private List<Class<?>> exceptionTypes = new ArrayList<Class<?>>();
@XmlElement(name = "exception")
private List<String> exceptions = new ArrayList<String>();
@XmlAttribute
@@ -58,8 +61,10 @@ public class CircuitBreakerLoadBalancerDefinition extends LoadBalancerDefinition
protected LoadBalancer createLoadBalancer(RouteContext routeContext) {
CircuitBreakerLoadBalancer answer;
- if (!exceptions.isEmpty()) {
- List<Class<?>> classes = new ArrayList<Class<?>>();
+ List<Class<?>> classes = new ArrayList<Class<?>>();
+ if (!exceptionTypes.isEmpty()) {
+ classes.addAll(exceptionTypes);
+ } else if (!exceptions.isEmpty()) {
for (String name : exceptions) {
Class<?> type = routeContext.getCamelContext().getClassResolver().resolveClass(name);
if (type == null) {
@@ -70,9 +75,11 @@ public class CircuitBreakerLoadBalancerDefinition extends LoadBalancerDefinition
}
classes.add(type);
}
- answer = new CircuitBreakerLoadBalancer(classes);
- } else {
+ }
+ if (classes.isEmpty()) {
answer = new CircuitBreakerLoadBalancer();
+ } else {
+ answer = new CircuitBreakerLoadBalancer(classes);
}
if (getHalfOpenAfter() != null) {
@@ -118,6 +125,18 @@ public class CircuitBreakerLoadBalancerDefinition extends LoadBalancerDefinition
this.exceptions = exceptions;
}
+ public List<Class<?>> getExceptionTypes() {
+ return exceptionTypes;
+ }
+
+ /**
+ * A list of specific exceptions to monitor.
+ * If no exceptions is configured then all exceptions is monitored
+ */
+ public void setExceptionTypes(List<Class<?>> exceptionTypes) {
+ this.exceptionTypes = exceptionTypes;
+ }
+
@Override
public String toString() {
return "CircuitBreakerLoadBalancer";
http://git-wip-us.apache.org/repos/asf/camel/blob/ea6d2fcc/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java b/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java
index f68db8c..523f794 100644
--- a/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java
@@ -23,12 +23,14 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
import org.apache.camel.model.LoadBalancerDefinition;
import org.apache.camel.processor.loadbalancer.FailOverLoadBalancer;
import org.apache.camel.processor.loadbalancer.LoadBalancer;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.RouteContext;
+import org.apache.camel.util.ObjectHelper;
/**
* Failover load balancer
@@ -42,6 +44,8 @@ import org.apache.camel.spi.RouteContext;
@XmlRootElement(name = "failover")
@XmlAccessorType(XmlAccessType.FIELD)
public class FailoverLoadBalancerDefinition extends LoadBalancerDefinition {
+ @XmlTransient
+ private List<Class<?>> exceptionTypes = new ArrayList<Class<?>>();
@XmlElement(name = "exception")
private List<String> exceptions = new ArrayList<String>();
@XmlAttribute
@@ -56,18 +60,25 @@ public class FailoverLoadBalancerDefinition extends LoadBalancerDefinition {
protected LoadBalancer createLoadBalancer(RouteContext routeContext) {
FailOverLoadBalancer answer;
- if (!exceptions.isEmpty()) {
- List<Class<?>> classes = new ArrayList<Class<?>>();
+ List<Class<?>> classes = new ArrayList<Class<?>>();
+ if (!exceptionTypes.isEmpty()) {
+ classes.addAll(exceptionTypes);
+ } else if (!exceptions.isEmpty()) {
for (String name : exceptions) {
Class<?> type = routeContext.getCamelContext().getClassResolver().resolveClass(name);
if (type == null) {
throw new IllegalArgumentException("Cannot find class: " + name + " in the classpath");
}
+ if (!ObjectHelper.isAssignableFrom(Throwable.class, type)) {
+ throw new IllegalArgumentException("Class is not an instance of Throwable: " + type);
+ }
classes.add(type);
}
- answer = new FailOverLoadBalancer(classes);
- } else {
+ }
+ if (classes.isEmpty()) {
answer = new FailOverLoadBalancer();
+ } else {
+ answer = new FailOverLoadBalancer(classes);
}
if (getMaximumFailoverAttempts() != null) {
@@ -92,6 +103,18 @@ public class FailoverLoadBalancerDefinition extends LoadBalancerDefinition {
this.exceptions = exceptions;
}
+ public List<Class<?>> getExceptionTypes() {
+ return exceptionTypes;
+ }
+
+ /**
+ * A list of specific exceptions to monitor.
+ * If no exceptions is configured then all exceptions is monitored
+ */
+ public void setExceptionTypes(List<Class<?>> exceptionTypes) {
+ this.exceptionTypes = exceptionTypes;
+ }
+
public Boolean getRoundRobin() {
return roundRobin;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/ea6d2fcc/camel-core/src/test/java/org/apache/camel/processor/DoubleLoadBalancerMisconfigurationTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/DoubleLoadBalancerMisconfigurationTest.java b/camel-core/src/test/java/org/apache/camel/processor/DoubleLoadBalancerMisconfigurationTest.java
index 0942969..a23c172 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/DoubleLoadBalancerMisconfigurationTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/DoubleLoadBalancerMisconfigurationTest.java
@@ -41,7 +41,7 @@ public class DoubleLoadBalancerMisconfigurationTest extends ContextTestSupport {
});
fail("Should have thrown an exception");
} catch (IllegalArgumentException e) {
- assertEquals("Loadbalancer already configured to: FailoverLoadBalancer[[]]. Cannot set it to: RoundRobinLoadBalancer", e.getMessage());
+ assertEquals("Loadbalancer already configured to: FailoverLoadBalancer. Cannot set it to: RoundRobinLoadBalancer", e.getMessage());
}
}
@@ -57,7 +57,7 @@ public class DoubleLoadBalancerMisconfigurationTest extends ContextTestSupport {
});
fail("Should have thrown an exception");
} catch (IllegalArgumentException e) {
- assertEquals("Loadbalancer already configured to: FailoverLoadBalancer[[]]. Cannot set it to: RandomLoadBalancer", e.getMessage());
+ assertEquals("Loadbalancer already configured to: FailoverLoadBalancer. Cannot set it to: RandomLoadBalancer", e.getMessage());
}
}
@@ -73,7 +73,7 @@ public class DoubleLoadBalancerMisconfigurationTest extends ContextTestSupport {
});
fail("Should have thrown an exception");
} catch (IllegalArgumentException e) {
- assertEquals("Loadbalancer already configured to: RandomLoadBalancer. Cannot set it to: FailoverLoadBalancer[[]]", e.getMessage());
+ assertEquals("Loadbalancer already configured to: RandomLoadBalancer. Cannot set it to: FailoverLoadBalancer", e.getMessage());
}
}
}