From 918c0c3baf27bd8e4eaed49e3bf83b68ca3eac70 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Fri, 10 Oct 2014 11:43:50 +0000 Subject: QPID-6141 : Fix recover() for onMessage client-ack sessions git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1630766 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java | 6 ++++++ .../java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) (limited to 'qpid/java') diff --git a/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java b/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java index 508aaf7518..b0b31d6e7b 100644 --- a/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java +++ b/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java @@ -300,6 +300,12 @@ public class MessageConsumerImpl implements MessageConsumer, QueueReceiver, Topi } } + Message receiveRecoveredMessage() + { + return _replaymessages.isEmpty() ? null : _replaymessages.remove(0); + + } + Message receive0(final long timeout) { diff --git a/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java b/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java index 0962e4aa37..945ae1c655 100644 --- a/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java +++ b/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java @@ -922,7 +922,15 @@ public class SessionImpl implements Session, QueueSession, TopicSession else { consumer = _messageConsumerList.remove(0); - msg = consumer.receive0(0L); + msg = consumer.receiveRecoveredMessage(); + if(msg == null) + { + msg = consumer.receive0(0L); + } + else + { + recoveredMessage = true; + } } MessageListener listener = consumer._messageListener; -- cgit v1.2.1