There are some default interceptors, processor wrappers are used to help camel to implement the error handling and async processing.

On Fri Dec 30 03:56:15 2011, Jason Dillon wrote:
I'm seeing a very deep stack for a simple route and I'm wondering... why it is 
so deep?

Testing with a class like:

<snip>
public class BasicCamelTrial
     extends TestSupport
{
     @Test
     public void showStackDepthForSimpleRoute() throws Exception {
         DefaultCamelContext camel = new DefaultCamelContext();
         camel.disableJMX();
         camel.addRoutes(new RouteBuilder()
         {
             @Override
             public void configure() throws Exception {
                 from("direct:foo").to("direct:bar");
                 from("direct:bar").process(new Processor()
                 {
                     @Override
                     public void process(Exchange exchange) throws Exception {
                         Throwable t = new Throwable("MARKER");
                         log("HERE; stack size: {}", t.getStackTrace().length, 
t);
                     }
                 });
             }
         });

         camel.start();

         ProducerTemplate producer = camel.createProducerTemplate();
         producer.sendBody("direct:foo", "Hello");
         producer.stop();

         camel.stop();
     }
}
</snip>

Shows stack is:

<snip>
java.lang.Throwable: MARKER
        at BasicCamelTrial$1$1.process(BasicCamelTrial.java:39) 
[test-classes/:na]
        at 
org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:50)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:90)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:318)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:209)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:306) 
[camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:111)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:69)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:61)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:114)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:284) 
[camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:109) 
[camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:90)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:318)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:209)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:306) 
[camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:111)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:69)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:61)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:139)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:106)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:104)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:85)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:63)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:351) 
[camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:323) 
[camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:222) 
[camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:323) 
[camel-core-2.8.3.jar:2.8.3]
        at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:168) 
[camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:110)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:123)
 [camel-core-2.8.3.jar:2.8.3]
        at 
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:130)
 [camel-core-2.8.3.jar:2.8.3]
        at 
BasicCamelTrial.showStackDepthForSimpleRoute(BasicCamelTrial.java:48) 
[test-classes/:na]
... trimmed out test launcher ...
</snip>

I ran with a few other routes (a simple a ->  b) and a more complicated (a ->  b 
->  c) and it looks like each route adds 19 stack trace elements.  Is this the 
expected behavior of camel by default?  Is there any way to optimize the message flow 
for simple routes?

--jason





--
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
         http://jnn.javaeye.com (Chinese)
Twitter: willemjiang
Weibo: willemjiang

Reply via email to