You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/03/21 18:45:39 UTC
svn commit: r520962 - in /activemq/camel/trunk/camel-core/src:
main/java/org/apache/camel/builder/ test/java/org/apache/camel/builder/
Author: jstrachan
Date: Wed Mar 21 10:45:38 2007
New Revision: 520962
URL: http://svn.apache.org/viewvc?view=rev&rev=520962
Log:
added the ability to enable/disable the inheritence of error handlers so that we could, say, use a single Dead Letter Channel on the top most Processor in a route
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java?view=diff&rev=520962&r1=520961&r2=520962
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java Wed Mar 21 10:45:38 2007
@@ -35,6 +35,7 @@
public abstract class BuilderSupport<E extends Exchange> {
private CamelContext context;
private ErrorHandlerBuilder<E> errorHandlerBuilder;
+ private boolean inheritErrorHandler = true;
protected BuilderSupport(CamelContext context) {
this.context = context;
@@ -42,7 +43,8 @@
protected BuilderSupport(BuilderSupport<E> parent) {
this.context = parent.getContext();
- if (parent.errorHandlerBuilder != null) {
+ this.inheritErrorHandler = parent.inheritErrorHandler;
+ if (inheritErrorHandler && parent.errorHandlerBuilder != null) {
this.errorHandlerBuilder = parent.errorHandlerBuilder.copy();
}
}
@@ -181,11 +183,20 @@
public ErrorHandlerBuilder<E> getErrorHandlerBuilder() {
if (errorHandlerBuilder == null) {
- errorHandlerBuilder = new DeadLetterChannelBuilder<E>();
+ errorHandlerBuilder = createErrorHandlerBuilder();
}
return errorHandlerBuilder;
}
+ protected ErrorHandlerBuilder<E> createErrorHandlerBuilder() {
+ if (isInheritErrorHandler()) {
+ return new DeadLetterChannelBuilder<E>();
+ }
+ else {
+ return new NoErrorHandlerBuilder<E>();
+ }
+ }
+
/**
* Sets the error handler to use with processors created by this builder
*/
@@ -193,4 +204,11 @@
this.errorHandlerBuilder = errorHandlerBuilder;
}
+ public boolean isInheritErrorHandler() {
+ return inheritErrorHandler;
+ }
+
+ public void setInheritErrorHandler(boolean inheritErrorHandler) {
+ this.inheritErrorHandler = inheritErrorHandler;
+ }
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java?view=diff&rev=520962&r1=520961&r2=520962
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java Wed Mar 21 10:45:38 2007
@@ -179,6 +179,18 @@
return this;
}
+ /**
+ * Configures whether or not the error handler is inherited by every processing node (or just the top most one)
+ *
+ * @param value the falg as to whether error handlers should be inherited or not
+ * @return the current builder
+ */
+ public FromBuilder<E> inheritErrorHandler(boolean value) {
+ setInheritErrorHandler(value);
+ return this;
+ }
+
+
// Properties
//-------------------------------------------------------------------------
public RouteBuilder<E> getBuilder() {
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java?view=diff&rev=520962&r1=520961&r2=520962
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java Wed Mar 21 10:45:38 2007
@@ -21,6 +21,7 @@
import org.apache.camel.EndpointResolver;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
+import org.apache.camel.processor.DeadLetterChannel;
import org.apache.camel.impl.DefaultCamelContext;
import java.util.ArrayList;
@@ -79,6 +80,17 @@
*/
public RouteBuilder<E> errorHandler(ErrorHandlerBuilder errorHandlerBuilder) {
setErrorHandlerBuilder(errorHandlerBuilder);
+ return this;
+ }
+
+ /**
+ * Configures whether or not the error handler is inherited by every processing node (or just the top most one)
+ *
+ * @param value the falg as to whether error handlers should be inherited or not
+ * @return the current builder
+ */
+ public RouteBuilder<E> inheritErrorHandler(boolean value) {
+ setInheritErrorHandler(value);
return this;
}
Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java?view=diff&rev=520962&r1=520961&r2=520962
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java Wed Mar 21 10:45:38 2007
@@ -17,15 +17,15 @@
*/
package org.apache.camel.builder;
-import junit.framework.TestCase;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.TestSupport;
-import org.apache.camel.processor.LoggingErrorHandler;
-import org.apache.camel.processor.SendProcessor;
import org.apache.camel.processor.DeadLetterChannel;
+import org.apache.camel.processor.FilterProcessor;
+import org.apache.camel.processor.LoggingErrorHandler;
import org.apache.camel.processor.RedeliveryPolicy;
+import org.apache.camel.processor.SendProcessor;
import java.util.Map;
import java.util.Set;
@@ -34,10 +34,11 @@
* @version $Revision$
*/
public class ErrorHandlerTest extends TestSupport {
+ /*
public void testOverloadingTheDefaultErrorHandler() throws Exception {
// START SNIPPET: e1
- RouteBuilder<Exchange> builder1 = new RouteBuilder<Exchange>() {
+ RouteBuilder<Exchange> builder = new RouteBuilder<Exchange>() {
public void configure() {
errorHandler(loggingErrorHandler("FOO.BAR"));
@@ -45,7 +46,6 @@
}
};
// END SNIPPET: e1
- RouteBuilder<Exchange> builder = builder1;
Map<Endpoint<Exchange>, Processor<Exchange>> routeMap = builder.getRouteMap();
Set<Map.Entry<Endpoint<Exchange>, Processor<Exchange>>> routes = routeMap.entrySet();
@@ -62,7 +62,7 @@
public void testOverloadingTheHandlerOnASingleRoute() throws Exception {
// START SNIPPET: e2
- RouteBuilder<Exchange> builder1 = new RouteBuilder<Exchange>() {
+ RouteBuilder<Exchange> builder = new RouteBuilder<Exchange>() {
public void configure() {
from("queue:a").errorHandler(loggingErrorHandler("FOO.BAR")).to("queue:b");
@@ -71,7 +71,6 @@
}
};
// END SNIPPET: e2
- RouteBuilder<Exchange> builder = builder1;
Map<Endpoint<Exchange>, Processor<Exchange>> routeMap = builder.getRouteMap();
log.info(routeMap);
@@ -102,7 +101,7 @@
public void testConfigureDeadLetterChannel() throws Exception {
// START SNIPPET: e3
- RouteBuilder<Exchange> builder1 = new RouteBuilder<Exchange>() {
+ RouteBuilder<Exchange> builder = new RouteBuilder<Exchange>() {
public void configure() {
errorHandler(deadLetterChannel("queue:errors"));
@@ -110,7 +109,6 @@
}
};
// END SNIPPET: e3
- RouteBuilder<Exchange> builder = builder1;
Map<Endpoint<Exchange>, Processor<Exchange>> routeMap = builder.getRouteMap();
Set<Map.Entry<Endpoint<Exchange>, Processor<Exchange>>> routes = routeMap.entrySet();
@@ -129,7 +127,7 @@
public void testConfigureDeadLetterChannelWithCustomRedeliveryPolicy() throws Exception {
// START SNIPPET: e4
- RouteBuilder<Exchange> builder1 = new RouteBuilder<Exchange>() {
+ RouteBuilder<Exchange> builder = new RouteBuilder<Exchange>() {
public void configure() {
errorHandler(deadLetterChannel("queue:errors").maximumRedeliveries(2).useExponentialBackOff());
@@ -137,7 +135,6 @@
}
};
// END SNIPPET: e4
- RouteBuilder<Exchange> builder = builder1;
Map<Endpoint<Exchange>, Processor<Exchange>> routeMap = builder.getRouteMap();
Set<Map.Entry<Endpoint<Exchange>, Processor<Exchange>>> routes = routeMap.entrySet();
@@ -154,6 +151,31 @@
assertEquals("getMaximumRedeliveries()", 2, redeliveryPolicy.getMaximumRedeliveries());
assertEquals("isUseExponentialBackOff()", true, redeliveryPolicy.isUseExponentialBackOff());
}
- }
+ } */
+
+ public void testDisablingInheritenceOfErrorHandlers() throws Exception {
+
+ // START SNIPPET: e5
+ RouteBuilder<Exchange> builder = new RouteBuilder<Exchange>() {
+ public void configure() {
+ inheritErrorHandler(false);
+
+ from("queue:a").errorHandler(loggingErrorHandler("FOO.BAR")).filter(body().isInstanceOf(String.class)).to("queue:b");
+ }
+ };
+ // END SNIPPET: e5
+ Map<Endpoint<Exchange>, Processor<Exchange>> routeMap = builder.getRouteMap();
+ Set<Map.Entry<Endpoint<Exchange>, Processor<Exchange>>> routes = routeMap.entrySet();
+ assertEquals("Number routes created", 1, routes.size());
+ for (Map.Entry<Endpoint<Exchange>, Processor<Exchange>> route : routes) {
+ Endpoint<Exchange> key = route.getKey();
+ assertEquals("From endpoint", "queue:a", key.getEndpointUri());
+ Processor processor = route.getValue();
+
+ LoggingErrorHandler loggingProcessor = assertIsInstanceOf(LoggingErrorHandler.class, processor);
+ FilterProcessor filterProcessor = assertIsInstanceOf(FilterProcessor.class, loggingProcessor.getOutput());
+ SendProcessor sendProcessor = assertIsInstanceOf(SendProcessor.class, filterProcessor.getProcessor());
+ }
+ }
}