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

commit 870df82be40b0e5b13606b60e0ded2e75f6861f2
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu Feb 18 16:00:20 2021 +0100

    CAMEL-16222: PooledExchangeFactory experiment
---
 .../camel/component/disruptor/DisruptorConsumer.java    | 11 +++++++++++
 .../camel/component/master/EndpointUriEncodingTest.java |  2 +-
 .../main/java/org/apache/camel/spi/ExchangeFactory.java | 17 +++++++++++------
 3 files changed, 23 insertions(+), 7 deletions(-)

diff --git 
a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
 
b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
index 77b74e4..29cb921 100644
--- 
a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
+++ 
b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
@@ -192,6 +192,17 @@ public class DisruptorConsumer extends ServiceSupport 
implements Consumer, Suspe
         }
     }
 
+    @Override
+    public Exchange createExchange(boolean autoRelease) {
+        // noop
+        return null;
+    }
+
+    @Override
+    public void releaseExchange(Exchange exchange) {
+        // noop
+    }
+
     /**
      * Implementation of the {@link LifecycleAwareExchangeEventHandler} 
interface that passes all Exchanges to the
      * {@link Processor} registered at this {@link DisruptorConsumer}.
diff --git 
a/components/camel-master/src/test/java/org/apache/camel/component/master/EndpointUriEncodingTest.java
 
b/components/camel-master/src/test/java/org/apache/camel/component/master/EndpointUriEncodingTest.java
index 37c701c..c78a06c 100644
--- 
a/components/camel-master/src/test/java/org/apache/camel/component/master/EndpointUriEncodingTest.java
+++ 
b/components/camel-master/src/test/java/org/apache/camel/component/master/EndpointUriEncodingTest.java
@@ -86,7 +86,7 @@ public class EndpointUriEncodingTest extends CamelTestSupport 
{
                     return new DefaultConsumer(this, processor) {
                         @Override
                         public void start() {
-                            Exchange exchange = createExchange();
+                            Exchange exchange = createExchange(true);
                             exchange.getMessage().setHeader("foo", foo);
                             exchange.getMessage().setHeader("bar", bar);
                             try {
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/ExchangeFactory.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/ExchangeFactory.java
index 8e429f2..a666bdd 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ExchangeFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ExchangeFactory.java
@@ -21,17 +21,22 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 
 /**
- * Factory for creating {@link Exchange}.
- *
+ * Factory used by {@link Consumer} to create Camel {@link Exchange} holding 
the incoming message received by the consumer.
+ * <p/>
+ * This factory is only for {@link Consumer}'s to give control on how {@link 
Exchange} are created and comes into Camel.
+ * Each Camel component that provides a {@link Consumer} should use this 
{@link ExchangeFactory}.
+ * There may be other parts in Camel that creates {@link Exchange} such as sub 
exchanges from Splitter EIP,
+ * but they are not part of this contract as we only want to control the 
created {@link Exchange} that comes
+ * into Camel via {@link Consumer} or {@link org.apache.camel.PollingConsumer}.
+ * <p/>
  * The factory is pluggable which allows to use different strategies. The 
default factory will create a new
  * {@link Exchange} instance, and the pooled factory will pool and reuse 
exchanges.
  */
 public interface ExchangeFactory {
 
-    // TODO: new factory per consumer so there is no single race bottleneck
-    // TODO: only use factory on route consumer to limit its scope to most 
significant impact
     // TODO: release from extended exchange without onCompletion (overhead)
     // TODO: reuse unit of work (expensive to create)
+    // TODO: release via DoneUoW in less expensive way
 
     /**
      * Service factory key.
@@ -41,8 +46,8 @@ public interface ExchangeFactory {
     /**
      * Creates a new {@link ExchangeFactory} that is private for the given 
consumer.
      *
-     * @param consumer the consumer that will use the created {@link 
ExchangeFactory}
-     * @return the created factory.
+     * @param  consumer the consumer that will use the created {@link 
ExchangeFactory}
+     * @return          the created factory.
      */
     ExchangeFactory newExchangeFactory(Consumer consumer);
 

Reply via email to