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 230dbe724d9dd45f6bfce5ee04264268d6fa80fb Author: Claus Ibsen <[email protected]> AuthorDate: Fri Feb 19 16:31:28 2021 +0100 CAMEL-16222: PooledExchangeFactory experiment --- core/camel-api/src/main/java/org/apache/camel/Message.java | 7 +++++++ .../main/java/org/apache/camel/support/DefaultExchange.java | 13 +++++++++++-- .../main/java/org/apache/camel/support/DefaultMessage.java | 8 ++++++++ .../main/java/org/apache/camel/support/MessageSupport.java | 7 +++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/Message.java b/core/camel-api/src/main/java/org/apache/camel/Message.java index 3f14c01..df8dcbc 100644 --- a/core/camel-api/src/main/java/org/apache/camel/Message.java +++ b/core/camel-api/src/main/java/org/apache/camel/Message.java @@ -33,6 +33,13 @@ import org.apache.camel.spi.HeadersMapFactory; public interface Message { /** + * Clears the message from user data so it may be reused. + * <p/> + * <b>Important:</b> This API is NOT intended for Camel end users, but used internally by Camel itself. + */ + void reset(); + + /** * Returns the id of the message. * <p/> * By default the message uses the same id as {@link Exchange#getExchangeId()} as messages are associated with the 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 4ddeb65..371b991 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 @@ -50,6 +50,7 @@ public final class DefaultExchange implements ExtendedExchange { private long created; // optimize to create properties always and with a reasonable small size private final Map<String, Object> properties = new ConcurrentHashMap<>(8); + private Class originalInClassType; private Message in; private Message out; private Exception exception; @@ -142,8 +143,12 @@ public final class DefaultExchange implements ExtendedExchange { 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; - // TODO: optimize in/out to keep as default message (if original message is this kind) - this.in = null; + if (in != null && in.getClass() == originalInClassType) { + // okay we can reuse in + in.reset(); + } else { + this.in = null; + } this.out = null; this.exception = null; // reset uow @@ -396,6 +401,7 @@ public final class DefaultExchange implements ExtendedExchange { public Message getIn() { if (in == null) { in = new DefaultMessage(getContext()); + originalInClassType = in.getClass(); configureMessage(in); } return in; @@ -419,6 +425,9 @@ public final class DefaultExchange implements ExtendedExchange { public void setIn(Message in) { this.in = in; configureMessage(in); + if (in != null) { + this.originalInClassType = in.getClass(); + } } @Override diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessage.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessage.java index 7e30d6f..f89ac01 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessage.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultMessage.java @@ -52,6 +52,14 @@ public class DefaultMessage extends MessageSupport { } @Override + public void reset() { + super.reset(); + if (headers != null) { + headers.clear(); + } + } + + @Override public Object getHeader(String name) { if (headers == null) { // force creating headers diff --git a/core/camel-support/src/main/java/org/apache/camel/support/MessageSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/MessageSupport.java index 6c1a2b1..48fcd71 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/MessageSupport.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/MessageSupport.java @@ -42,6 +42,13 @@ public abstract class MessageSupport implements Message, CamelContextAware, Data private DataType dataType; @Override + public void reset() { + body = null; + messageId = null; + dataType = null; + } + + @Override public String toString() { // do not output information about the message as it may contain sensitive information if (messageId != null) {
