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 2010/07/19 12:18:36 UTC

svn commit: r965414 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/builder/ camel-core/src/test/java/org/apache/camel/processor/ components/camel-jms/src/test/java/org/apache/camel/component/jms/

Author: davsclaus
Date: Mon Jul 19 10:18:36 2010
New Revision: 965414

URL: http://svn.apache.org/viewvc?rev=965414&view=rev
Log:
CAMEL-2963: Dead letter channel now forces MEP as InOnly when moving message to the DLQ.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java
    camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterChannelInOutTest.java
    camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerDisableReplyToTest.java
    camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExceptionTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java?rev=965414&r1=965413&r2=965414&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java Mon Jul 19 10:18:36 2010
@@ -17,6 +17,7 @@
 package org.apache.camel.builder;
 
 import org.apache.camel.Endpoint;
+import org.apache.camel.ExchangePattern;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.Predicate;
@@ -70,7 +71,8 @@ public class DeadLetterChannelBuilder ex
 
     public Processor getFailureProcessor() {
         if (failureProcessor == null) {
-            failureProcessor = new SendProcessor(deadLetter);
+            // force MEP to be InOnly so when sending to DLQ we would not expect a reply if the MEP was InOut
+            failureProcessor = new SendProcessor(deadLetter, ExchangePattern.InOnly);
         }
         return failureProcessor;
     }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java?rev=965414&r1=965413&r2=965414&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java Mon Jul 19 10:18:36 2010
@@ -19,6 +19,7 @@ package org.apache.camel.processor;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
@@ -63,6 +64,33 @@ public class DeadLetterChannelTest exten
         assertNotNull("Should have been a cause property", t);
         assertTrue(t instanceof RuntimeException);
         assertEquals("Failed to process due to attempt: 3 being less than: 5", t.getMessage());
+
+        // must be InOnly
+        Exchange dead = deadEndpoint.getReceivedExchanges().get(0);
+        assertEquals(ExchangePattern.InOnly, dead.getPattern());
+    }
+
+    public void testLotsOfAttemptsFailInOut() throws Exception {
+        failUntilAttempt = 5;
+
+        deadEndpoint.expectedBodiesReceived(body);
+        // no traces of redelivery as the dead letter channel will handle the exception when moving the DLQ
+        deadEndpoint.message(0).header(Exchange.REDELIVERED).isNull();
+        deadEndpoint.message(0).header(Exchange.REDELIVERY_COUNTER).isNull();
+        successEndpoint.expectedMessageCount(0);
+
+        template.requestBody("direct:start", body);
+
+        assertMockEndpointsSatisfied();
+
+        Throwable t = deadEndpoint.getExchanges().get(0).getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
+        assertNotNull("Should have been a cause property", t);
+        assertTrue(t instanceof RuntimeException);
+        assertEquals("Failed to process due to attempt: 3 being less than: 5", t.getMessage());
+
+        // must be InOnly
+        Exchange dead = deadEndpoint.getReceivedExchanges().get(0);
+        assertEquals(ExchangePattern.InOnly, dead.getPattern());
     }
 
     @Override

Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterChannelInOutTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterChannelInOutTest.java?rev=965414&r1=965413&r2=965414&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterChannelInOutTest.java (original)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterChannelInOutTest.java Mon Jul 19 10:18:36 2010
@@ -34,6 +34,12 @@ import static org.apache.camel.component
  */
 public class JmsDeadLetterChannelInOutTest extends CamelTestSupport {
 
+    @Override
+    public void setUp() throws Exception {
+        deleteDirectory("activemq-data");
+        super.setUp();
+    }
+
     @Test
     public void testJmsDLCInOut() throws Exception {
         Exchange out = template.send("direct:start", new Processor() {
@@ -66,7 +72,7 @@ public class JmsDeadLetterChannelInOutTe
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                errorHandler(deadLetterChannel("activemq:queue:error?disableReplyTo=true"));
+                errorHandler(deadLetterChannel("activemq:queue:error"));
 
                 from("direct:start").throwException(new IllegalArgumentException("Damn"));
             }

Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerDisableReplyToTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerDisableReplyToTest.java?rev=965414&r1=965413&r2=965414&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerDisableReplyToTest.java (original)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerDisableReplyToTest.java Mon Jul 19 10:18:36 2010
@@ -30,6 +30,12 @@ import static org.apache.camel.component
  */
 public class JmsProducerDisableReplyToTest extends CamelTestSupport {
 
+    @Override
+    public void setUp() throws Exception {
+        deleteDirectory("activemq-data");
+        super.setUp();
+    }
+
     @Test
     public void testProducerDisableReplyTo() throws Exception {
         String url = "activemq:queue:foo?disableReplyTo=true";

Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExceptionTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExceptionTest.java?rev=965414&r1=965413&r2=965414&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExceptionTest.java (original)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExceptionTest.java Mon Jul 19 10:18:36 2010
@@ -24,10 +24,10 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.apache.camel.component.jms.JmsComponent.jmsComponentClientAcknowledge;
 
 /**
@@ -58,10 +58,6 @@ public class JmsTransferExceptionTest ex
 
     @Test
     public void testTransferExeption() throws Exception {
-        // should fail as we thrown an exception
-        MockEndpoint dead = getMockEndpoint("mock:dead");
-        dead.expectedMessageCount(1);
-
         // we send something that causes a remote exception
         // then we expect our producer template to thrown
         // an exception with the remote exception as cause
@@ -73,8 +69,6 @@ public class JmsTransferExceptionTest ex
             assertNotNull("Should contain a remote stacktrace", e.getCause().getStackTrace());
         }
 
-        assertMockEndpointsSatisfied();
-
         // we still try redeliver
         assertEquals(3, counter);
     }
@@ -93,7 +87,7 @@ public class JmsTransferExceptionTest ex
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                errorHandler(deadLetterChannel("mock:dead").maximumRedeliveries(2).redeliveryDelay(0).logStackTrace(false).handled(false));
+                errorHandler(defaultErrorHandler().maximumRedeliveries(2));
 
                 from(getUri())
                         .process(new Processor() {