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 2012/06/16 08:58:56 UTC

svn commit: r1350874 - in /camel/trunk/camel-core/src/main/java/org/apache/camel: component/directvm/DirectVmComponent.java component/directvm/DirectVmProcessor.java util/ExchangeHelper.java

Author: davsclaus
Date: Sat Jun 16 06:58:56 2012
New Revision: 1350874

URL: http://svn.apache.org/viewvc?rev=1350874&view=rev
Log:
CAMEL-5370: Added direct-vm component to act as synchronous direct calls between multiple camel contexts in the same JVM (eg like direct + vm together). Can be used to support transactions spanning multiple camel contextes / bundles.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmComponent.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmComponent.java?rev=1350874&r1=1350873&r2=1350874&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmComponent.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmComponent.java Sat Jun 16 06:58:56 2012
@@ -33,7 +33,7 @@ public class DirectVmComponent extends D
     private static final AtomicInteger START_COUNTER = new AtomicInteger();
 
     // must keep a map of consumers on the component to ensure endpoints can lookup old consumers
-    // later in case the DirectEndpoint was re-created due the old was evicted from the endpoints LRUCache
+    // later in case the DirectVmEndpoint was re-created due the old was evicted from the endpoints LRUCache
     // on DefaultCamelContext
     private static final ConcurrentMap<String, DirectVmConsumer> CONSUMERS = new ConcurrentHashMap<String, DirectVmConsumer>();
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java?rev=1350874&r1=1350873&r2=1350874&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java Sat Jun 16 06:58:56 2012
@@ -52,8 +52,8 @@ public final class DirectVmProcessor ext
      * @return the exchange to process by this consumer.
      */
     protected Exchange prepareExchange(Exchange exchange) {
-        // send a new copied exchange with new camel context
-        Exchange newExchange = ExchangeHelper.copyExchangeAndSetCamelContext(exchange, endpoint.getCamelContext());
+        // send a new copied exchange with new camel context (do not handover completions)
+        Exchange newExchange = ExchangeHelper.copyExchangeAndSetCamelContext(exchange, endpoint.getCamelContext(), false);
         // set the from endpoint
         newExchange.setFromEndpoint(endpoint);
         return newExchange;

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java?rev=1350874&r1=1350873&r2=1350874&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java Sat Jun 16 06:58:56 2012
@@ -784,19 +784,32 @@ public final class ExchangeHelper {
      * @return a copy with the given camel context
      */
     public static Exchange copyExchangeAndSetCamelContext(Exchange exchange, CamelContext context) {
+        return copyExchangeAndSetCamelContext(exchange, context, true);
+    }
+
+    /**
+     * Copies the exchange but the copy will be tied to the given context
+     *
+     * @param exchange  the source exchange
+     * @param context   the camel context
+     * @param handover  whether to handover on completions from the source to the copy
+     * @return a copy with the given camel context
+     */
+    public static Exchange copyExchangeAndSetCamelContext(Exchange exchange, CamelContext context, boolean handover) {
         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);
+        if (handover) {
+            // 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) {