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