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 2010/06/29 14:47:06 UTC

svn commit: r958951 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/processor/ camel-core/src/main/java/org/apache/camel/spi/ camel-core/src/test/java/org/apache/camel/processor/async/ components/camel-spring-security/src/main/java/org/apa...

Author: davsclaus
Date: Tue Jun 29 12:47:06 2010
New Revision: 958951

URL: http://svn.apache.org/viewvc?rev=958951&view=rev
Log:
CAMEL-2689: policy DSL supports async routing engine.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointPolicyTest.java
      - copied, changed from r958909, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointTest.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/InterceptorToAsyncProcessorBridge.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/WrapProcessor.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Policy.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/MyAsyncProducer.java
    camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAccessPolicy.java
    camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java
    camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/NamespaceHandler.java
    camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/SpringSecurityAuthorizationPolicyParser.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceMixedTransactedTest.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceNotTransactedTest.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithOnExceptionHandledAndRollbackTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java Tue Jun 29 12:47:06 2010
@@ -48,7 +48,10 @@ public abstract class DelayProcessorSupp
         try {
             delay(exchange);
         } catch (Exception e) {
+            // exception occurred so we are done
             exchange.setException(e);
+            callback.done(true);
+            return true;
         }
         return super.process(exchange, callback);
     }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/InterceptorToAsyncProcessorBridge.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/InterceptorToAsyncProcessorBridge.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/InterceptorToAsyncProcessorBridge.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/InterceptorToAsyncProcessorBridge.java Tue Jun 29 12:47:06 2010
@@ -42,7 +42,18 @@ public class InterceptorToAsyncProcessor
      * @param interceptor the interceptor to bridge
      */
     public InterceptorToAsyncProcessorBridge(Processor interceptor) {
+        this(interceptor, null);
+    }
+
+    /**
+     * Constructs the bridge
+     *
+     * @param interceptor the interceptor to bridge
+     * @param target the target
+     */
+    public InterceptorToAsyncProcessorBridge(Processor interceptor, AsyncProcessor target) {
         this.interceptor = AsyncProcessorTypeConverter.convert(interceptor);
+        this.target = target;
     }
 
     /**

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/WrapProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/WrapProcessor.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/WrapProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/WrapProcessor.java Tue Jun 29 12:47:06 2010
@@ -24,11 +24,9 @@ import org.apache.camel.util.ServiceHelp
  *
  * @version $Revision$
  */
-public class WrapProcessor extends DelegateProcessor {
+public class WrapProcessor extends DelegateAsyncProcessor {
     private final Processor wrapped;
 
-    // TODO: Should support async routing engine
-
     public WrapProcessor(Processor processor, Processor wrapped) {
         super(processor);
         this.wrapped = wrapped;

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Policy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Policy.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Policy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Policy.java Tue Jun 29 12:47:06 2010
@@ -20,16 +20,21 @@ import org.apache.camel.Processor;
 
 /**
  * A strategy capable of applying interceptors to a processor
+ * <p/>
+ * Its <b>strongly</b> adviced to use an {@link org.apache.camel.AsyncProcessor} as the returned wrapped
+ * {@link Processor} which ensures the policy works well with the asynchronous routing engine.
+ * You can use the {@link org.apache.camel.processor.DelegateAsyncProcessor} to easily return an
+ * {@link org.apache.camel.AsyncProcessor} and override the
+ * {@link org.apache.camel.AsyncProcessor#process(org.apache.camel.Exchange, org.apache.camel.AsyncCallback)} to
+ * implement your interceptor logic. And just invoke the super method to <b>continue</b> routing.
  *
  * @version $Revision$
  */
 public interface Policy {
 
-    // TODO: Should support async routing engine
-    // we may need the same bridge as we do with InterceptStrategy in DefaultChannel
-
     /**
-     * Wraps any applicable interceptors around the given processor
+     * Wraps any applicable interceptors around the given processor.
+     * <p
      *
      * @param routeContext the route context
      * @param processor the processor to be intercepted

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointPolicyTest.java (from r958909, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointPolicyTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointPolicyTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointTest.java&r1=958909&r2=958951&rev=958951&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointPolicyTest.java Tue Jun 29 12:47:06 2010
@@ -16,29 +16,51 @@
  */
 package org.apache.camel.processor.async;
 
+import org.apache.camel.AsyncCallback;
+import org.apache.camel.AsyncProcessor;
 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.impl.converter.AsyncProcessorTypeConverter;
+import org.apache.camel.spi.Policy;
+import org.apache.camel.spi.RouteContext;
+import org.apache.camel.util.AsyncProcessorHelper;
 
 /**
  * @version $Revision$
  */
-public class AsyncEndpointTest extends ContextTestSupport {
+public class AsyncEndpointPolicyTest extends ContextTestSupport {
 
     private static String beforeThreadName;
     private static String afterThreadName;
 
-    public void testAsyncEndpoint() throws Exception {
-        getMockEndpoint("mock:before").expectedBodiesReceived("Hello Camel");
-        getMockEndpoint("mock:after").expectedBodiesReceived("Bye Camel");
-        getMockEndpoint("mock:result").expectedBodiesReceived("Bye Camel");
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry jndi = super.createRegistry();
+        jndi.bind("foo", new MyPolicy("foo"));
+        return jndi;
+    }
 
-        String reply = template.requestBody("direct:start", "Hello Camel", String.class);
-        assertEquals("Bye Camel", reply);
+    public void testAsyncEndpoint() throws Exception {
+        getMockEndpoint("mock:foo").expectedMessageCount(1);
+        getMockEndpoint("mock:foo").expectedHeaderReceived("foo", "was wrapped");
+        getMockEndpoint("mock:bar").expectedMessageCount(1);
+        getMockEndpoint("mock:bar").expectedHeaderReceived("foo", "was wrapped");
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "was wrapped");
+
+        getMockEndpoint("mock:response").expectedMessageCount(1);
+        getMockEndpoint("mock:response").expectedHeaderReceived("foo", "policy finished execution");
+        template.sendBody("direct:send", "Hello World");
 
         assertMockEndpointsSatisfied();
 
+        MyPolicy foo = context.getRegistry().lookup("foo", MyPolicy.class);
+
+        assertEquals("Should only be invoked 1 time", 1, foo.getInvoked());
+
         assertFalse("Should use different threads", beforeThreadName.equalsIgnoreCase(afterThreadName));
     }
 
@@ -50,24 +72,83 @@ public class AsyncEndpointTest extends C
                 context.addComponent("async", new MyAsyncComponent());
 
                 from("direct:start")
-                        .to("mock:before")
-                        .to("log:before")
-                        .process(new Processor() {
-                            public void process(Exchange exchange) throws Exception {
-                                beforeThreadName = Thread.currentThread().getName();
-                            }
-                        })
+                    // wraps the entire route in the same policy
+                    .policy("foo")
+                        .to("mock:foo")
                         .to("async:Bye Camel")
-                        .process(new Processor() {
-                            public void process(Exchange exchange) throws Exception {
-                                afterThreadName = Thread.currentThread().getName();
-                            }
-                        })
-                        .to("log:after")
-                        .to("mock:after")
+                        .to("mock:bar")
                         .to("mock:result");
+
+                from("direct:send")
+                    .to("mock:before")
+                    .to("log:before")
+                    .process(new Processor() {
+                        public void process(Exchange exchange) throws Exception {
+                            beforeThreadName = Thread.currentThread().getName();
+                        }
+                    })
+                    .to("direct:start")
+                    .process(new Processor() {
+                        public void process(Exchange exchange) throws Exception {
+                            afterThreadName = Thread.currentThread().getName();
+                        }
+                    })
+                    .to("log:after")
+                    .to("mock:after")
+                    .to("mock:response");
             }
         };
     }
 
-}
+    public static class MyPolicy implements Policy {
+
+        private final String name;
+        private int invoked;
+
+        public MyPolicy(String name) {
+            this.name = name;
+        }
+
+        public Processor wrap(RouteContext routeContext, final Processor processor) {
+            return new AsyncProcessor() {
+                public boolean process(final Exchange exchange, final AsyncCallback callback) {
+                    invoked++;
+                    // let the original processor continue routing
+                    exchange.getIn().setHeader(name, "was wrapped");
+                    AsyncProcessor ap = AsyncProcessorTypeConverter.convert(processor);
+                    boolean sync = ap.process(exchange, new AsyncCallback() {
+                        public void done(boolean doneSync) {
+                            // we only have to handle async completion of this policy
+                            if (doneSync) {
+                                return;
+                            }
+
+                            exchange.getIn().setHeader(name, "policy finished execution");
+                            callback.done(false);
+                        }
+                    });
+
+                    if (!sync) {
+                        // continue routing async
+                        return false;
+                    }
+
+                    // we are done synchronously, so do our after work and invoke the callback
+                    exchange.getIn().setHeader(name, "policy finished execution");
+                    callback.done(true);
+                    return true;
+                }
+
+                public void process(Exchange exchange) throws Exception {
+                    AsyncProcessorHelper.process(this, exchange);
+                }
+            };
+        }
+
+        public int getInvoked() {
+            return invoked;
+        }
+    }
+
+
+}
\ No newline at end of file

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/MyAsyncProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/MyAsyncProducer.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/MyAsyncProducer.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/async/MyAsyncProducer.java Tue Jun 29 12:47:06 2010
@@ -58,6 +58,8 @@ public class MyAsyncProducer extends Def
                 } else {
                     String reply = getEndpoint().getReply();
                     exchange.getOut().setBody(reply);
+                    // propagate headers
+                    exchange.getOut().setHeaders(exchange.getIn().getHeaders());
                     LOG.info("Setting reply " + reply);
                 }
 

Modified: camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAccessPolicy.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAccessPolicy.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAccessPolicy.java (original)
+++ camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAccessPolicy.java Tue Jun 29 12:47:06 2010
@@ -32,7 +32,6 @@ public class SpringSecurityAccessPolicy 
 
         this.configAttributeDefinition = (accessValues.length > 0)
             ? new ConfigAttributeDefinition(accessValues) : null;
-
     }
     
     public ConfigAttributeDefinition getConfigAttributeDefinition() {

Modified: camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java (original)
+++ camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java Tue Jun 29 12:47:06 2010
@@ -50,14 +50,12 @@ public class SpringSecurityAuthorization
     private AuthenticationAdapter authenticationAdapter;
     private ApplicationEventPublisher eventPublisher;
     private SpringSecurityAccessPolicy accessPolicy;
-    
     private boolean alwaysReauthenticate;
     private boolean useThreadSecurityContext = true;
-    
 
     public Processor wrap(RouteContext routeContext, Processor processor) {
         // wrap the processor with authorizeDelegateProcessor
-        return new AuthorizeDelegateProcess(processor); 
+        return new AuthorizeDelegateProcess(processor);
     }
     
     protected void beforeProcess(Exchange exchange) throws Exception {
@@ -128,7 +126,6 @@ public class SpringSecurityAuthorization
     }
     
     private Authentication authenticateIfRequired(Authentication authentication) {
-                    
         if (authentication.isAuthenticated() && !alwaysReauthenticate) {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Previously Authenticated: " + authentication);
@@ -137,11 +134,9 @@ public class SpringSecurityAuthorization
         }
 
         authentication = authenticationManager.authenticate(authentication);
-        
         if (LOG.isDebugEnabled()) {
             LOG.debug("Successfully Authenticated: " + authentication);
         }
-
         return authentication;
     }
     
@@ -178,7 +173,6 @@ public class SpringSecurityAuthorization
 
     public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
         this.eventPublisher = applicationEventPublisher;
-        
     }
     
     public void setSpringSecurityAccessPolicy(SpringSecurityAccessPolicy policy) {

Modified: camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/NamespaceHandler.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/NamespaceHandler.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/NamespaceHandler.java (original)
+++ camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/NamespaceHandler.java Tue Jun 29 12:47:06 2010
@@ -22,7 +22,6 @@ public class NamespaceHandler extends Na
 
     public void init() {
         registerBeanDefinitionParser("authorizationPolicy", new SpringSecurityAuthorizationPolicyParser());
-        
     }
 
 }

Modified: camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/SpringSecurityAuthorizationPolicyParser.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/SpringSecurityAuthorizationPolicyParser.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/SpringSecurityAuthorizationPolicyParser.java (original)
+++ camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/SpringSecurityAuthorizationPolicyParser.java Tue Jun 29 12:47:06 2010
@@ -24,7 +24,6 @@ import org.apache.camel.spring.handler.B
 import org.apache.camel.util.ObjectHelper;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 
-
 public class SpringSecurityAuthorizationPolicyParser extends BeanDefinitionParser {
 
     public SpringSecurityAuthorizationPolicyParser() {
@@ -38,11 +37,9 @@ public class SpringSecurityAuthorization
         } else {
             return super.isEligibleAttribute(attributeName);
         }
-        
     }
     
     protected void postProcess(BeanDefinitionBuilder builder, Element element) {
-        
         setReferenceIfAttributeDefine(builder, element, "accessDecisionManager");
         setReferenceIfAttributeDefine(builder, element, "authenticationManager");
         if (ObjectHelper.isNotEmpty(element.getAttribute("authenticationAdapter"))) {
@@ -51,6 +48,7 @@ public class SpringSecurityAuthorization
         if (ObjectHelper.isNotEmpty(element.getAttribute("id"))) {
             builder.addPropertyValue("id", element.getAttribute("id"));
         }
+
         BeanDefinitionBuilder accessPolicyBuilder = BeanDefinitionBuilder.genericBeanDefinition(
             SpringSecurityAccessPolicy.class.getCanonicalName());
         accessPolicyBuilder.addConstructorArgValue(element.getAttribute("access"));

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandler.java Tue Jun 29 12:47:06 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.spring.spi;
 
+import org.apache.camel.AsyncCallback;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Predicate;
@@ -76,7 +77,10 @@ public class TransactionErrorHandler ext
                 + "[" + getOutput() + "]";
     }
 
-    public void process(final Exchange exchange) throws Exception {
+    @Override
+    public void process(Exchange exchange) throws Exception {
+        // we have to run this synchronously as Spring Transaction does *not* support
+        // using multiple threads to span a transaction
         if (exchange.getUnitOfWork().isTransactedBy(transactionTemplate)) {
             // already transacted by this transaction template
             // so lets just let the regular default error handler process it
@@ -87,12 +91,29 @@ public class TransactionErrorHandler ext
         }
     }
 
-    protected void processByRegularErrorHandler(Exchange exchange) {
+    @Override
+    public boolean process(Exchange exchange, AsyncCallback callback) {
+        // invoke ths synchronous method as Spring Transaction does *not* support
+        // using multiple threads to span a transaction
         try {
-            super.process(exchange);
-        } catch (Exception e) {
+            process(exchange);
+        } catch (Throwable e) {
             exchange.setException(e);
         }
+
+        // notify callback we are done synchronously
+        callback.done(true);
+        return true;
+    }
+
+    protected void processByRegularErrorHandler(Exchange exchange) throws Exception {
+        // must invoke the async method and provide an empty callback
+        // to have it process by the error handler (because we invoke super)
+        super.process(exchange, new AsyncCallback() {
+            public void done(boolean doneSync) {
+                // noop
+            }
+        });
     }
 
     protected void processInTransaction(final Exchange exchange) throws Exception {
@@ -139,7 +160,11 @@ public class TransactionErrorHandler ext
 
                 // and now let process the exchange
                 try {
-                    TransactionErrorHandler.super.process(exchange);
+                    TransactionErrorHandler.super.process(exchange, new AsyncCallback() {
+                        public void done(boolean doneSync) {
+                            // noop
+                        }
+                    });
                 } catch (Exception e) {
                     exchange.setException(e);
                 }

Modified: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceMixedTransactedTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceMixedTransactedTest.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceMixedTransactedTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceMixedTransactedTest.java Tue Jun 29 12:47:06 2010
@@ -29,7 +29,7 @@ public class TransactionalClientDataSour
         try {
             template.sendBody("direct:fail", "Hello World");
         } catch (RuntimeCamelException e) {
-            // expeced as we fail
+            // expected as we fail
             assertTrue(e.getCause() instanceof IllegalArgumentException);
             assertEquals("We don't have Donkeys, only Camels", e.getCause().getMessage());
         }

Modified: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceNotTransactedTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceNotTransactedTest.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceNotTransactedTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceNotTransactedTest.java Tue Jun 29 12:47:06 2010
@@ -29,7 +29,7 @@ public class TransactionalClientDataSour
         try {
             template.sendBody("direct:fail", "Hello World");
         } catch (RuntimeCamelException e) {
-            // expeced as we fail
+            // expected as we fail
             assertTrue(e.getCause() instanceof IllegalArgumentException);
             assertEquals("We don't have Donkeys, only Camels", e.getCause().getMessage());
         }

Modified: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithOnExceptionHandledAndRollbackTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithOnExceptionHandledAndRollbackTest.java?rev=958951&r1=958950&r2=958951&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithOnExceptionHandledAndRollbackTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithOnExceptionHandledAndRollbackTest.java Tue Jun 29 12:47:06 2010
@@ -17,6 +17,7 @@
 package org.apache.camel.spring.interceptor;
 
 import org.apache.camel.CamelExecutionException;
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringRouteBuilder;