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/02/10 13:42:51 UTC

svn commit: r742953 - /camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceableUnitOfWorkTest.java

Author: davsclaus
Date: Tue Feb 10 12:42:42 2009
New Revision: 742953

URL: http://svn.apache.org/viewvc?rev=742953&view=rev
Log:
CAMEL-699: Added example for traceable unit of work

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceableUnitOfWorkTest.java   (contents, props changed)
      - copied, changed from r742867, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceInterceptorTest.java

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceableUnitOfWorkTest.java (from r742867, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceInterceptorTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceableUnitOfWorkTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceableUnitOfWorkTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceInterceptorTest.java&r1=742867&r2=742953&rev=742953&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceInterceptorTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceableUnitOfWorkTest.java Tue Feb 10 12:42:42 2009
@@ -16,46 +16,80 @@
  */
 package org.apache.camel.processor;
 
+import java.util.List;
+
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.model.ProcessorType;
 import org.apache.camel.processor.interceptor.Tracer;
+import org.apache.camel.spi.TraceableUnitOfWork;
 
 /**
  * @version $Revision$
  */
-public class TraceInterceptorTest extends ContextTestSupport {
+public class TraceableUnitOfWorkTest extends ContextTestSupport {
 
-    // START SNIPPET: e1
     public void testSendingSomeMessages() throws Exception {
-        template.sendBodyAndHeader("direct:start", "Hello London", "to", "James");
-        template.sendBodyAndHeader("direct:start", "This is Copenhagen calling", "from", "Claus");
+        Object out = template.requestBody("direct:start", "Hello London");
+        assertEquals("Failed at: bean:bar", out);
+    }
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry jndi = super.createRegistry();
+        jndi.bind("foo", new MyFooBean());
+        jndi.bind("bar", new MyBarBean());
+        return jndi;
     }
 
+    // START SNIPPET: e1
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                // add tracer as an interceptor so it will log the exchange executions at runtime
-                // this can aid us to understand/see how the exchanges is routed etc.
-                getContext().addInterceptStrategy(new Tracer());
-
-                from("direct:start").
-                        process(new Processor() {
-                            public void process(Exchange exchange) throws Exception {
-                                // do nothing
-                            }
-
-                            @Override
-                            public String toString() {
-                                return "MyProcessor";
-                            }
-                        }).
-                        to("mock:a").
-                        to("mock:b");
+                // must enable tracer to trace the route path taken during runtime
+                context.addInterceptStrategy(new Tracer());
+
+                // let our my error processor handle all exceptions
+                onException(Exception.class).handled(true).process(new MyErrorProcessor());
+
+                // our route where an exception can be thrown from either foo or bar bean
+                // so we have enable tracing so we can check it at runtime to get the actual
+                // node path taken
+                from("direct:start").to("bean:foo").to("bean:bar");
             }
         };
     }
     // END SNIPPET: e1
 
-}
+    // START SNIPPET: e2
+    private class MyErrorProcessor implements Processor {
+        public void process(Exchange exchange) throws Exception {
+            // cast to TraceableUnitOfWork so we can work on the intercepted node path
+            TraceableUnitOfWork tuow = (TraceableUnitOfWork) exchange.getUnitOfWork();
+
+            // get the list of intercepted nodes
+            List<ProcessorType> list = tuow.getInterceptedNodes();
+            // get the 2nd last as the last is me (MyErrorProcessor)
+            ProcessorType last = list.get(list.size() - 2);
+
+            // set error message
+            exchange.getFault().setBody("Failed at: " + last.getLabel());
+        }
+    }
+    // END SNIPPET: e2
+
+    public class MyFooBean {
+        public void process(Exchange exchange) throws Exception {
+            exchange.getOut().setBody("Foo okay");
+        }
+    }
+
+    public class MyBarBean {
+        public void process(Exchange exchange) throws Exception {
+            throw new IllegalArgumentException("Damm Bar");
+        }
+    }
+}
\ No newline at end of file

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceableUnitOfWorkTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceableUnitOfWorkTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TraceableUnitOfWorkTest.java
------------------------------------------------------------------------------
    svn:mergeinfo =