summaryrefslogtreecommitdiff
path: root/M4-RCs/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java
diff options
context:
space:
mode:
Diffstat (limited to 'M4-RCs/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java')
-rw-r--r--M4-RCs/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java409
1 files changed, 0 insertions, 409 deletions
diff --git a/M4-RCs/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java b/M4-RCs/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java
deleted file mode 100644
index 7d535643c0..0000000000
--- a/M4-RCs/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java
+++ /dev/null
@@ -1,409 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.qpid.client;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.qpid.client.message.*;
-import org.apache.qpid.client.protocol.AMQProtocolHandler;
-import org.apache.qpid.framing.FieldTable;
-import org.apache.qpid.AMQException;
-import org.apache.qpid.protocol.AMQConstant;
-import org.apache.qpid.transport.*;
-import org.apache.qpid.QpidException;
-import org.apache.qpid.filter.MessageFilter;
-import org.apache.qpid.filter.JMSSelectorFilter;
-
-import javax.jms.InvalidSelectorException;
-import javax.jms.JMSException;
-import javax.jms.MessageListener;
-import java.util.Iterator;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-/**
- * This is a 0.10 message consumer.
- */
-public class BasicMessageConsumer_0_10 extends BasicMessageConsumer<UnprocessedMessage_0_10>
-{
-
- /**
- * This class logger
- */
- protected final Logger _logger = LoggerFactory.getLogger(getClass());
-
- /**
- * The message selector filter associated with this consumer message selector
- */
- private MessageFilter _filter = null;
-
- /**
- * The underlying QpidSession
- */
- private AMQSession_0_10 _0_10session;
-
- /**
- * Indicates whether this consumer receives pre-acquired messages
- */
- private boolean _preAcquire = true;
-
- /**
- * Indicate whether this consumer is started.
- */
- private boolean _isStarted = false;
-
- /**
- * Specify whether this consumer is performing a sync receive
- */
- private final AtomicBoolean _syncReceive = new AtomicBoolean(false);
- private String _consumerTagString;
-
- //--- constructor
- protected BasicMessageConsumer_0_10(int channelId, AMQConnection connection, AMQDestination destination,
- String messageSelector, boolean noLocal, MessageFactoryRegistry messageFactory,
- AMQSession session, AMQProtocolHandler protocolHandler,
- FieldTable arguments, int prefetchHigh, int prefetchLow,
- boolean exclusive, int acknowledgeMode, boolean noConsume, boolean autoClose)
- throws JMSException
- {
- super(channelId, connection, destination, messageSelector, noLocal, messageFactory, session, protocolHandler,
- arguments, prefetchHigh, prefetchLow, exclusive, acknowledgeMode, noConsume, autoClose);
- _0_10session = (AMQSession_0_10) session;
- if (messageSelector != null && !messageSelector.equals(""))
- {
- try
- {
- _filter = new JMSSelectorFilter(messageSelector);
- }
- catch (QpidException e)
- {
- throw new InvalidSelectorException("cannot create consumer because of selector issue");
- }
- if (destination instanceof AMQQueue)
- {
- _preAcquire = false;
- }
- }
- _isStarted = connection.started();
- }
-
-
- @Override public void setConsumerTag(int consumerTag)
- {
- super.setConsumerTag(consumerTag);
- _consumerTagString = String.valueOf(consumerTag);
- }
-
- public String getConsumerTagString()
- {
- return _consumerTagString;
- }
-
- /**
- *
- * This is invoked by the session thread when emptying the session message queue.
- * We first check if the message is valid (match the selector) and then deliver it to the
- * message listener or to the sync consumer queue.
- *
- * @param jmsMessage this message has already been processed so can't redo preDeliver
- */
- @Override public void notifyMessage(AbstractJMSMessage jmsMessage)
- {
- boolean messageOk = false;
- try
- {
- messageOk = checkPreConditions(jmsMessage);
- }
- catch (AMQException e)
- {
- _logger.error("Receivecd an Exception when receiving message",e);
- try
- {
-
- getSession().getAMQConnection().getExceptionListener()
- .onException(new JMSAMQException("Error when receiving message", e));
- }
- catch (Exception e1)
- {
- // we should silently log thie exception as it only hanppens when the connection is closed
- _logger.error("Exception when receiving message", e1);
- }
- }
- if (messageOk)
- {
- if (isMessageListenerSet() && ! getSession().prefetch())
- {
- _0_10session.getQpidSession().messageFlow(getConsumerTagString(),
- MessageCreditUnit.MESSAGE, 1);
- }
- _logger.debug("messageOk, trying to notify");
- super.notifyMessage(jmsMessage);
- }
- }
-
- //----- overwritten methods
-
- /**
- * This method is invoked when this consumer is stopped.
- * It tells the broker to stop delivering messages to this consumer.
- */
- @Override void sendCancel() throws AMQException
- {
- ((AMQSession_0_10) getSession()).getQpidSession().messageCancel(getConsumerTagString());
- ((AMQSession_0_10) getSession()).getQpidSession().sync();
- // confirm cancel
- getSession().confirmConsumerCancelled(getConsumerTag());
- ((AMQSession_0_10) getSession()).getCurrentException();
- }
-
- @Override void notifyMessage(UnprocessedMessage_0_10 messageFrame)
- {
-
- super.notifyMessage(messageFrame);
- }
-
- @Override protected void preApplicationProcessing(AbstractJMSMessage jmsMsg) throws JMSException
- {
- super.preApplicationProcessing(jmsMsg);
- if (!_session.getTransacted() && _session.getAcknowledgeMode() != org.apache.qpid.jms.Session.CLIENT_ACKNOWLEDGE)
- {
- _session.addUnacknowledgedMessage(jmsMsg.getDeliveryTag());
- }
- }
-
- @Override public AbstractJMSMessage createJMSMessageFromUnprocessedMessage(
- AMQMessageDelegateFactory delegateFactory, UnprocessedMessage_0_10 msg) throws Exception
- {
- AMQMessageDelegate_0_10.updateExchangeTypeMapping(msg.getMessageTransfer().getHeader(), ((AMQSession_0_10)getSession()).getQpidSession());
- return _messageFactory.createMessage(msg.getMessageTransfer());
- }
-
- // private methods
- /**
- * Check whether a message can be delivered to this consumer.
- *
- * @param message The message to be checked.
- * @return true if the message matches the selector and can be acquired, false otherwise.
- * @throws AMQException If the message preConditions cannot be checked due to some internal error.
- */
- private boolean checkPreConditions(AbstractJMSMessage message) throws AMQException
- {
- boolean messageOk = true;
- // TODO Use a tag for fiding out if message filtering is done here or by the broker.
- try
- {
- if (_messageSelector != null && !_messageSelector.equals(""))
- {
- messageOk = _filter.matches(message);
- }
- }
- catch (Exception e)
- {
- throw new AMQException(AMQConstant.INTERNAL_ERROR, "Error when evaluating message selector", e);
- }
-
- if (_logger.isDebugEnabled())
- {
- _logger.debug("messageOk " + messageOk);
- _logger.debug("_preAcquire " + _preAcquire);
- }
- if (!messageOk)
- {
- if (_preAcquire)
- {
- // this is the case for topics
- // We need to ack this message
- if (_logger.isDebugEnabled())
- {
- _logger.debug("filterMessage - trying to ack message");
- }
- acknowledgeMessage(message);
- }
- else
- {
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Message not OK, releasing");
- }
- releaseMessage(message);
- }
- // if we are syncrhonously waiting for a message
- // and messages are not prefetched we then need to request another one
- if(! getSession().prefetch())
- {
- _0_10session.getQpidSession().messageFlow(getConsumerTagString(),
- MessageCreditUnit.MESSAGE, 1);
- }
- }
- // now we need to acquire this message if needed
- // this is the case of queue with a message selector set
- if (!_preAcquire && messageOk && !isNoConsume())
- {
- if (_logger.isDebugEnabled())
- {
- _logger.debug("filterMessage - trying to acquire message");
- }
- messageOk = acquireMessage(message);
- _logger.debug("filterMessage - *************************************");
- _logger.debug("filterMessage - message acquire status : " + messageOk);
- _logger.debug("filterMessage - *************************************");
- }
- return messageOk;
- }
-
-
- /**
- * Acknowledge a message
- *
- * @param message The message to be acknowledged
- * @throws AMQException If the message cannot be acquired due to some internal error.
- */
- private void acknowledgeMessage(AbstractJMSMessage message) throws AMQException
- {
- if (!_preAcquire)
- {
- RangeSet ranges = new RangeSet();
- ranges.add((int) message.getDeliveryTag());
- _0_10session.messageAcknowledge
- (ranges,
- _acknowledgeMode != org.apache.qpid.jms.Session.NO_ACKNOWLEDGE);
- _0_10session.getCurrentException();
- }
- }
-
- /**
- * Release a message
- *
- * @param message The message to be released
- * @throws AMQException If the message cannot be released due to some internal error.
- */
- private void releaseMessage(AbstractJMSMessage message) throws AMQException
- {
- if (_preAcquire)
- {
- RangeSet ranges = new RangeSet();
- ranges.add((int) message.getDeliveryTag());
- _0_10session.getQpidSession().messageRelease(ranges);
- _0_10session.getCurrentException();
- }
- }
-
- /**
- * Acquire a message
- *
- * @param message The message to be acquired
- * @return true if the message has been acquired, false otherwise.
- * @throws AMQException If the message cannot be acquired due to some internal error.
- */
- private boolean acquireMessage(AbstractJMSMessage message) throws AMQException
- {
- boolean result = false;
- if (!_preAcquire)
- {
- RangeSet ranges = new RangeSet();
- ranges.add((int) message.getDeliveryTag());
-
- Acquired acq = _0_10session.getQpidSession().messageAcquire(ranges).get();
-
- RangeSet acquired = acq.getTransfers();
- if (acquired != null && acquired.size() > 0)
- {
- result = true;
- }
- }
- return result;
- }
-
-
- public void setMessageListener(final MessageListener messageListener) throws JMSException
- {
- super.setMessageListener(messageListener);
- if (messageListener != null && ! getSession().prefetch())
- {
- _0_10session.getQpidSession().messageFlow(getConsumerTagString(),
- MessageCreditUnit.MESSAGE, 1);
- }
- if (messageListener != null && !_synchronousQueue.isEmpty())
- {
- Iterator messages=_synchronousQueue.iterator();
- while (messages.hasNext())
- {
- AbstractJMSMessage message=(AbstractJMSMessage) messages.next();
- messages.remove();
- _session.rejectMessage(message, true);
- }
- }
- }
-
- public boolean isStrated()
- {
- return _isStarted;
- }
-
- public void start()
- {
- _isStarted = true;
- if (_syncReceive.get())
- {
- _0_10session.getQpidSession().messageFlow(getConsumerTagString(),
- MessageCreditUnit.MESSAGE, 1);
- }
- }
-
- public void stop()
- {
- _isStarted = false;
- }
-
- /**
- * When messages are not prefetched we need to request a message from the
- * broker.
- * Note that if the timeout is too short a message may be queued in _synchronousQueue until
- * this consumer closes or request it.
- * @param l
- * @return
- * @throws InterruptedException
- */
- public Object getMessageFromQueue(long l) throws InterruptedException
- {
- if (isStrated() && ! getSession().prefetch() && _synchronousQueue.isEmpty())
- {
- _0_10session.getQpidSession().messageFlow(getConsumerTagString(),
- MessageCreditUnit.MESSAGE, 1);
- }
- if (! getSession().prefetch())
- {
- _syncReceive.set(true);
- }
- Object o = super.getMessageFromQueue(l);
- if (! getSession().prefetch())
- {
- _syncReceive.set(false);
- }
- return o;
- }
-
- void postDeliver(AbstractJMSMessage msg) throws JMSException
- {
- super.postDeliver(msg);
- if (_acknowledgeMode == org.apache.qpid.jms.Session.NO_ACKNOWLEDGE && !_session.isInRecovery())
- {
- _session.acknowledgeMessage(msg.getDeliveryTag(), false);
- }
- }
-
-}