Author: davsclaus
Date: Sat Apr 13 07:35:36 2013
New Revision: 1467569

URL: http://svn.apache.org/r1467569
Log:
CAMEL-6265: direct-vm component - The processor should support async routing 
engine

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

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=1467569&r1=1467568&r2=1467569&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 Apr 13 07:35:36 2013
@@ -16,9 +16,10 @@
  */
 package org.apache.camel.component.directvm;
 
+import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.processor.DelegateProcessor;
+import org.apache.camel.processor.DelegateAsyncProcessor;
 import org.apache.camel.util.ExchangeHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -26,7 +27,7 @@ import org.slf4j.LoggerFactory;
 /**
 *
 */
-public final class DirectVmProcessor extends DelegateProcessor {
+public final class DirectVmProcessor extends DelegateAsyncProcessor {
 
     private static final transient Logger LOG = 
LoggerFactory.getLogger(DirectVmProcessor.class);
     private final DirectVmEndpoint endpoint;
@@ -37,9 +38,9 @@ public final class DirectVmProcessor ext
     }
 
     @Override
-    public void process(Exchange exchange) throws Exception {
+    public boolean process(final Exchange exchange, final AsyncCallback 
callback) {
         // need to use a copy of the incoming exchange, so we route using this 
camel context
-        Exchange copy = prepareExchange(exchange);
+        final Exchange copy = prepareExchange(exchange);
 
         ClassLoader current = Thread.currentThread().getContextClassLoader();
         boolean changed = false;
@@ -51,10 +52,19 @@ public final class DirectVmProcessor ext
                 Thread.currentThread().setContextClassLoader(appClassLoader);
                 changed = true;
             }
-            getProcessor().process(copy);
+            return getProcessor().process(copy, new AsyncCallback() {
+                @Override
+                public void done(boolean done) {
+                    try {
+                        // make sure to copy results back
+                        ExchangeHelper.copyResults(exchange, copy);
+                    } finally {
+                        // must call callback when we are done
+                        callback.done(done);
+                    }
+                }
+            });
         } finally {
-            // make sure to copy results back
-            ExchangeHelper.copyResults(exchange, copy);
             // restore TCCL if it was changed during processing
             if (changed) {
                 LOG.trace("Restoring Thread ContextClassLoader to {}", 
current);


Reply via email to