From f63f81f9698c284a8865d383419506f2d48ca7f5 Mon Sep 17 00:00:00 2001 From: afreyssin Date: Wed, 4 Oct 2017 07:36:32 +0000 Subject: [PATCH] Receive code from helper. --- .../joram/tools/rest/jms/ConsumerContext.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/joram/joram/tools/rest/jms/src/main/java/org/objectweb/joram/tools/rest/jms/ConsumerContext.java b/joram/joram/tools/rest/jms/src/main/java/org/objectweb/joram/tools/rest/jms/ConsumerContext.java index 359cdbb9b..42e95529d 100644 --- a/joram/joram/tools/rest/jms/src/main/java/org/objectweb/joram/tools/rest/jms/ConsumerContext.java +++ b/joram/joram/tools/rest/jms/src/main/java/org/objectweb/joram/tools/rest/jms/ConsumerContext.java @@ -26,6 +26,7 @@ import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import javax.jms.JMSConsumer; +import javax.jms.JMSContext; import javax.jms.JMSException; import javax.jms.Message; @@ -65,7 +66,7 @@ public class ConsumerContext extends SessionContext { return -1; } - public void put(long id, Message msg) { + private final void put(long id, Message msg) { if (msg == null) return; if (id > getLastId()) @@ -74,9 +75,39 @@ public class ConsumerContext extends SessionContext { } public Message getMessage(long id) { + getClientCtx().setLastActivity(System.currentTimeMillis()); return messages.get(id); } + synchronized Message receive(long timeout, long msgId) throws JMSException { + Message message = null; + if (timeout > 0) + message = getConsumer().receive(timeout); + else if (timeout == 0) + message = getConsumer().receiveNoWait(); + else { + message = getConsumer().receive(); + if (message == null) + throw new JMSException("The consumer expire (timeout)"); + } + + //update activity + getClientCtx().setLastActivity(System.currentTimeMillis()); + + if (message != null) { + if (getJmsContext().getSessionMode() == JMSContext.CLIENT_ACKNOWLEDGE) { + long id = msgId; + if (id == -1) + id = incLastId(); + put(id, message); + } else { + incLastId(); + } + } + + return message; + } + public Message removeMessage(long id) { return messages.remove(id); } -- GitLab