You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2009/02/03 11:17:34 UTC
svn commit: r740264 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/model/
camel-core/src/main/java/org/apache/camel/model/loadbalancer/
camel-core/src/main/java/org/apache/camel/processor/loadbalancer/
camel-core/src/main/resources/org/ap...
Author: ningjiang
Date: Tue Feb 3 10:17:33 2009
New Revision: 740264
URL: http://svn.apache.org/viewvc?rev=740264&view=rev
Log:
CAMEL-1142 FailOverLoadBalancer
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java (with props)
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java (with props)
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java (with props)
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java (with props)
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml (with props)
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/LoadBalanceType.java
camel/trunk/camel-core/src/main/resources/org/apache/camel/model/loadbalancer/jaxb.index
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/LoadBalanceType.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/LoadBalanceType.java?rev=740264&r1=740263&r2=740264&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/LoadBalanceType.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/LoadBalanceType.java Tue Feb 3 10:17:33 2009
@@ -30,12 +30,14 @@
import org.apache.camel.Expression;
import org.apache.camel.Processor;
+import org.apache.camel.model.loadbalancer.FailOverLoadBalanceStrategy;
import org.apache.camel.model.loadbalancer.LoadBalancerType;
import org.apache.camel.model.loadbalancer.RandomLoadBalanceStrategy;
import org.apache.camel.model.loadbalancer.RoundRobinLoadBalanceStrategy;
import org.apache.camel.model.loadbalancer.StickyLoadBalanceStrategy;
import org.apache.camel.model.loadbalancer.TopicLoadBalanceStrategy;
import org.apache.camel.processor.SendProcessor;
+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;
@@ -54,6 +56,7 @@
private String ref;
@XmlElements({
+ @XmlElement(required = false, name = "failOver", type = FailOverLoadBalanceStrategy.class),
@XmlElement(required = false, name = "roundRobin", type = RoundRobinLoadBalanceStrategy.class),
@XmlElement(required = false, name = "random", type = RandomLoadBalanceStrategy.class),
@XmlElement(required = false, name = "sticky", type = StickyLoadBalanceStrategy.class),
@@ -145,6 +148,27 @@
loadBalancerType = new LoadBalancerType(loadBalancer);
return this;
}
+
+ /**
+ * Uses fail over load balancer
+ *
+ * @retrun the builder
+ */
+ public LoadBalanceType failOver() {
+ loadBalancerType = new LoadBalancerType(new FailOverLoadBalancer());
+ return this;
+ }
+
+ /**
+ * Uses fail over load balancer
+ *
+ * @param the exception Class which we want to catch
+ * @retrun the builder
+ */
+ public LoadBalanceType failOver(Class throwable) {
+ loadBalancerType = new LoadBalancerType(new FailOverLoadBalancer(throwable));
+ return this;
+ }
/**
* Uses round robin load balancer
Added: camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java?rev=740264&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java Tue Feb 3 10:17:33 2009
@@ -0,0 +1,58 @@
+/**
+ * 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.model.loadbalancer;
+
+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 javax.xml.bind.annotation.XmlTransient;
+
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.processor.loadbalancer.LoadBalancer;
+import org.apache.camel.spi.RouteContext;
+import org.apache.camel.util.ObjectHelper;
+
+@XmlRootElement(name = "failOver")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class FailOverLoadBalanceStrategy extends LoadBalancerType {
+ @XmlAttribute
+ private String failedException;
+
+ @Override
+ protected LoadBalancer createLoadBalancer(RouteContext routeContext) {
+ if (ObjectHelper.isNotEmpty(failedException)) {
+ Class failExceptionClazz = ObjectHelper.loadClass(failedException);
+ if (failExceptionClazz == null) {
+ throw new RuntimeCamelException("Can't find the failException " + failedException + " for the FailOverLoadBalancer");
+ }
+ return new org.apache.camel.processor.loadbalancer.FailOverLoadBalancer(failExceptionClazz);
+ } else {
+ return new org.apache.camel.processor.loadbalancer.FailOverLoadBalancer();
+ }
+ }
+
+ public void setFailedException(String exceptionName) {
+ failedException = exceptionName;
+ }
+
+ public String getFailedException() {
+ return failedException;
+ }
+
+
+}
Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java?rev=740264&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java Tue Feb 3 10:17:33 2009
@@ -0,0 +1,130 @@
+/**
+ * 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.processor.loadbalancer;
+
+import java.util.List;
+
+import org.apache.camel.AsyncCallback;
+import org.apache.camel.AsyncProcessor;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * This FailOverLoadBalancer will choose other processor when the exception happens
+ */
+public class FailOverLoadBalancer extends LoadBalancerSupport {
+ private final Class failException;
+ public FailOverLoadBalancer(Class throwable) {
+ if (ObjectHelper.isAssignableFrom(Throwable.class, throwable)) {
+ failException = throwable;
+ } else {
+ throw new RuntimeCamelException("The FailOverLoadBalancer construction parameter should be the child of Throwable");
+ }
+ }
+
+ public FailOverLoadBalancer() {
+ this(Throwable.class);
+ }
+
+ protected boolean isCheckedException(Exchange exchange) {
+ if (exchange.getException() != null) {
+ if (failException.isAssignableFrom(exchange.getException().getClass())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void processExchange(Processor processor, Exchange exchange) {
+ if (processor == null) {
+ throw new IllegalStateException("No processors could be chosen to process " + exchange);
+ }
+ try {
+ processor.process(exchange);
+ } catch (Throwable error) {
+ exchange.setException(error);
+ }
+ }
+
+ public void process(Exchange exchange) throws Exception {
+ List<Processor> list = getProcessors();
+ if (list.isEmpty()) {
+ throw new IllegalStateException("No processors available to process " + exchange);
+ }
+ int index = 0;
+ Processor processor = list.get(index);
+ processExchange(processor, exchange);
+ while (isCheckedException(exchange)) {
+ exchange.setException(null);
+ index++;
+ if (index < list.size()) {
+ processor = list.get(index);
+ processExchange(processor, exchange);
+ } else {
+ break;
+ }
+ }
+ }
+
+ public boolean process(Exchange exchange, final AsyncCallback callback) {
+ return processExchange(0, exchange, callback);
+ }
+
+ public boolean processExchange(final int index, final Exchange exchange, final AsyncCallback callback) {
+ boolean sync = false;
+ List<Processor> list = getProcessors();
+ if (list.isEmpty()) {
+ throw new IllegalStateException("No processors available to process " + exchange);
+ }
+ Processor processor = list.get(index);
+ if (processor == null) {
+ throw new IllegalStateException("No processors could be chosen to process " + exchange);
+ } else {
+ if (processor instanceof AsyncProcessor) {
+ AsyncProcessor asyncProcessor = (AsyncProcessor)processor;
+ sync = asyncProcessor.process(exchange, new AsyncCallback() {
+ public void done(boolean doSync) {
+ // check the exchange and call the FailOverProcessor
+ if (isCheckedException(exchange) && index < getProcessors().size() - 1) {
+ exchange.setException(null);
+ processExchange(index + 1, exchange, callback);
+ } else {
+ callback.done(doSync);
+ }
+ }
+ });
+
+ } else {
+ try {
+ processor.process(exchange);
+ } catch (Exception ex) {
+ exchange.setException(ex);
+ }
+ if (isCheckedException(exchange) && index < getProcessors().size() - 1) {
+ exchange.setException(null);
+ processExchange(index + 1, exchange, callback);
+ }
+ sync = true;
+ callback.done(true);
+ }
+ }
+ return sync;
+ }
+
+}
Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: camel/trunk/camel-core/src/main/resources/org/apache/camel/model/loadbalancer/jaxb.index
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/resources/org/apache/camel/model/loadbalancer/jaxb.index?rev=740264&r1=740263&r2=740264&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/resources/org/apache/camel/model/loadbalancer/jaxb.index (original)
+++ camel/trunk/camel-core/src/main/resources/org/apache/camel/model/loadbalancer/jaxb.index Tue Feb 3 10:17:33 2009
@@ -15,6 +15,7 @@
## limitations under the License.
## ------------------------------------------------------------------------
LoadBalancerType
+FailOverLoadBalanceStrategy
RandomLoadBalanceStrategy
RoundRobinLoadBalanceStrategy
StickyLoadBalanceStrategy
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java?rev=740264&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java Tue Feb 3 10:17:33 2009
@@ -0,0 +1,111 @@
+/**
+ * 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.processor;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.builder.NoErrorHandlerBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+
+import static org.apache.camel.component.mock.MockEndpoint.expectsMessageCount;
+
+public class FailOverLoadBalanceTest extends ContextTestSupport {
+
+ protected MockEndpoint x;
+ protected MockEndpoint y;
+ protected MockEndpoint z;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ x = getMockEndpoint("mock:x");
+ y = getMockEndpoint("mock:y");
+ z = getMockEndpoint("mock:z");
+ }
+
+ public static class MyException extends Exception {
+
+ }
+
+ public static class MyAnotherException extends Exception {
+
+ }
+
+ public static class MyExceptionProcessor implements Processor {
+ public void process(Exchange exchange) throws Exception {
+ throw new MyException();
+ }
+ }
+
+ public static class MyAnotherExceptionProcessor implements Processor {
+ public void process(Exchange exchange) throws Exception {
+ throw new MyAnotherException();
+ }
+ }
+
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ public void configure() {
+ // First we need to turn off the default error handler
+ errorHandler(new NoErrorHandlerBuilder());
+
+ from("direct:exception").loadBalance()
+ // catch all the exception here
+ .failOver().to("direct:x", "direct:y", "direct:z");
+
+ from("direct:customerException").loadBalance()
+ .failOver(MyException.class).to("direct:x", "direct:y", "direct:z");
+
+ from("direct:x").process(new MyExceptionProcessor()).to("mock:x");
+
+ from("direct:y").process(new MyAnotherExceptionProcessor()).to("mock:y");
+
+ from("direct:z").to("mock:z");
+
+ }
+ };
+ }
+
+ public void testThrowable() throws Exception {
+ String body = "<one/>";
+ expectsMessageCount(0, x, y);
+ z.expectedBodiesReceived(body);
+ sendMessage("direct:exception", "bar", body);
+ assertMockEndpointsSatisfied();
+ }
+
+ public void testMyException() throws Exception {
+ String body = "<two/>";
+ expectsMessageCount(0, x, y, z);
+ try {
+ sendMessage("direct:customerException", "bar", body);
+ fail("There should get the MyAnotherException");
+ } catch (RuntimeCamelException ex) {
+ // expect the exception here
+ assertTrue("The cause should be MyAnotherException", ex.getCause() instanceof MyAnotherException);
+ }
+ assertMockEndpointsSatisfied();
+ }
+
+ protected void sendMessage(final String endpoint, final Object headerValue, final Object body) throws Exception {
+ template.sendBodyAndHeader(endpoint, body, "foo", headerValue);
+ }
+}
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java?rev=740264&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java Tue Feb 3 10:17:33 2009
@@ -0,0 +1,31 @@
+/**
+ * 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.spring.processor;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.processor.FailOverLoadBalanceTest;
+
+import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
+public class SpringFailOverLoadBalanceTest extends FailOverLoadBalanceTest {
+
+ protected CamelContext createCamelContext() throws Exception {
+ return createSpringCamelContext(this, "org/apache/camel/spring/processor/failOverLoadBalance.xml");
+ }
+
+}
Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml?rev=740264&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml (added)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml Tue Feb 3 10:17:33 2009
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
+ ">
+
+
+ <!-- START SNIPPET: example -->
+
+ <camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring">
+ <route errorHandlerRef="noErrorHandler">
+ <from uri="direct:exception"/>
+ <loadBalance>
+ <failOver/>
+ <to uri="direct:x"/>
+ <to uri="direct:y"/>
+ <to uri="direct:z"/>
+ </loadBalance>
+ </route>
+ <route errorHandlerRef="noErrorHandler">
+ <from uri="direct:customerException"/>
+ <loadBalance>
+ <failOver failedException="org.apache.camel.processor.FailOverLoadBalanceTest$MyException"/>
+ <to uri="direct:x"/>
+ <to uri="direct:y"/>
+ <to uri="direct:z"/>
+ </loadBalance>
+ </route>
+ <route errorHandlerRef="noErrorHandler">
+ <from uri="direct:x"/>
+ <process ref="myExceptionProcessor"/>
+ <to uri="mock:x"/>
+ </route>
+ <route errorHandlerRef="noErrorHandler">
+ <from uri="direct:y"/>
+ <process ref="myAnotherExceptionProcessor"/>
+ <to uri="mock:y"/>
+ </route>
+ <route errorHandlerRef="noErrorHandler">
+ <from uri="direct:z"/>
+ <to uri="mock:z"/>
+ </route>
+ </camelContext>
+
+ <bean id="noErrorHandler" class="org.apache.camel.builder.NoErrorHandlerBuilder"/>
+ <bean id="myExceptionProcessor" class="org.apache.camel.processor.FailOverLoadBalanceTest$MyExceptionProcessor"/>
+ <bean id="myAnotherExceptionProcessor" class="org.apache.camel.processor.FailOverLoadBalanceTest$MyAnotherExceptionProcessor"/>
+
+ <!-- END SNIPPET: example -->
+
+</beans>
Propchange: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml