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 d0500ed  CAMEL-16222: PooledExchangeFactory experiment
d0500ed is described below

commit d0500edf5055beb956e1e9fa7524382d620a9437
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Mon Feb 22 17:02:06 2021 +0100

    CAMEL-16222: PooledExchangeFactory experiment
---
 .../camel/component/telegram/TelegramConsumer.java     | 11 ++++++++++-
 .../camel/component/telegram/TelegramEndpoint.java     | 10 ----------
 .../component/thrift/server/ThriftMethodHandler.java   | 18 ++++++++++++------
 3 files changed, 22 insertions(+), 17 deletions(-)

diff --git 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramConsumer.java
 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramConsumer.java
index c1d0c90..e5b86d2 100644
--- 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramConsumer.java
+++ 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramConsumer.java
@@ -28,6 +28,8 @@ import org.apache.camel.support.ScheduledPollConsumer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static 
org.apache.camel.component.telegram.util.TelegramMessageHelper.populateExchange;
+
 /**
  * A polling consumer that reads messages from a chat using the Telegram bot 
API.
  */
@@ -87,7 +89,7 @@ public class TelegramConsumer extends ScheduledPollConsumer {
 
             LOG.debug("Received update from Telegram service: {}", update);
 
-            Exchange exchange = endpoint.createExchange(update);
+            Exchange exchange = createExchange(update);
             getProcessor().process(exchange);
         }
     }
@@ -99,4 +101,11 @@ public class TelegramConsumer extends ScheduledPollConsumer 
{
             LOG.debug("Next Telegram offset will be {}", this.offset);
         }
     }
+
+    private Exchange createExchange(Update update) {
+        Exchange exchange = createExchange(true);
+        populateExchange(exchange, update);
+        return exchange;
+    }
+
 }
diff --git 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java
 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java
index 3402f44..535b20f 100644
--- 
a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java
+++ 
b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java
@@ -22,11 +22,9 @@ import java.util.List;
 import org.apache.camel.Category;
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
-import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.component.telegram.model.Update;
 import 
org.apache.camel.component.telegram.service.TelegramServiceRestBotAPIAdapter;
 import org.apache.camel.component.webhook.WebhookCapableEndpoint;
 import org.apache.camel.component.webhook.WebhookConfiguration;
@@ -43,8 +41,6 @@ import org.asynchttpclient.proxy.ProxyType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static 
org.apache.camel.component.telegram.util.TelegramMessageHelper.populateExchange;
-
 /**
  * Send and receive messages acting as a Telegram Bot <a 
href="https://core.telegram.org/bots/api";>Telegram Bot API</a>.
  */
@@ -129,12 +125,6 @@ public class TelegramEndpoint extends 
ScheduledPollEndpoint implements WebhookCa
         return consumer;
     }
 
-    public Exchange createExchange(Update update) {
-        Exchange exchange = super.createExchange();
-        populateExchange(exchange, update);
-        return exchange;
-    }
-
     @Override
     public Processor createWebhookHandler(Processor next) {
         return new TelegramWebhookProcessor(next);
diff --git 
a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftMethodHandler.java
 
b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftMethodHandler.java
index b2631c0..eca3382 100644
--- 
a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftMethodHandler.java
+++ 
b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftMethodHandler.java
@@ -50,7 +50,7 @@ public class ThriftMethodHandler implements MethodHandler {
             // {org.apache.thrift.async.AsyncMethodCallback}
             if (args.length > 0 && args[args.length - 1] instanceof 
AsyncMethodCallback) {
                 AsyncMethodCallback callback = (AsyncMethodCallback) 
args[args.length - 1];
-                Exchange exchange = endpoint.createExchange();
+                Exchange exchange = consumer.createExchange(false);
                 if (args.length >= 2) {
                     
exchange.getIn().setBody(Arrays.asList(Arrays.copyOfRange(args, 0, args.length 
- 1)));
                 } else {
@@ -84,16 +84,22 @@ public class ThriftMethodHandler implements MethodHandler {
                         callback.onError(new TException("Unable process null 
message"));
                     }
 
+                    consumer.releaseExchange(exchange, false);
                     callback.onComplete(response);
                 });
             } else {
-                Exchange exchange = endpoint.createExchange();
-                exchange.getIn().setBody(Arrays.asList(args));
-                
exchange.getIn().setHeader(ThriftConstants.THRIFT_METHOD_NAME_HEADER, 
thisMethod.getName());
+                Object responseBody = null;
+                Exchange exchange = consumer.createExchange(false);
+                try {
+                    exchange.getIn().setBody(Arrays.asList(args));
+                    
exchange.getIn().setHeader(ThriftConstants.THRIFT_METHOD_NAME_HEADER, 
thisMethod.getName());
 
-                consumer.getProcessor().process(exchange);
+                    consumer.getProcessor().process(exchange);
+                    responseBody = 
exchange.getIn().getBody(thisMethod.getReturnType());
+                } finally {
+                    consumer.releaseExchange(exchange, false);
+                }
 
-                Object responseBody = 
exchange.getIn().getBody(thisMethod.getReturnType());
                 if (responseBody == null && 
!thisMethod.getReturnType().equals(Void.TYPE)) {
                     throw new TApplicationException("Return type requires not 
empty body");
                 }

Reply via email to