Author: ningjiang
Date: Mon Jun  7 10:37:16 2010
New Revision: 952183

URL: http://svn.apache.org/viewvc?rev=952183&view=rev
Log:
CAMEL-2795 ProducerCache send() should use the UnitOfWork to wrap the exchange

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ProducerCache.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ProducerCache.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ProducerCache.java?rev=952183&r1=952182&r2=952183&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ProducerCache.java 
(original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ProducerCache.java 
Mon Jun  7 10:37:16 2010
@@ -28,6 +28,7 @@ import org.apache.camel.Producer;
 import org.apache.camel.ProducerCallback;
 import org.apache.camel.ServicePoolAware;
 import org.apache.camel.spi.ServicePool;
+import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.util.CamelContextHelper;
 import org.apache.camel.util.EventHelper;
 import org.apache.camel.util.LRUCache;
@@ -225,11 +226,21 @@ public class ProducerCache extends Servi
                 if (exchange == null) {
                     exchange = pattern != null ? 
producer.createExchange(pattern) : producer.createExchange();
                 }
-
+                
                 if (processor != null) {
                     // lets populate using the processor callback
                     processor.process(exchange);
                 }
+                
+                // create the unit of work 
+                DefaultUnitOfWork uow = new DefaultUnitOfWork(exchange);
+                try {
+                    uow.start();
+                } catch (Exception e) {
+                    throw wrapRuntimeCamelException(e);
+                }
+                exchange.setUnitOfWork(uow);
+                
 
                 // now lets dispatch
                 if (LOG.isDebugEnabled()) {
@@ -243,10 +254,20 @@ public class ProducerCache extends Servi
                 StopWatch watch = new StopWatch();
                 try {
                     producer.process(exchange);
-                } finally {
+                } finally {                    
                     // emit event that the exchange was sent to the endpoint
                     long timeTaken = watch.stop();
                     EventHelper.notifyExchangeSent(exchange.getContext(), 
exchange, endpoint, timeTaken);
+                    if (exchange.getUnitOfWork() != null) {
+                        exchange.getUnitOfWork().done(exchange);
+                    }
+                    try {
+                        uow.stop();
+                    } catch (Exception e) {
+                        LOG.warn("Exception occurred during stopping 
UnitOfWork for Exchange: " + exchange
+                            + ". This exception will be ignored.");
+                    }
+                    exchange.setUnitOfWork(null);
                 }
                 return exchange;
             }

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java?rev=952183&r1=952182&r2=952183&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java
 Mon Jun  7 10:37:16 2010
@@ -334,14 +334,17 @@ public class NotifyBuilderTest extends C
     }
 
     public void testWhenExchangeDoneWithDelay() throws Exception {
+        // There are two done event, one for the exchange which is created by 
DefaultProducerTemplate
+        // the other is for the exchange which is created by route context
         NotifyBuilder notify = new NotifyBuilder(context)
-                .whenDone(1)
+                .whenDone(2)
                 .create();
 
         long start = System.currentTimeMillis();
         template.sendBody("seda:cheese", "Hello Cheese");
         long end = System.currentTimeMillis();
         assertTrue("Should be faster than: " + (end - start), (end - start) < 
2000);
+        
 
         assertEquals(false, notify.matches());
 
@@ -353,8 +356,10 @@ public class NotifyBuilderTest extends C
     }
 
     public void testWhenExchangeDoneAndTimeoutWithDelay() throws Exception {
+        // There are two done event, one for the exchange which is created by 
DefaultProducerTemplate
+        // the other is for the exchange which is created by route context
         NotifyBuilder notify = new NotifyBuilder(context)
-                .whenDone(1)
+                .whenDone(2)
                 .create();
 
         template.sendBody("seda:cheese", "Hello Cheese");

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java?rev=952183&r1=952182&r2=952183&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java
 Mon Jun  7 10:37:16 2010
@@ -91,10 +91,9 @@ public class EventNotifierEventsTest ext
         assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(4));
         assertIsInstanceOf(ExchangeSentEvent.class, events.get(5));
         assertIsInstanceOf(ExchangeSentEvent.class, events.get(6));
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(7));
-
         // this is the sent using the produce template to start the test
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(8));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(7));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(8));
 
         context.stop();
 
@@ -119,10 +118,10 @@ public class EventNotifierEventsTest ext
         assertIsInstanceOf(RouteStartedEvent.class, events.get(1));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(2));
         assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(4));
-        assertIsInstanceOf(ExchangeFailureEvent.class, events.get(5));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(4));        
         // this is the sent using the produce template to start the test
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(6));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(5));
+        assertIsInstanceOf(ExchangeFailureEvent.class, events.get(6));
 
         context.stop();
 

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java?rev=952183&r1=952182&r2=952183&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java
 Mon Jun  7 10:37:16 2010
@@ -107,8 +107,9 @@ public class EventNotifierFailureHandled
         assertEquals("mock://dead", send.getDestination().getEndpointUri());
 
         // dead letter channel will mark the exchange as completed
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(6));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(7));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(6));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(7));
+        
     }
 
     public void testExchangeOnException() throws Exception {
@@ -137,8 +138,8 @@ public class EventNotifierFailureHandled
         assertEquals("should NOT be DLC", false, e.isDeadLetterChannel());
 
         // dead letter channel will mark the exchange as completed
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(6));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(7));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(6));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(7));
     }
 
 }
\ No newline at end of file

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java?rev=952183&r1=952182&r2=952183&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java
 Mon Jun  7 10:37:16 2010
@@ -112,16 +112,17 @@ public class MultipleEventNotifierEvents
         assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3));
         assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(4));
         assertIsInstanceOf(ExchangeSentEvent.class, events.get(5));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(6));
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(7));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(8));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(6));        
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(7));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(8));
 
         assertEquals(5, events2.size());
         assertIsInstanceOf(ExchangeCreatedEvent.class, events2.get(0));
         assertIsInstanceOf(ExchangeSentEvent.class, events2.get(1));
         assertIsInstanceOf(ExchangeSentEvent.class, events2.get(2));
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events2.get(3));
-        assertIsInstanceOf(ExchangeSentEvent.class, events2.get(4));
+        assertIsInstanceOf(ExchangeSentEvent.class, events2.get(3));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events2.get(4));
+        
 
         context.stop();
 
@@ -149,15 +150,17 @@ public class MultipleEventNotifierEvents
         assertIsInstanceOf(RouteStartedEvent.class, events.get(2));
         assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3));
         assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(4));
-        assertIsInstanceOf(ExchangeFailureEvent.class, events.get(5));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(6));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(5));
+        assertIsInstanceOf(ExchangeFailureEvent.class, events.get(6));
+        
 
         assertEquals(3, events2.size());
 
         context.stop();
         assertIsInstanceOf(ExchangeCreatedEvent.class, events2.get(0));
-        assertIsInstanceOf(ExchangeFailureEvent.class, events2.get(1));
-        assertIsInstanceOf(ExchangeSentEvent.class, events2.get(2));
+        assertIsInstanceOf(ExchangeSentEvent.class, events2.get(1));
+        assertIsInstanceOf(ExchangeFailureEvent.class, events2.get(2));
+        
 
         assertEquals(11, events.size());
         assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(7));


Reply via email to