Bastien Meert created CAMEL-13403:
-------------------------------------
Summary: Default allowUseOriginalMessage="false" prevent
inflightRepository using jms with transferExchange="true"
Key: CAMEL-13403
URL: https://issues.apache.org/jira/browse/CAMEL-13403
Project: Camel
Issue Type: Bug
Components: camel-jms
Reporter: Bastien Meert
Attachments: JmsInOutTransferExchangeInflightRepositoryFlushTest.java
When using transferExchange="true" in a JMS consumer (assuming producer also
did), camel is breaking the match between key and exchange in
inflightRepository if allowUseOriginalMessage="true" is not set in camel
context.
This can lead to java heap space out of memory because camel is not able to
clear the inflightRepository from old Exchange.
Identified behaviour :
# Camel receive the JMS message
## If allowUseOriginalMessage=true : parse JMS message to build Exchange
instance
## If not : generate a new Instance
# Camel add the Exchange to inflightRepository
# On accessing the ExchangeBody, if it was not parsed yet camel rebuild the
Exchange but do not change the key(exchangeId) in the inflightRepository
# When the route process is over the message is not disposed if the key has
been changed in the Exchange but not inflightRepository
# Sooner or later the heap space if full and application crash.
The problem appeared in 2.18.0 and is present up until 2.23.1 (tested with
attached test case). Release note of 2.18.0 says :
"Optimize Camel to only enable AllowUseOriginalMessage if in use by error
handler or OnCompletion<[http://camel.apache.org/oncompletion.html]>. End user
who manually access the original message using the Java API must configure
AllowUseOriginalMessage=true."
Problem is transferExchange="true" case also needs
allowUseOriginalMessage="true" even if the not accessing original message by
Java API an other way.
Easy work around : set allowUseOriginalMessage="true" in camel context
configuration
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)