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 cd59216c080d07436f85a37278d66f6193cd48ea
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Tue Feb 23 14:42:53 2021 +0100

    CAMEL-16222: PooledExchangeFactory experiment
---
 .../spring/integration/SpringIntegrationConsumer.java   | 17 ++++++++++++++---
 .../spring/integration/SpringIntegrationMessage.java    |  6 ++++++
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git 
a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationConsumer.java
 
b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationConsumer.java
index 0649696..256f75c 100644
--- 
a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationConsumer.java
+++ 
b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationConsumer.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.spring.integration;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.support.DefaultConsumer;
@@ -99,15 +100,23 @@ public class SpringIntegrationConsumer extends 
DefaultConsumer implements Messag
     public void handleMessage(org.springframework.messaging.Message<?> 
siInMessage) {
         // we received a message from spring integration
         // wrap that in a Camel Exchange and process it
-        Exchange exchange
-                = getEndpoint().createExchange(getEndpoint().isInOut() ? 
ExchangePattern.InOut : ExchangePattern.InOnly);
-        exchange.setIn(new SpringIntegrationMessage(exchange, siInMessage));
+        Exchange exchange = createExchange(false);
+        exchange.setPattern(getEndpoint().isInOut() ? ExchangePattern.InOut : 
ExchangePattern.InOnly);
+
+        // optimize and reuse exchange
+        SpringIntegrationMessage sim = 
exchange.adapt(ExtendedExchange.class).getInOrNull(SpringIntegrationMessage.class);
+        if (sim == null) {
+            exchange.setIn(new SpringIntegrationMessage(exchange, 
siInMessage));
+        } else {
+            sim.setMessage(siInMessage);
+        }
 
         // process the exchange
         try {
             getProcessor().process(exchange);
         } catch (Exception e) {
             getExceptionHandler().handleException("Error processing exchange", 
exchange, e);
+            releaseExchange(exchange, false);
             return;
         }
 
@@ -140,6 +149,8 @@ public class SpringIntegrationConsumer extends 
DefaultConsumer implements Messag
             org.springframework.messaging.Message<?> siOutMessage
                     = 
SpringIntegrationBinding.storeToSpringIntegrationMessage(exchange.getOut());
 
+            releaseExchange(exchange, false);
+
             // send the message to spring integration
             LOG.debug("Sending {} to ReplyChannel: {}", siOutMessage, reply);
             reply.send(siOutMessage);
diff --git 
a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationMessage.java
 
b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationMessage.java
index d3ced2e..778b2bc 100644
--- 
a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationMessage.java
+++ 
b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationMessage.java
@@ -44,6 +44,12 @@ public class SpringIntegrationMessage extends DefaultMessage 
{
         this.siMessage = message;
     }
 
+    @Override
+    public void reset() {
+        super.reset();
+        siMessage = null;
+    }
+
     public void setMessage(org.springframework.messaging.Message<?> message) {
         this.siMessage = message;
     }

Reply via email to