2009-10-02 11 views
1

J'utilise Glassfish JMS.Le client JMS ne reçoit pas de messages

Je suis capable d'ajouter des messages à une file d'attente. Je peux voir les messages en utilisant l'objet QueueBrowser. Cependant MessageConsumer (ni QueueReceiver) ne peut recevoir aucun message et retourner null. L'expiration des messages est définie sur 0 et je me souviens d'ouvrir la connexion.

Des idées?

Voici le code:

 Session session = null; 
     Connection conn = null; 

     try 
     { 
     InitialContext jndi = new InitialContext(); 

      ConnectionFactory qFactory = (ConnectionFactory)jndi. 
       lookup("myConnectionFactory"); 
       conn = qFactory.createConnection(); 
       conn.start(); 
     Queue queue = (Queue)jndi.lookup("myQueueName"); 
     session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); 


      QueueReceiver mc = ((QueueSession)session).createReceiver(queue); 

     Object m = mc.receive(2000); 
     //m is NULL! 

     QueueBrowser browser = session.createBrowser(queue); 


     for(Enumeration e = browser.getEnumeration(); e.hasMoreElements();) 
     { 
      //there are many messages here... 
     } 
+1

Un code à afficher? Cela pourrait vous aider à savoir ... –

Répondre

1

Ce serait bon d'avoir le code client.

Une chose semblable m'est arrivée lorsque je n'ai pas correctement fermé/fermé la connexion du côté de l'expéditeur. Le message serait visible lors de l'utilisation de la console d'administration, mais pas encore disponible pour la MDB.

Espérons que ça aide.

0

Ce code est-il exécuté dans le serveur d'applications? Si c'est le cas, j'obtiendrais les objets requis via des annotations, et pour un récepteur de message j'utiliserais un MDB. S'il s'agit d'un morceau de code autonome, j'ai eu un sacré bon moment pour faire fonctionner un client basé sur JNDI, je suis revenu à l'utilisation de l'API Java "brute".

0

J'ai été témoin du même comportement qui se produit après la première session de validation, ce qui signifie qu'avant la réception des messages correctement. Dans mon cas, le problème était que je recréais le récepteur tout en gardant la même session. Comme indiqué dans this article:

Création de destinations temporaires, les consommateurs, les producteurs et les connexions sont toutes les opérations de demande-réponse synchrone avec le courtier et ainsi doivent être évités pour traiter chaque demande comme il en résulte beaucoup de discuter avec le courtier JMS.

La solution était aussi simple que de réutiliser le même récepteur.

Questions connexes