I setup the container like this and it works fine
....
Code:
DefaultMessageListenerContainer listenerContainer = new DefaultMessageListenerContainer();
listenerContainer.setAutoStartup(true);
listenerContainer.setMessageListener(listener);
listenerContainer.setConnectionFactory(factory);
listenerContainer.setDestination(destination);
listenerContainer.setRecoveryInterval(recoveryInterval);
listenerContainer.setPubSubDomain(true);
listenerContainer.setAcceptMessagesWhileStopping(false); // i guess this is the required setting to avoid the blocking behaviour
listenerContainer.setTransactionName(transactionModeStr);
PlatformTransactionManager manager = environmenAccess.getTransactionManager(destinationName, typeOfMessage, parameter);
if (manager != null)
listenerContainer.setTransactionManager((PlatformTransactionManager) manager);
listenerContainer.afterPropertiesSet();
listenerContainer.start();
getListenerContainers().add(listenerContainer);
you can leave out the Transaction Manager stuff.
To shutdown i use following code
Code:
public void shutDownListeners() throws Exception {
for (DefaultMessageListenerContainer container : getListenerContainers()) {
try {
container.shutdown();
container.destroy();
} catch (Exception exc) {
if (logger.isDebugEnabled())
logger.debug("Error shutting down ListnerContainer", exc);
}
}