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/30 19:28:58 UTC
svn commit: r1355781 - in /camel/branches/camel-2.8.x: ./
camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java
camel-core/src/test/java/org/apache/camel/issues/ThreadsDoTryCatchInterceptSendToAllEndpointIssueTest.java
Author: davsclaus
Date: Sat Jun 30 17:28:57 2012
New Revision: 1355781
URL: http://svn.apache.org/viewvc?rev=1355781&view=rev
Log:
CAMEL-5406: Fixed mock endpoints interceptor to support async routing engine, to ensure callback is properly called if async kicks in.
Added:
camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/issues/ThreadsDoTryCatchInterceptSendToAllEndpointIssueTest.java
- copied unchanged from r1355779, camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/issues/ThreadsDoTryCatchInterceptSendToAllEndpointIssueTest.java
Modified:
camel/branches/camel-2.8.x/ (props changed)
camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java
Propchange: camel/branches/camel-2.8.x/
------------------------------------------------------------------------------
Merged /camel/trunk:r1355774
Merged /camel/branches/camel-2.9.x:r1355779
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/impl/InterceptSendToEndpoint.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java?rev=1355781&r1=1355780&r2=1355781&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java Sat Jun 30 17:28:57 2012
@@ -18,6 +18,8 @@ package org.apache.camel.impl;
import java.util.Map;
+import org.apache.camel.AsyncCallback;
+import org.apache.camel.AsyncProcessor;
import org.apache.camel.CamelContext;
import org.apache.camel.Consumer;
import org.apache.camel.Endpoint;
@@ -26,6 +28,8 @@ import org.apache.camel.ExchangePattern;
import org.apache.camel.PollingConsumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
+import org.apache.camel.impl.converter.AsyncProcessorTypeConverter;
+import org.apache.camel.util.AsyncProcessorHelper;
import org.apache.camel.util.ServiceHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -91,7 +95,7 @@ public class InterceptSendToEndpoint imp
public Producer createProducer() throws Exception {
producer = delegate.createProducer();
- return new Producer() {
+ return new DefaultAsyncProducer(delegate) {
public Endpoint getEndpoint() {
return producer.getEndpoint();
@@ -109,7 +113,8 @@ public class InterceptSendToEndpoint imp
return producer.createExchange(exchange);
}
- public void process(Exchange exchange) throws Exception {
+ @Override
+ public boolean process(Exchange exchange, AsyncCallback callback) {
// process the detour so we do the detour routing
if (LOG.isDebugEnabled()) {
LOG.debug("Sending to endpoint: {} is intercepted and detoured to: {} for exchange: {}", new Object[]{getEndpointUri(), detour, exchange});
@@ -117,16 +122,20 @@ public class InterceptSendToEndpoint imp
// add header with the real endpoint uri
exchange.getIn().setHeader(Exchange.INTERCEPTED_ENDPOINT, delegate.getEndpointUri());
+ // detour the exchange using synchronous processing
try {
detour.process(exchange);
} catch (Exception e) {
exchange.setException(e);
+ callback.done(true);
+ return true;
}
// Decide whether to continue or not; similar logic to the Pipeline
// check for error if so we should break out
if (!continueProcessing(exchange, "skip sending to original intended destination: " + getEndpointUri(), LOG)) {
- return;
+ callback.done(true);
+ return true;
}
if (!skip) {
@@ -136,10 +145,15 @@ public class InterceptSendToEndpoint imp
exchange.setOut(null);
}
- // route to original destination
- producer.process(exchange);
+ // route to original destination leveraging the asynchronous routing engine
+ AsyncProcessor async = AsyncProcessorTypeConverter.convert(producer);
+ return AsyncProcessorHelper.process(async, exchange, callback);
} else {
- LOG.debug("Stop() means skip sending exchange to original intended destination: {} for exchange: {}", getEndpointUri(), exchange);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Stop() means skip sending exchange to original intended destination: {} for exchange: {}", getEndpoint(), exchange);
+ }
+ callback.done(true);
+ return true;
}
}