Return-Path: Delivered-To: apmail-activemq-commits-archive@www.apache.org Received: (qmail 81930 invoked from network); 21 Mar 2007 17:49:46 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 21 Mar 2007 17:49:46 -0000 Received: (qmail 93663 invoked by uid 500); 21 Mar 2007 17:49:34 -0000 Delivered-To: apmail-activemq-commits-archive@activemq.apache.org Received: (qmail 93640 invoked by uid 500); 21 Mar 2007 17:49:34 -0000 Mailing-List: contact commits-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list commits@activemq.apache.org Received: (qmail 93480 invoked by uid 99); 21 Mar 2007 17:49:33 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 21 Mar 2007 10:49:33 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 21 Mar 2007 10:46:00 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 345891A9844; Wed, 21 Mar 2007 10:45:40 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r520962 - in /activemq/camel/trunk/camel-core/src: main/java/org/apache/camel/builder/ test/java/org/apache/camel/builder/ Date: Wed, 21 Mar 2007 17:45:39 -0000 To: commits@activemq.apache.org From: jstrachan@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070321174540.345891A9844@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 { private CamelContext context; private ErrorHandlerBuilder errorHandlerBuilder; + private boolean inheritErrorHandler = true; protected BuilderSupport(CamelContext context) { this.context = context; @@ -42,7 +43,8 @@ protected BuilderSupport(BuilderSupport 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 getErrorHandlerBuilder() { if (errorHandlerBuilder == null) { - errorHandlerBuilder = new DeadLetterChannelBuilder(); + errorHandlerBuilder = createErrorHandlerBuilder(); } return errorHandlerBuilder; } + protected ErrorHandlerBuilder createErrorHandlerBuilder() { + if (isInheritErrorHandler()) { + return new DeadLetterChannelBuilder(); + } + else { + return new NoErrorHandlerBuilder(); + } + } + /** * 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 inheritErrorHandler(boolean value) { + setInheritErrorHandler(value); + return this; + } + + // Properties //------------------------------------------------------------------------- public RouteBuilder 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 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 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 builder1 = new RouteBuilder() { + RouteBuilder builder = new RouteBuilder() { public void configure() { errorHandler(loggingErrorHandler("FOO.BAR")); @@ -45,7 +46,6 @@ } }; // END SNIPPET: e1 - RouteBuilder builder = builder1; Map, Processor> routeMap = builder.getRouteMap(); Set, Processor>> routes = routeMap.entrySet(); @@ -62,7 +62,7 @@ public void testOverloadingTheHandlerOnASingleRoute() throws Exception { // START SNIPPET: e2 - RouteBuilder builder1 = new RouteBuilder() { + RouteBuilder builder = new RouteBuilder() { public void configure() { from("queue:a").errorHandler(loggingErrorHandler("FOO.BAR")).to("queue:b"); @@ -71,7 +71,6 @@ } }; // END SNIPPET: e2 - RouteBuilder builder = builder1; Map, Processor> routeMap = builder.getRouteMap(); log.info(routeMap); @@ -102,7 +101,7 @@ public void testConfigureDeadLetterChannel() throws Exception { // START SNIPPET: e3 - RouteBuilder builder1 = new RouteBuilder() { + RouteBuilder builder = new RouteBuilder() { public void configure() { errorHandler(deadLetterChannel("queue:errors")); @@ -110,7 +109,6 @@ } }; // END SNIPPET: e3 - RouteBuilder builder = builder1; Map, Processor> routeMap = builder.getRouteMap(); Set, Processor>> routes = routeMap.entrySet(); @@ -129,7 +127,7 @@ public void testConfigureDeadLetterChannelWithCustomRedeliveryPolicy() throws Exception { // START SNIPPET: e4 - RouteBuilder builder1 = new RouteBuilder() { + RouteBuilder builder = new RouteBuilder() { public void configure() { errorHandler(deadLetterChannel("queue:errors").maximumRedeliveries(2).useExponentialBackOff()); @@ -137,7 +135,6 @@ } }; // END SNIPPET: e4 - RouteBuilder builder = builder1; Map, Processor> routeMap = builder.getRouteMap(); Set, Processor>> 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 builder = new RouteBuilder() { + public void configure() { + inheritErrorHandler(false); + + from("queue:a").errorHandler(loggingErrorHandler("FOO.BAR")).filter(body().isInstanceOf(String.class)).to("queue:b"); + } + }; + // END SNIPPET: e5 + Map, Processor> routeMap = builder.getRouteMap(); + Set, Processor>> routes = routeMap.entrySet(); + assertEquals("Number routes created", 1, routes.size()); + for (Map.Entry, Processor> route : routes) { + Endpoint 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()); + } + } }