Author: dkulp
Date: Wed Oct  5 17:33:34 2011
New Revision: 1179342

URL: http://svn.apache.org/viewvc?rev=1179342&view=rev
Log:
[CAMEL-4500] Make the traceHandlers list threadsafe and allow the
TraceInterceptor to use the live list (instead of a copy of it) to allow
dynamic changing of the tracers

Modified:
    
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/async/AsyncTraceHandlerTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceHandlerTest.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/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=1179342&r1=1179341&r2=1179342&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 17:33:34 2011
@@ -17,6 +17,7 @@
 package org.apache.camel.processor.interceptor;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.camel.AsyncCallback;
@@ -72,8 +73,7 @@ public class TraceInterceptor extends De
         if (tracer.getFormatter() != null) {
             this.formatter = tracer.getFormatter();
         }
-        this.traceHandlers = new ArrayList<TraceEventHandler>();
-        this.traceHandlers.addAll(tracer.getTraceHandlers());
+        this.traceHandlers = tracer.getTraceHandlers();
     }
 
     @Override
@@ -367,7 +367,6 @@ public class TraceInterceptor extends De
 
     @Deprecated
     public void setTraceHandler(TraceEventHandler traceHandler) {
-        traceHandlers.clear();
-        traceHandlers.add(traceHandler);
+        traceHandlers = Collections.singletonList(traceHandler);
     }
 }

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=1179342&r1=1179341&r2=1179342&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 17:33:34 2011
@@ -16,8 +16,8 @@
  */
 package org.apache.camel.processor.interceptor;
 
-import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
@@ -54,11 +54,11 @@ public class Tracer implements Intercept
     private boolean useJpa;
     private CamelLogProcessor logger;
     private TraceInterceptorFactory traceInterceptorFactory = new 
DefaultTraceInterceptorFactory();
-    private List<TraceEventHandler> traceHandlers;
+    private CopyOnWriteArrayList<TraceEventHandler> traceHandlers;
     private String jpaTraceEventMessageClassName = JPA_TRACE_EVENT_MESSAGE;
     
     public Tracer() {
-        traceHandlers = new ArrayList<TraceEventHandler>();
+        traceHandlers = new CopyOnWriteArrayList<TraceEventHandler>();
         traceHandlers.add(new DefaultTraceEventHandler(this));
     }
 

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncTraceHandlerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncTraceHandlerTest.java?rev=1179342&r1=1179341&r2=1179342&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncTraceHandlerTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncTraceHandlerTest.java
 Wed Oct  5 17:33:34 2011
@@ -51,7 +51,8 @@ public class AsyncTraceHandlerTest exten
 
         Tracer tracer = (Tracer) contextLocal.getDefaultTracer();
         tracer.setEnabled(true);
-        tracer.setTraceHandler(new MyTraceHandler());
+        tracer.getTraceHandlers().clear();
+        tracer.getTraceHandlers().add(new MyTraceHandler());
         tracer.setTraceOutExchanges(true);
 
         return contextLocal;

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceHandlerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceHandlerTest.java?rev=1179342&r1=1179341&r2=1179342&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceHandlerTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceHandlerTest.java
 Wed Oct  5 17:33:34 2011
@@ -31,14 +31,15 @@ public class TraceHandlerTest extends Tr
         Tracer tracer = (Tracer) contextLocal.getDefaultTracer();
         tracer.setEnabled(true);
         tracer.setTraceExceptions(true);
-        tracer.setTraceHandler(new TraceHandlerTestHandler(tracedMessages));
+        tracer.getTraceHandlers().clear();
+        tracer.getTraceHandlers().add(new 
TraceHandlerTestHandler(tracedMessages));
 
         return contextLocal;
     }
 
     @Override
     protected void prepareTestTracerExceptionInOut() {
-        ((TraceHandlerTestHandler) ((Tracer) 
context.getDefaultTracer()).getTraceHandler()).setTraceAllNodes(true);
+        ((TraceHandlerTestHandler) ((Tracer) 
context.getDefaultTracer()).getTraceHandlers().get(0)).setTraceAllNodes(true);
     }
 
 }

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=1179342&r1=1179341&r2=1179342&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 17:33:34 2011
@@ -35,7 +35,9 @@ public class TraceInterceptorFactoryCrea
             this.traceAllNodes = traceAllNodes;
         }
 
+        @SuppressWarnings("deprecation")
         public Processor createTraceInterceptor(ProcessorDefinition node, 
Processor target, TraceFormatter formatter, Tracer tracer) {
+            
             TraceInterceptor interceptor = new TraceInterceptor(node, target, 
formatter, tracer);
 
             while (target instanceof DelegateProcessor) {


Reply via email to