You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Martin Ritchie (JIRA)" <qp...@incubator.apache.org> on 2009/04/11 01:59:14 UTC
[jira] Assigned: (QPID-1642) JMS ReceiveNowait does not return a
message even if the queue is not empty
[ https://issues.apache.org/jira/browse/QPID-1642?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Ritchie reassigned QPID-1642:
------------------------------------
Assignee: Martin Ritchie (was: Rafael H. Schloming)
> JMS ReceiveNowait does not return a message even if the queue is not empty
> --------------------------------------------------------------------------
>
> Key: QPID-1642
> URL: https://issues.apache.org/jira/browse/QPID-1642
> Project: Qpid
> Issue Type: Bug
> Components: Java Client
> Affects Versions: M4
> Reporter: Arnaud Simon
> Assignee: Martin Ritchie
> Fix For: 0.5
>
>
> Description:
> The first invocation of receiveNoWait does not return a message even if the queue is full.
> How to replicate:
> 1) create a queue
> 2) send a message
> 3) try to consume this message using receiveNoWait
> ==> we get null even if there is a message seating in the queue
> Solution:
> When a JMS consumer first invokes receiveNowait then BasicMessageConsumer_0_10 request for more credits and then poll the _synchronousQueue. This does not leave enough time for the message to be enqueued.
> One solution would be to query the queue size before allowing the credits: Something like that would work:
> public Object getMessageFromQueue(long l) throws InterruptedException
> {
> long size = 0;
> if(l < 0)
> {
> size = _0_10session.requestQueueDepth(getDestination()) ;
> }
> 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 (l > 0)
> {
> o = _synchronousQueue.poll(l, TimeUnit.MILLISECONDS);
> }
> else if (l < 0)
> {
> if(size <= 0 )
> {
> o = _synchronousQueue.poll();
> }
> else
> {
> o = _synchronousQueue.take();
> }
> }
> else
> {
> o = _synchronousQueue.take();
> }
> if (! getSession().prefetch())
> {
> _syncReceive.set(false);
> }
> return o;
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org