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


Reply via email to