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; }