Author: cschneider
Date: Wed Oct  5 14:07:17 2011
New Revision: 1179233

URL: http://svn.apache.org/viewvc?rev=1179233&view=rev
Log:
CAMEL-4500 Removing DispatchingTraceEventHandler and instead adding the 
functionality to TraceInterceptor. So we can support more than one tracer

Removed:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DispatchingTraceEventHandler.java
Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceInterceptorFactoryCreatesHandlerTest.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java?rev=1179233&r1=1179232&r2=1179233&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java
 Wed Oct  5 14:07:17 2011
@@ -24,8 +24,6 @@ import org.apache.camel.api.management.M
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.NotificationSender;
 import org.apache.camel.api.management.NotificationSenderAware;
-import org.apache.camel.processor.interceptor.DispatchingTraceEventHandler;
-import org.apache.camel.processor.interceptor.TraceEventHandler;
 import org.apache.camel.processor.interceptor.Tracer;
 import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.util.ObjectHelper;
@@ -45,16 +43,8 @@ public class ManagedTracer implements No
     public ManagedTracer(CamelContext camelContext, Tracer tracer) {
         this.camelContext = camelContext;
         this.tracer = tracer;
-        TraceEventHandler oldHandler = tracer.getTraceHandler();
         jmxTraceHandler = new JMXNotificationTraceEventHandler();
-        if (oldHandler != null) {
-            DispatchingTraceEventHandler teh = new 
DispatchingTraceEventHandler();
-            teh.addHandler(oldHandler);
-            teh.addHandler(jmxTraceHandler);
-            tracer.setTraceHandler(teh);
-        } else {
-            tracer.setTraceHandler(jmxTraceHandler);
-        }
+        tracer.addTraceHandler(jmxTraceHandler);
     }
 
     public void init(ManagementStrategy strategy) {

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=1179233&r1=1179232&r2=1179233&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
 Wed Oct  5 14:07:17 2011
@@ -58,7 +58,6 @@ public class TraceInterceptor extends De
     private TraceFormatter formatter;
 
     private RouteContext routeContext;
-    private TraceEventHandler traceHandler;
 
     public TraceInterceptor(ProcessorDefinition<?> node, Processor target, 
TraceFormatter formatter, Tracer tracer) {
         super(target);
@@ -69,7 +68,6 @@ public class TraceInterceptor extends De
         if (tracer.getFormatter() != null) {
             this.formatter = tracer.getFormatter();
         }
-        this.traceHandler = tracer.getTraceHandler();
     }
 
     @Override
@@ -277,38 +275,27 @@ public class TraceInterceptor extends De
         return tracer;
     }
 
-    public TraceEventHandler getTraceHandler() {
-        return traceHandler;
-    }
-
-    /*
-     * Note that this should only be set before the route has been started
-     */
-    public void setTraceHandler(TraceEventHandler traceHandler) {
-        this.traceHandler = traceHandler;
-    }
-
     protected void logExchange(Exchange exchange) {
         // process the exchange that formats and logs it
         logger.process(exchange);
     }
 
     protected void traceExchange(Exchange exchange) throws Exception {
-        if (traceHandler != null) {
+        for (TraceEventHandler traceHandler : tracer.getTraceHandlers()) {
             traceHandler.traceExchange(node, processor, this, exchange);
         }
     }
 
     protected Object traceExchangeIn(Exchange exchange) throws Exception {
-        if (traceHandler != null) {
-            return traceHandler.traceExchangeIn(node, processor, this, 
exchange);
-        } else {
-            return null;
+        Object result = null;
+        for (TraceEventHandler traceHandler : tracer.getTraceHandlers()) {
+            result = traceHandler.traceExchangeIn(node, processor, this, 
exchange);
         }
+        return result;
     }
 
     protected void traceExchangeOut(Exchange exchange, Object traceState) 
throws Exception {
-        if (traceHandler != null) {
+        for (TraceEventHandler traceHandler : tracer.getTraceHandlers()) {
             traceHandler.traceExchangeOut(node, processor, this, exchange, 
traceState);
         }
     }
@@ -360,12 +347,12 @@ public class TraceInterceptor extends De
     @Override
     protected void doStart() throws Exception {
         super.doStart();
-        ServiceHelper.startService(traceHandler);
+        ServiceHelper.startService(tracer.getTraceHandlers());
     }
 
     @Override
     protected void doStop() throws Exception {
         super.doStop();
-        ServiceHelper.stopService(traceHandler);
+        ServiceHelper.stopService(tracer.getTraceHandlers());
     }
 }

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java?rev=1179233&r1=1179232&r2=1179233&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java
 Wed Oct  5 14:07:17 2011
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.processor.interceptor;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
@@ -53,11 +54,12 @@ public class Tracer implements Intercept
     private boolean useJpa;
     private CamelLogProcessor logger;
     private TraceInterceptorFactory traceInterceptorFactory = new 
DefaultTraceInterceptorFactory();
-    private TraceEventHandler traceHandler;
+    private List<TraceEventHandler> traceHandlers;
     private String jpaTraceEventMessageClassName = JPA_TRACE_EVENT_MESSAGE;
     
     public Tracer() {
-        traceHandler = new DefaultTraceEventHandler(this);
+        traceHandlers = new ArrayList<TraceEventHandler>();
+        traceHandlers.add(new DefaultTraceEventHandler(this));
     }
 
     /**
@@ -278,8 +280,21 @@ public class Tracer implements Intercept
         this.traceInterceptorFactory = traceInterceptorFactory;
     }
 
+    /**
+     * 
+     * @return the first trace event handler
+     */
+    @Deprecated
     public TraceEventHandler getTraceHandler() {
-        return traceHandler;
+        return traceHandlers.get(0);
+    }
+    
+    /**
+     * 
+     * @return list of tracehandlers
+     */
+    public List<TraceEventHandler> getTraceHandlers() {
+        return traceHandlers;
     }
 
     /**
@@ -291,8 +306,25 @@ public class Tracer implements Intercept
      * The TraceHandler should only be set before any routes are created, 
hence this
      * method is not thread safe.
      */
+    @Deprecated
     public void setTraceHandler(TraceEventHandler traceHandler) {
-        this.traceHandler = traceHandler;
+        this.traceHandlers.add(0, traceHandler);
+    }
+    
+    /**
+     * Add the given tracehandler
+     * @param traceHandler
+     */
+    public void addTraceHandler(TraceEventHandler traceHandler) {
+        this.traceHandlers.add(traceHandler);
+    }
+    
+    /**
+     * Remove the given tracehandler
+     * @param traceHandler
+     */
+    public void removeTraceHandler(TraceEventHandler traceHandler) {
+        this.traceHandlers.add(traceHandler);
     }
 
     public String getJpaTraceEventMessageClassName() {

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceInterceptorFactoryCreatesHandlerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceInterceptorFactoryCreatesHandlerTest.java?rev=1179233&r1=1179232&r2=1179233&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceInterceptorFactoryCreatesHandlerTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceInterceptorFactoryCreatesHandlerTest.java
 Wed Oct  5 14:07:17 2011
@@ -23,7 +23,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.DelegateProcessor;
 import org.apache.camel.Processor;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.processor.WrapProcessor;
 
 public class TraceInterceptorFactoryCreatesHandlerTest extends TracingTestBase 
{
 
@@ -45,7 +44,7 @@ public class TraceInterceptorFactoryCrea
             if (traceAllNodes || 
!target.getClass().equals(TraceTestProcessor.class)) {
                 TraceHandlerTestHandler traceHandler = new 
TraceHandlerTestHandler(eventMessages);
                 traceHandler.setTraceAllNodes(true);
-                interceptor.setTraceHandler(traceHandler);
+                tracer.addTraceHandler(traceHandler);
             }
 
             return interceptor;


Reply via email to