2010-01-23 13 views
3

Je pense que c'est probablement une question assez simple, mais c'est ma première incursion dans JMS, donc je suis un peu incertain. J'essaie d'écrire dans une file d'attente JMS existante (puis de la lire dans une autre file d'attente), pour laquelle je connais le nom de la file d'attente, l'hôte, le gestionnaire de files d'attente et le canal. Comment obtenir une référence à cette file d'attente sous la forme d'un objet javax.jms.Destination?Comment puis-je obtenir une file d'attente JMS existante?

Tous les exemples que j'ai trouvés impliquent l'appel javax.jms.Session.createQueue(String), mais puisque cette file d'attente existe déjà, je ne veux pas en créer un autre, non? Ou ai-je mal compris ce qui se passe?

Si cela est important, j'utilise le pilote com.ibm.msg.client.jms.

Merci!

Répondre

4

Normalement, le conteneur dans lequel votre application s'exécute lie le Queue dans son service de nommage. Une application dans le conteneur peut le rechercher avec JNDI et l'utiliser.

+0

Merci! Est-il possible d'accéder à la file d'attente à partir d'un programme Java autonome? Finalement, j'utiliserai la file d'attente à partir d'une application Java EE, mais en ce moment j'essaie juste de me familiariser avec JMS. Si ce n'est pas possible, je peux probablement passer cette étape, mais j'aimerais avoir du code qui interagit avec la file d'attente sans toutes les autres complexités de mon application. – pkaeding

+1

Habituellement, il est possible de le faire à partir d'une application autonome, mais les détails dépendent beaucoup du fournisseur JMS que vous utilisez. Par exemple, de nombreux serveurs d'application fournissent un fournisseur JNDI et un pilote JMS que vous pouvez utiliser dans une application en dehors du serveur d'applications lui-même pour établir une connexion. – erickson

0

Pour ajouter la réponse ci-dessus erickson:

Voici un exemple d'obtenir et de navigation une file d'attente JMS:(en utilisant javax.jms-api 2.x)

// Set up the connection to the queue: 
Properties env = new Properties(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
env.put(Context.PROVIDER_URL, "http-remoting://<host>:<port>"); 
Context namingContext = new InitialContext(env); 
ConnectionFactory connectionFactory = (ConnectionFactory) namingContext.lookup("jms/RemoteConnectionFactory"); 
JMSContext context = connectionFactory.createContext("jms_user", "pwd"); 

// Get the JMS Queue: 
Queue queue = (Queue) namingContext.lookup("jms/queue/exampleQueue"); 
// Create the JMS Browser: 
QueueBrowser browser = context.createBrowser(queue); 
// Browse the messages: 
Enumeration<Message> e = browser.getEnumeration(); 
while (e.hasMoreElements()) { 
    Message message = (Message) e.nextElement(); 
    log.debug(message.getBody(String.class) + " with priority: " + message.getJMSPriority()); 
} 
... 

Assurez-vous vous utilisez ces dépendances Maven:

<dependency> 
    <groupId>javax.jms</groupId> 
    <artifactId>javax.jms-api</artifactId> 
    <version>2.0.1</version> 
</dependency> 
<dependency> 
    <groupId>org.wildfly</groupId> 
    <artifactId>wildfly-jms-client-bom</artifactId> 
    <version>10.0.0.Final</version> 
    <type>pom</type> 
</dependency>