Comment écouter un message de la file d'attente à partir d'une application web? (Tomcat, ActiveMQ)

Je suis heureux de l'amélioration de mon application web qui s'exécute sur un Apache Tomcat. Un ActiveMQ serveur JMS est ajouté à envoyer et recevoir des messages.

J'ai déjà pouvez envoyer et recevoir des messages, mais besoin d'aide sur le côté du récepteur.

Comment mon application web en permanence d'écouter une seule file d'attente pour recevoir des messages?

De nouveaux messages arrivent et le serveur doit agir sur eux. Ex: ajouter des données dans la DB ou ou envoyer un message en retour.

Je peux déjà envoyer des messages. C'est le code.

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("clientQueue");
MessageProducer publisher = session.createProducer(queue);
connection.start();

Message message = null;
message = session.createTextMessage("Text Message");
publisher.send(message);

Je peux déjà vous recevez un message après une demande (un clic ;-))

connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("serverQueue");
consumer = session.createConsumer(destination);

while (true) {
    Message message = consumer.receive(300000);
    //Do message stuff
}

Comment dois-je laisser l'application web, écouter de la file d'attente en permanence?
Qu'est-ce que le conseillé?

Toute aide est vivement appréciée. Merci.

EDIT - SOLUTION

Actuelle solution de travail avec les propositions de DaveH

J'ai ajouté un ServletContextListener pour écouter mon message en permanence.

web.xml

<listener>
    <listener-class>com.test.JMSContextListener</listener-class>
</listener>

La Listeren:

public class JMSContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        Thread thread = new Thread(new JMSConnector());
        thread.start();
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        //Nothing
    }
}

La Connexion:

public class JMSConnector implements Runnable {
    public void run() {
        try {
            Context context = new InitialContext();
            QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("java:comp/env/jms/ConnectionFactory");            
            Connection connection = factory.createConnection();
            Queue queue = (javax.jms.Queue) context.lookup("java:comp/env/jms/serverQueue");
            Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

            MessageConsumer consumer = session.createConsumer(queue);

            //This MessageListener will do stuff with the message
            MessageListenerImpl messageListener = new MessageListenerImpl();
            consumer.setMessageListener(messageListener);
            connection.start();

            //Start connection or nothing will happen!!!
            connection.start();
        } catch (JMSException ex) {
            //TODO
        } catch (NamingException ex) {
            //TODO
        }
    }
}

Est-ce un conseillé façon ou devrait-il être amélioré?

Toute aide est vivement appréciée. Merci.

Pour info: je ne suis pas en utilisant le Printemps...
Pour le conteneur de Servlet 3.x, vous pouvez annoter l'auditeur avec @WebListener, pas besoin de le déclare dans web.xml. (Mkyong)

OriginalL'auteur Dimitri Dewaele | 2015-07-28