You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2010/06/07 12:37:16 UTC
svn commit: r952183 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/impl/ test/java/org/apache/camel/builder/
test/java/org/apache/camel/management/
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));