001 package com.mockrunner.mock.jms;
002
003 import javax.jms.JMSException;
004 import javax.jms.Message;
005 import javax.jms.Queue;
006 import javax.jms.QueueReceiver;
007
008 /**
009 * Mock implementation of JMS <code>QueueReceiver</code>.
010 */
011 public class MockQueueReceiver extends MockMessageConsumer implements QueueReceiver
012 {
013 private MockSession session;
014 private MockQueue queue;
015
016 public MockQueueReceiver(MockConnection connection, MockQueueSession session, MockQueue queue)
017 {
018 this(connection, session, queue, null);
019 }
020
021 public MockQueueReceiver(MockConnection connection, MockSession session, MockQueue queue, String messageSelector)
022 {
023 super(connection, messageSelector);
024 this.session = session;
025 this.queue = queue;
026 }
027
028 public Queue getQueue() throws JMSException
029 {
030 getConnection().throwJMSException();
031 return queue;
032 }
033
034 public Message receive() throws JMSException
035 {
036 getConnection().throwJMSException();
037 if(isClosed())
038 {
039 throw new JMSException("Receiver is closed");
040 }
041 if(queue.isEmpty()) return null;
042 Message message;
043 if((!getConnection().getConfigurationManager().getUseMessageSelectors()) || (null == getMessageFilter()))
044 {
045 message = queue.getMessage();
046 }
047 else
048 {
049 message = queue.getMatchingMessage(getMessageFilter());
050 }
051 if(null == message) return null;
052 if(session.isAutoAcknowledge()) message.acknowledge();
053 return message;
054 }
055 }