Hi

Also in Camel 3.0 we will refactor the internal routing engine a bit
to be more runtime dynamic, to apply interceptors, tracing, error
handling on-the-fly on a per-need basis. Which may reduce the stack
frame levels a bit.


On Thu, Dec 29, 2011 at 8:56 PM, Jason Dillon <[email protected]> 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
>
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: [email protected]
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to