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) {