Updated Branches: refs/heads/master 7b786b9d0 -> 2ff3b1dab
CAMEL-6377: Optimized routing engine to reduce stack frames in use during routing. Work in progress. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f3b233d4 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f3b233d4 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f3b233d4 Branch: refs/heads/master Commit: f3b233d447c94245d260121f94748fd6039239a1 Parents: 7b786b9 Author: Claus Ibsen <davscl...@apache.org> Authored: Sun May 26 20:36:11 2013 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sun May 26 21:16:08 2013 +0200 ---------------------------------------------------------------------- .../org/apache/camel/processor/WrapProcessor.java | 30 +++++++++++++++ .../processor/interceptor/DefaultChannel.java | 4 +- 2 files changed, 32 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/f3b233d4/camel-core/src/main/java/org/apache/camel/processor/WrapProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/WrapProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/WrapProcessor.java index adb508a..3eb629a 100644 --- a/camel-core/src/main/java/org/apache/camel/processor/WrapProcessor.java +++ b/camel-core/src/main/java/org/apache/camel/processor/WrapProcessor.java @@ -18,7 +18,11 @@ package org.apache.camel.processor; import java.util.List; +import org.apache.camel.AsyncCallback; +import org.apache.camel.AsyncProcessor; +import org.apache.camel.Exchange; import org.apache.camel.Processor; +import org.apache.camel.util.AsyncProcessorHelper; import org.apache.camel.util.ServiceHelper; /** @@ -48,6 +52,32 @@ public class WrapProcessor extends DelegateAsyncProcessor { } @Override + public void process(Exchange exchange) throws Exception { + if (wrapped instanceof AsyncProcessor) { + AsyncProcessor async = (AsyncProcessor) wrapped; + AsyncProcessorHelper.process(async, exchange); + } else { + wrapped.process(exchange); + } + } + + @Override + public boolean process(Exchange exchange, AsyncCallback callback) { + if (wrapped instanceof AsyncProcessor) { + AsyncProcessor async = (AsyncProcessor) wrapped; + return async.process(exchange, callback); + } else { + try { + wrapped.process(exchange); + } catch (Exception e) { + exchange.setException(e); + } + callback.done(true); + return true; + } + } + + @Override protected void doStart() throws Exception { ServiceHelper.startService(wrapped); super.doStart(); http://git-wip-us.apache.org/repos/asf/camel/blob/f3b233d4/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java b/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java index 4634ec6..9a68502 100644 --- a/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java +++ b/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java @@ -262,8 +262,8 @@ public class DefaultChannel extends ServiceSupport implements ModelChannel { bridge.setTarget(wrapped); wrapped = bridge; } - // ensure target gets wrapped so we can control its lifecycle - if (!(wrapped instanceof WrapProcessor)) { + if (!(wrapped instanceof Service)) { + // wrap the target so it becomes a service and we can manage its lifecycle wrapped = new WrapProcessor(wrapped, target); } target = wrapped;