Author: ningjiang Date: Fri Dec 2 12:38:22 2011 New Revision: 1209449 URL: http://svn.apache.org/viewvc?rev=1209449&view=rev Log: Merged revisions 1209401 via svnmerge from https://svn.apache.org/repos/asf/camel/trunk
........ r1209401 | ningjiang | 2011-12-02 18:56:36 +0800 (Fri, 02 Dec 2011) | 1 line CAMEL-4724 reset the camel-context of the exchange on the seda producer ........ Modified: camel/branches/camel-2.8.x/ (props changed) camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/vm/AbstractVmTestSupport.java camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/vm/VmDifferentOptionsOnConsumerAndProducerTest.java Propchange: camel/branches/camel-2.8.x/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Dec 2 12:38:22 2011 @@ -1 +1 @@ -/camel/trunk:1202148,1202167,1202204-1202206,1202215,1202223,1202659,1202685,1203879,1203978,1204338,1205124,1205372,1205412,1205429,1205431,1205713,1206116,1206414,1207743,1207784,1208301,1208930,1208964-1208965,1209006-1209007,1209382 +/camel/trunk:1202148,1202167,1202204-1202206,1202215,1202223,1202659,1202685,1203879,1203978,1204338,1205124,1205372,1205412,1205429,1205431,1205713,1206116,1206414,1207743,1207784,1208301,1208930,1208964-1208965,1209006-1209007,1209382,1209401 Propchange: camel/branches/camel-2.8.x/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java?rev=1209449&r1=1209448&r2=1209449&view=diff ============================================================================== --- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java (original) +++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java Fri Dec 2 12:38:22 2011 @@ -37,6 +37,7 @@ import org.apache.camel.processor.Multic import org.apache.camel.spi.ExceptionHandler; import org.apache.camel.spi.ShutdownAware; import org.apache.camel.util.AsyncProcessorHelper; +import org.apache.camel.util.ExchangeHelper; import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -153,10 +154,20 @@ public class SedaConsumer extends Servic exchange = queue.poll(1000, TimeUnit.MILLISECONDS); if (exchange != null) { try { - sendToConsumers(exchange); - + // send a new copied exchange with new camel context + Exchange newExchange = ExchangeHelper.copyExchangeAndSetCamelContext(exchange, endpoint.getCamelContext()); + // set the fromEndpoint + newExchange.setFromEndpoint(endpoint); + sendToConsumers(newExchange); + // copy the message back + if (newExchange.hasOut()) { + exchange.setOut(newExchange.getOut().copy()); + } else { + exchange.setIn(newExchange.getIn()); + } // log exception if an exception occurred and was not handled - if (exchange.getException() != null) { + if (newExchange.getException() != null) { + exchange.setException(newExchange.getException()); getExceptionHandler().handleException("Error processing exchange", exchange, exchange.getException()); } } catch (Exception e) { Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java?rev=1209449&r1=1209448&r2=1209449&view=diff ============================================================================== --- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java (original) +++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java Fri Dec 2 12:38:22 2011 @@ -18,6 +18,7 @@ package org.apache.camel.util; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; @@ -678,4 +679,27 @@ public final class ExchangeHelper { exchange.setOut(null); } } + + public static Exchange copyExchangeAndSetCamelContext(Exchange exchange, CamelContext context) { + DefaultExchange answer = new DefaultExchange(context, exchange.getPattern()); + if (exchange.hasProperties()) { + answer.setProperties(safeCopy(exchange.getProperties())); + } + // Need to hand over the completion for async invocation + exchange.handoverCompletions(answer); + answer.setIn(exchange.getIn().copy()); + if (exchange.hasOut()) { + answer.setOut(exchange.getOut().copy()); + } + answer.setException(exchange.getException()); + return answer; + + } + + private static Map<String, Object> safeCopy(Map<String, Object> properties) { + if (properties == null) { + return null; + } + return new ConcurrentHashMap<String, Object>(properties); + } } Modified: camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/vm/AbstractVmTestSupport.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/vm/AbstractVmTestSupport.java?rev=1209449&r1=1209448&r2=1209449&view=diff ============================================================================== --- camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/vm/AbstractVmTestSupport.java (original) +++ camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/vm/AbstractVmTestSupport.java Fri Dec 2 12:38:22 2011 @@ -39,6 +39,7 @@ public abstract class AbstractVmTestSupp super.setUp(); context2 = new DefaultCamelContext(); + RouteBuilder routeBuilder = createRouteBuilderForSecondContext(); if (routeBuilder != null) { context2.addRoutes(routeBuilder); Modified: camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/vm/VmDifferentOptionsOnConsumerAndProducerTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/vm/VmDifferentOptionsOnConsumerAndProducerTest.java?rev=1209449&r1=1209448&r2=1209449&view=diff ============================================================================== --- camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/vm/VmDifferentOptionsOnConsumerAndProducerTest.java (original) +++ camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/vm/VmDifferentOptionsOnConsumerAndProducerTest.java Fri Dec 2 12:38:22 2011 @@ -20,6 +20,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.ContextTestSupport; import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.util.ServiceHelper; import org.junit.After; @@ -63,11 +64,16 @@ public class VmDifferentOptionsOnConsume @Test public void testSendToVm() throws Exception { - getMockEndpoint("mock:result").expectedBodiesReceived("Hello World"); + MockEndpoint result = getMockEndpoint("mock:result"); + result.expectedBodiesReceived("Hello World"); + template2.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); + + // check the camel context of the exchange + assertEquals("Get a wrong context. ", context, result.getExchanges().get(0).getContext()); } @Override @@ -80,4 +86,4 @@ public class VmDifferentOptionsOnConsume } }; } -} \ No newline at end of file +}