This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch exchange-factory
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/exchange-factory by this push:
     new 7f67978  CAMEL-16222: PooledExchangeFactory experiment
7f67978 is described below

commit 7f679785ef1a2aae3ac56038eedbe58d1d652061
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Fri Feb 19 14:41:44 2021 +0100

    CAMEL-16222: PooledExchangeFactory experiment
---
 .../java/org/apache/camel/impl/engine/PooledExchangeFactory.java  | 8 ++++++++
 .../src/main/java/org/apache/camel/support/DefaultExchange.java   | 6 ++----
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledExchangeFactory.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledExchangeFactory.java
index 6f44fb1..5e4b285 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledExchangeFactory.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledExchangeFactory.java
@@ -43,6 +43,8 @@ import org.slf4j.LoggerFactory;
 public class PooledExchangeFactory extends ServiceSupport
         implements ExchangeFactory, CamelContextAware, StaticService, 
NonManagedService {
 
+    // TODO: optimize onDone lambdas as they will be created per instance, and 
we can use static linked
+
     private static final Logger LOG = 
LoggerFactory.getLogger(PooledExchangeFactory.class);
 
     private final Consumer consumer;
@@ -101,6 +103,9 @@ public class PooledExchangeFactory extends ServiceSupport
             if (autoRelease) {
                 // the consumer will either always be in auto release mode or 
not, so its safe to initialize the task only once when the exchange is created
                 answer.onDone(this::release);
+            } else {
+                // we need to signal true
+                answer.onDone(e -> true);
             }
             return answer;
         } else {
@@ -126,6 +131,9 @@ public class PooledExchangeFactory extends ServiceSupport
             if (autoRelease) {
                 // the consumer will either always be in auto release mode or 
not, so its safe to initialize the task only once when the exchange is created
                 answer.onDone(this::release);
+            } else {
+                // we need to signal true
+                answer.onDone(e -> true);
             }
             return answer;
         } else {
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java
index 1ba720a..ae08318 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java
@@ -131,7 +131,7 @@ public final class DefaultExchange implements 
ExtendedExchange {
     public void done() {
         // only need to do this if there is an onDone task
         // and use created flag to avoid doing done more than once
-        if (created > 0) {
+        if (created > 0 && onDone != null) {
             this.created = 0; // by setting to 0 we also flag that this 
exchange is done and needs to be reset to use again
             this.properties.clear();
             this.exchangeId = null;
@@ -162,9 +162,7 @@ public final class DefaultExchange implements 
ExtendedExchange {
             this.redeliveryExhausted = false;
             this.errorHandlerHandled = null;
 
-            if (onDone != null) {
-                onDone.apply(this);
-            }
+            onDone.apply(this);
         }
     }
 

Reply via email to