You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/06/26 19:46:56 UTC
svn commit: r788786 -
/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java
Author: davsclaus
Date: Fri Jun 26 17:46:56 2009
New Revision: 788786
URL: http://svn.apache.org/viewvc?rev=788786&view=rev
Log:
CAMEL-1759: Cleanup of the code in TraceInterceptor and added code comments for the next poor soul reading it.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java?rev=788786&r1=788785&r2=788786&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java Fri Jun 26 17:46:56 2009
@@ -106,65 +106,22 @@
// before
if (shouldLog) {
- // TODO: refactor into smaller methods
- // TODO: add code comments about why we do this
-
+ // whether we should trace it or not, some nodes should be skipped as they are abstract
+ // intermedidate steps for instance related to on completion
boolean trace = true;
// if traceable then register this as the previous node, now it has been logged
if (exchange.getUnitOfWork() instanceof TraceableUnitOfWork) {
-
TraceableUnitOfWork tuow = (TraceableUnitOfWork) exchange.getUnitOfWork();
- // special for on exception so we can see it in the trace logs
if (node instanceof OnExceptionDefinition) {
- // lets see if this is the first time for this exception
- int index = tuow.getAndIncrement(node);
- if (index == 0) {
- Expression exp = new Expression() {
- public <T> T evaluate(Exchange exchange, Class<T> type) {
- String label = "OnException";
- if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) {
- label += "[" + exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class).getClass().getSimpleName() + "]";
- }
- return exchange.getContext().getTypeConverter().convertTo(type, label);
- }
- };
- // yes its first time then do some special to log and trace the start of onException
- tuow.addTraced(new DefaultRouteNode(node, exp));
-
- // log and trace the processor that was onException so we can see it
- logExchange(exchange);
- traceExchange(exchange);
- }
-
- tuow.addTraced(new DefaultRouteNode(node, super.getProcessor()));
-
+ // special for on exception so we can see it in the trace logs
+ trace = beforeOnException((OnExceptionDefinition) node, tuow, exchange);
} else if (node instanceof OnCompletionDefinition) {
- trace = tuow.getLastNode() != null;
-
- if (exchange.getProperty(Exchange.ON_COMPLETION) != null) {
- // we should trace the onCompletion route
- int index = tuow.getAndIncrement(node);
- if (index == 0) {
- // yes its first time then do some special to log and trace the start of onCompletion
- Expression exp = new Expression() {
- public <T> T evaluate(Exchange exchange, Class<T> type) {
- String label = "OnCompletion[" + exchange.getProperty(Exchange.CORRELATION_ID) + "]";
- return exchange.getContext().getTypeConverter().convertTo(type, label);
- }
- };
- tuow.addTraced(new DefaultRouteNode(node, exp));
- tuow.addTraced(new DefaultRouteNode(node, super.getProcessor()));
-
- // log and trace the processor that was onCompletion so we can see it
- logExchange(exchange);
- traceExchange(exchange);
- } else {
- tuow.addTraced(new DefaultRouteNode(node, super.getProcessor()));
- }
- }
+ // special for on completion so we can see it in the trace logs
+ trace = beforeOnCompletion((OnCompletionDefinition) node, tuow, exchange);
} else {
+ // regular so just add it
tuow.addTraced(new DefaultRouteNode(node, super.getProcessor()));
}
}
@@ -179,24 +136,10 @@
if (exchange.getUnitOfWork() instanceof TraceableUnitOfWork) {
TraceableUnitOfWork tuow = (TraceableUnitOfWork) exchange.getUnitOfWork();
- // special for intercept() as we would like to trace the processor that was intercepted
- // as well, otherwise we only see the intercepted route, but we need the both to be logged/traced
if (node instanceof InterceptDefinition) {
-
- // get the intercepted processor from the definition
- // we need to use the UoW to have its own index of how far we got into the list
- // of intercepted processors the intercept definition holds as the intercept
- // definition is a single object that is shared by concurrent thread being routed
- // so each exchange has its own private counter
- InterceptDefinition intercept = (InterceptDefinition) node;
- Processor last = intercept.getInterceptedProcessor(tuow.getAndIncrement(intercept));
- if (last != null) {
- tuow.addTraced(new DefaultRouteNode(node, last));
-
- // log and trace the processor that was intercepted so we can see it
- logExchange(exchange);
- traceExchange(exchange);
- }
+ // special for intercept() as we would like to trace the processor that was intercepted
+ // as well, otherwise we only see the intercepted route, but we need the both to be logged/traced
+ afterIntercept((InterceptDefinition) node, tuow, exchange);
}
}
}
@@ -237,6 +180,94 @@
// Implementation methods
//-------------------------------------------------------------------------
+
+ protected boolean beforeOnException(OnExceptionDefinition onException, TraceableUnitOfWork tuow, Exchange exchange) throws Exception {
+ // lets see if this is the first time for this exception
+ int index = tuow.getAndIncrement(node);
+ if (index == 0) {
+ // yes its first time then do some special to log and trace the start of onException
+ Expression exp = new Expression() {
+ public <T> T evaluate(Exchange exchange, Class<T> type) {
+ String label = "OnException";
+ if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) != null) {
+ label += "[" + exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class).getClass().getSimpleName() + "]";
+ }
+ return exchange.getContext().getTypeConverter().convertTo(type, label);
+ }
+ };
+ // add our pesudo node
+ tuow.addTraced(new DefaultRouteNode(node, exp));
+
+ // log and trace the processor that was onException so we can see it imeddiately
+ logExchange(exchange);
+ traceExchange(exchange);
+ }
+
+ // add the processor that is invoked for this onException
+ tuow.addTraced(new DefaultRouteNode(node, super.getProcessor()));
+ return true;
+ }
+
+ protected boolean beforeOnCompletion(OnCompletionDefinition onCompletion, TraceableUnitOfWork tuow, Exchange exchange) throws Exception {
+ // we should only trace when we do the actual onCompletion
+ // the problem is that onCompletion is added at the very beginning of a route to be able to
+ // add synchronization hoos on unit of work so it knows to invoke the onCompletion when the
+ // exchange is done. But in the trace log we want to defer the onCompletion being logged
+ // unitl the exchange is actually completed and is doing the onCompletion routing
+ // so if the last node is null then we have just started and thus should not trace this node
+ boolean answer = tuow.getLastNode() != null;
+
+ if (exchange.getProperty(Exchange.ON_COMPLETION) != null) {
+ // if ON_COMPLETION is not null then we are actually doing the onCompletion routing
+
+ // we should trace the onCompletion route and we want a start log of the onCompletion
+ // step so get the index and see if its 0 then we can add our speical log
+ int index = tuow.getAndIncrement(node);
+ if (index == 0) {
+ // yes its first time then do some special to log and trace the start of onCompletion
+ Expression exp = new Expression() {
+ public <T> T evaluate(Exchange exchange, Class<T> type) {
+ String label = "OnCompletion[" + exchange.getProperty(Exchange.CORRELATION_ID) + "]";
+ return exchange.getContext().getTypeConverter().convertTo(type, label);
+ }
+ };
+ // add the onCompletion and then the processor that is invoked nest
+ tuow.addTraced(new DefaultRouteNode(node, exp));
+ tuow.addTraced(new DefaultRouteNode(node, super.getProcessor()));
+
+ // log and trace so we get the onCompletion -> processor in the log
+ logExchange(exchange);
+ traceExchange(exchange);
+ } else {
+ // we are doing the onCompletion but this is after the start so just
+ // add the processor and do no special start message
+ tuow.addTraced(new DefaultRouteNode(node, super.getProcessor()));
+ }
+
+ }
+
+ return answer;
+ }
+
+ protected boolean afterIntercept(InterceptDefinition interceptr, TraceableUnitOfWork tuow, Exchange exchange) throws Exception {
+ // get the intercepted processor from the definition
+ // we need to use the UoW to have its own index of how far we got into the list
+ // of intercepted processors the intercept definition holds as the intercept
+ // definition is a single object that is shared by concurrent thread being routed
+ // so each exchange has its own private counter
+ InterceptDefinition intercept = (InterceptDefinition) node;
+ Processor last = intercept.getInterceptedProcessor(tuow.getAndIncrement(intercept));
+ if (last != null) {
+ tuow.addTraced(new DefaultRouteNode(node, last));
+
+ // log and trace the processor that was intercepted so we can see it
+ logExchange(exchange);
+ traceExchange(exchange);
+ }
+
+ return true;
+ }
+
protected void logExchange(Exchange exchange) {
// process the exchange that formats and logs it
logger.process(exchange);