org.apache.qpid.client
Class MessageListenerTest

java.lang.Object
  extended by junit.framework.Assert
      extended by junit.framework.TestCase
          extended by org.apache.qpid.test.utils.QpidTestCase
              extended by org.apache.qpid.test.utils.QpidBrokerTestCase
                  extended by org.apache.qpid.client.MessageListenerTest
All Implemented Interfaces:
MessageListener, junit.framework.Test

public class MessageListenerTest
extends QpidBrokerTestCase
implements MessageListener

QPID-293 Setting MessageListener after connection has started can cause messages to be "lost" on a internal delivery queue

The message delivery process: Mina puts a message on _queue in AMQSession and the dispatcher thread take()s from here and dispatches to the _consumers. If the _consumer doesn't have a message listener set at connection start then messages are stored on _synchronousQueue (which needs to be > 1 to pass JMS TCK as multiple consumers on a session can run in any order and a synchronous put/poll will block the dispatcher).

When setting the message listener later the _synchronousQueue is just poll()'ed and the first message delivered the remaining messages will be left on the queue and lost, subsequent messages on the session will arrive first.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.qpid.test.utils.QpidBrokerTestCase
QpidBrokerTestCase.MessageType
 
Field Summary
(package private)  Context _context
           
 
Fields inherited from class org.apache.qpid.test.utils.QpidBrokerTestCase
_broker, _brokerLanguage, _brokerLogPrefix, _brokerOutputStream, _brokerPersistent, _brokers, _configFile, _connectionFactory, _connections, _initialContext, _interleaveBrokerLog, _output, _outputFile, _testName, BROKER_READY, CONTENT, CPP, DEFAULT_MANAGEMENT_PORT, DEFAULT_MESSAGE_SIZE, DEFAULT_PORT, DEFAULT_SSL_PORT, DEFAULT_VM_PORT, EXTERNAL, INDEX, JAVA, LOGMONITOR_TIMEOUT, QPID_HOME, QpidHome, QUEUE, RECEIVE_TIMEOUT, TOPIC, VM
 
Fields inherited from class org.apache.qpid.test.utils.QpidTestCase
MEMORY_STORE_CLASS_NAME, MS_CLASS_NAME_KEY
 
Constructor Summary
MessageListenerTest()
           
 
Method Summary
 void onMessage(Message message)
           
protected  void setUp()
           
static junit.framework.Test suite()
           
protected  void tearDown()
           
 void testAsynchronousRecieve()
           
 void testRecieveThenUseMessageListener()
           
 void testSynchronousRecieve()
           
 void testSynchronousRecieveNoWait()
           
 
Methods inherited from class org.apache.qpid.test.utils.QpidBrokerTestCase
cleanBroker, createMessage, createNextMessage, drainQueue, getBroker, getBrokerCommand, getClientConnection, getConfigurationStringProperty, getConnection, getConnection, getConnection, getConnectionFactory, getConnectionFactory, getConnectionURL, getInitialContext, getLogger, getManagementPort, getMessageSize, getPort, getPort, getTestConfigFile, getTestQueue, getTestQueueName, getTestVirtualhostsFile, isBroker010, isBroker08, isBrokerStorePersistent, isCppBroker, isExternalBroker, isJavaBroker, makeVirtualHostPersistent, reloadBrokerSecurityConfig, restartBroker, restartBroker, revertLoggingLevels, revertSystemProperties, runBare, saveTestConfiguration, saveTestVirtualhosts, sendMessage, sendMessage, sendMessage, setBrokerEnvironment, setBrokerOnlySystemProperty, setConfigurationProperty, setLoggerLevel, setMessageSize, setSystemProperty, setSystemProperty, setTestClientSystemProperty, startBroker, startBroker, stopBroker, stopBroker
 
Methods inherited from class org.apache.qpid.test.utils.QpidTestCase
getTestProfileMessageStoreClassName, run
 
Methods inherited from class junit.framework.TestCase
countTestCases, createResult, getName, run, runTest, setName, toString
 
Methods inherited from class junit.framework.Assert
assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_context

Context _context
Constructor Detail

MessageListenerTest

public MessageListenerTest()
Method Detail

setUp

protected void setUp()
              throws Exception
Overrides:
setUp in class QpidBrokerTestCase
Throws:
Exception

tearDown

protected void tearDown()
                 throws Exception
Overrides:
tearDown in class QpidBrokerTestCase
Throws:
Exception

testSynchronousRecieve

public void testSynchronousRecieve()
                            throws Exception
Throws:
Exception

testSynchronousRecieveNoWait

public void testSynchronousRecieveNoWait()
                                  throws Exception
Throws:
Exception

testAsynchronousRecieve

public void testAsynchronousRecieve()
                             throws Exception
Throws:
Exception

testRecieveThenUseMessageListener

public void testRecieveThenUseMessageListener()
                                       throws Exception
Throws:
Exception

onMessage

public void onMessage(Message message)
Specified by:
onMessage in interface MessageListener

suite

public static junit.framework.Test suite()


Licensed to the Apache Software Foundation