Repository: camel Updated Branches: refs/heads/camel-2.13.x 1e7118362 -> 415604c05 refs/heads/camel-2.14.x abaaa9e3e -> 9fae35f4b
CAMEL-8204 Added the putIfAbsent method to avoid overriding the old key value as Claus suggested Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/9fae35f4 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/9fae35f4 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/9fae35f4 Branch: refs/heads/camel-2.14.x Commit: 9fae35f4b812f3fb7fe7bc1063630205d3cc1cf9 Parents: abaaa9e Author: Claus Ibsen <davscl...@apache.org> Authored: Sun Jan 11 14:04:24 2015 +0100 Committer: Willem Jiang <willem.ji...@gmail.com> Committed: Mon Jan 12 10:17:47 2015 +0800 ---------------------------------------------------------------------- .../jms/reply/CorrelationTimeoutMap.java | 25 ++++++++++++++++++++ .../jms/reply/ReplyManagerSupport.java | 6 ++--- 2 files changed, 28 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/9fae35f4/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/CorrelationTimeoutMap.java ---------------------------------------------------------------------- diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/CorrelationTimeoutMap.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/CorrelationTimeoutMap.java index d72c8d0..e0e6731 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/CorrelationTimeoutMap.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/CorrelationTimeoutMap.java @@ -91,6 +91,31 @@ public class CorrelationTimeoutMap extends DefaultTimeoutMap<String, ReplyHandle } @Override + public ReplyHandler putIfAbsent(String key, ReplyHandler value, long timeoutMillis) { + try { + if (listener != null) { + listener.onPut(key); + } + } catch (Throwable e) { + // ignore + } + + ReplyHandler result; + if (timeoutMillis <= 0) { + // no timeout (must use Integer.MAX_VALUE) + result = super.putIfAbsent(key, value, Integer.MAX_VALUE); + } else { + result = super.putIfAbsent(key, value, timeoutMillis); + } + if (result == null) { + log.trace("Added correlationID: {} to timeout after: {} millis", key, timeoutMillis); + } else { + log.trace("Duplicate correlationID: {} detected", key); + } + return result; + } + + @Override public ReplyHandler remove(String key) { try { if (listener != null) { http://git-wip-us.apache.org/repos/asf/camel/blob/9fae35f4/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/ReplyManagerSupport.java ---------------------------------------------------------------------- diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/ReplyManagerSupport.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/ReplyManagerSupport.java index 30e5919..83a7729 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/ReplyManagerSupport.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/ReplyManagerSupport.java @@ -142,13 +142,13 @@ public abstract class ReplyManagerSupport extends ServiceSupport implements Repl if (timeout) { // timeout occurred do a WARN log so its easier to spot in the logs if (log.isWarnEnabled()) { - log.warn("Timeout occurred after {} millis waiting for reply message with correlationID [{}]." + log.warn("Timeout occurred after {} millis waiting for reply message with correlationID [{}] on destination {}." + " Setting ExchangeTimedOutException on {} and continue routing.", - new Object[]{holder.getRequestTimeout(), holder.getCorrelationId(), ExchangeHelper.logIds(exchange)}); + new Object[]{holder.getRequestTimeout(), holder.getCorrelationId(), replyTo, ExchangeHelper.logIds(exchange)}); } // no response, so lets set a timed out exception - String msg = "reply message with correlationID: " + holder.getCorrelationId() + " not received"; + String msg = "reply message with correlationID: " + holder.getCorrelationId() + " not received on destination: " + replyTo; exchange.setException(new ExchangeTimedOutException(exchange, holder.getRequestTimeout(), msg)); } else { JmsMessage response = new JmsMessage(message, endpoint.getBinding());