Author: davsclaus Date: Fri Mar 9 11:52:21 2012 New Revision: 1298795 URL: http://svn.apache.org/viewvc?rev=1298795&view=rev Log: CAMEL-5066: Fixed JMX stats for processors when using interceptors.
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedInterceptTest.java - copied, changed from r1298700, camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedLoadBalancerTest.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/InterceptDefinition.java 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/model/InterceptDefinition.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/InterceptDefinition.java?rev=1298795&r1=1298794&r2=1298795&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/model/InterceptDefinition.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/InterceptDefinition.java Fri Mar 9 11:52:21 2012 @@ -77,8 +77,8 @@ public class InterceptDefinition extends public Processor wrapProcessorInInterceptors(CamelContext context, ProcessorDefinition<?> definition, Processor target, Processor nextTarget) throws Exception { - // prefer next target over target as next target is the real target - interceptedTarget = nextTarget != null ? nextTarget : target; + // store the target we are intercepting + this.interceptedTarget = target; // remember the target that was intercepted intercepted.add(interceptedTarget); 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=1298795&r1=1298794&r2=1298795&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 Mar 9 11:52:21 2012 @@ -241,7 +241,8 @@ public class TraceInterceptor extends De protected void traceIntercept(InterceptDefinition intercept, TracedRouteNodes traced, Exchange exchange) throws Exception { // use the counter to get the index of the intercepted processor to be traced Processor last = intercept.getInterceptedProcessor(traced.getAndIncrementCounter(intercept)); - if (last != null) { + // skip doing any double tracing of interceptors, so the last must not be a TraceInterceptor instance + if (last != null && !(last instanceof TraceInterceptor)) { traced.addTraced(new DefaultRouteNode(node, last)); boolean shouldLog = shouldLogNode(node) && shouldLogExchange(exchange); Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedInterceptTest.java (from r1298700, camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedLoadBalancerTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedInterceptTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedInterceptTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedLoadBalancerTest.java&r1=1298700&r2=1298795&rev=1298795&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedLoadBalancerTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedInterceptTest.java Fri Mar 9 11:52:21 2012 @@ -24,33 +24,31 @@ import org.apache.camel.builder.RouteBui /** * @version */ -public class ManagedLoadBalancerTest extends ManagementTestSupport { +public class ManagedInterceptTest extends ManagementTestSupport { - public void testLoadBalancer() throws Exception { - getMockEndpoint("mock:a").expectedBodiesReceived("Hello World", "Hi World"); - getMockEndpoint("mock:b").expectedBodiesReceived("Bye World"); + public void testIntercept() throws Exception { + getMockEndpoint("mock:result").expectedBodiesReceived("Hello World"); + getMockEndpoint("mock:intercept").expectedBodiesReceived("Hello World", "Hello World"); template.sendBody("direct:start", "Hello World"); - template.sendBody("direct:start", "Bye World"); - template.sendBody("direct:start", "Hi World"); assertMockEndpointsSatisfied(); MBeanServer mbeanServer = getMBeanServer(); - ObjectName name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"mock://a\""); + ObjectName name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"mock://result\""); Long queueSize = (Long) mbeanServer.invoke(name, "queueSize", null, null); - assertEquals(2, queueSize.intValue()); + assertEquals(1, queueSize.intValue()); - name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"mock://b\""); + name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"mock://intercept\""); queueSize = (Long) mbeanServer.invoke(name, "queueSize", null, null); - assertEquals(1, queueSize.intValue()); + assertEquals(2, queueSize.intValue()); - name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=processors,name=\"myBalancer\""); + name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=processors,name=\"log-foo\""); mbeanServer.isRegistered(name); Long total = (Long) mbeanServer.getAttribute(name, "ExchangesTotal"); - assertEquals(3, total.intValue()); + assertEquals(1, total.intValue()); } @Override @@ -58,9 +56,10 @@ public class ManagedLoadBalancerTest ext return new RouteBuilder() { @Override public void configure() throws Exception { + intercept().to("mock:intercept"); + from("direct:start").routeId("foo") - .loadBalance().id("myBalancer").roundRobin() - .to("mock:a").to("mock:b"); + .to("log:foo").id("log-foo").to("mock:result"); } }; }