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/
