Bonjour,
Je suis en train de mettre en œuvre une application basée sur JMS, tout ce passe bien, comme il faut, pas d'erreur, pas d'exception, sauf que le message envoyé par le client producteur, n'est pas reçu pas le deuxième client consommateur.
Voici le code du premier client (Producteur) :
import javax.jms.*; import javax.naming.*; public class Producteur { public static void main(String[] args) { try{ System.out.println("Démarage de l'application ..."); Context ctx = new InitialContext(); System.out.println("Initialiser le contexte ..."); ConnectionFactory fabrique = (ConnectionFactory)ctx.lookup("MonFournisseur"); System.out.println("fabrique créée ..."); Destination destination = (Destination)ctx.lookup("MaFile"); System.out.println("Destination localisée ..."); Connection connexion = fabrique.createConnection(); System.out.println("Connexion établie ..."); Session session = connexion.createSession(true, Session.AUTO_ACKNOWLEDGE); System.out.println("Session créée ..."); MessageProducer envoi = session.createProducer(destination); System.out.println("Producteur créé ..."); TextMessage message = session.createTextMessage(); message.setText("Bonjour, je suis un test de message driven"); envoi.send(message); System.out.println("Message envoyé : " +message ); session.close(); System.out.println("Session fermée ..."); connexion.close(); System.out.println("Connexion fermée ..."); }catch(Exception e){ System.out.println("erreur : " + e.getMessage()); } } }
Quand je le lance, j'ai l'affichage suivant :
Démarage de l'application ...
Initialiser le contexte ...
fabrique créée ...
Destination localisée ...
Connexion établie ...
Session créée ...
Producteur créé ...
Message envoyé :
Text: Bonjour, je suis un test de message driven
Class: com.sun.messaging.jmq.jmsclient.TextMessageImpl
getJMSMessageID(): ID:41-10.63.44.174(82:c:e7:de:bd:f0)-2989-1244123873356
getJMSTimestamp(): 1244123873356
getJMSCorrelationID(): null
JMSReplyTo: null
JMSDestination: MaFilePhysique
getJMSDeliveryMode(): PERSISTENT
getJMSRedelivered(): false
getJMSType(): null
getJMSExpiration(): 0
getJMSPriority(): 4
Properties: null
Session fermée ...
Connexion fermée ...
Ceci, bien sûr en plus de quelques messages de type info.
et voici le code du deuxième client (Consommateur) :
import javax.jms.*; import javax.naming.*; public class Consommateur { public static void main(String[] args) { try { System.out.println("Démarage de l'application ..."); Context ctx = new InitialContext(); System.out.println("Initialiser le contexte ..."); ConnectionFactory fournisseur = (ConnectionFactory) ctx.lookup("MonFournisseur"); System.out.println("fabrique créée ..."); Destination destination = (Destination) ctx.lookup("MaFile"); System.out.println("Destination localisée ..."); Connection connexion = fournisseur.createConnection(); System.out.println("Connexion établie ..."); Session session = connexion.createSession(false, Session.AUTO_ACKNOWLEDGE); System.out.println("Session créée ..."); MessageConsumer réception = session.createConsumer(destination); System.out.println("Consommateur créé ..."); connexion.start(); System.out.println("Connexion lancée ..."); TextMessage message = (TextMessage) réception.receive(); System.out.println("Message reçu : " + message); session.close(); System.out.println("Session fermée ..."); connexion.close(); System.out.println("Connexion fermée ..."); } catch (NamingException e) { System.out.println("Erreur Naming : "+ e.getMessage()); } catch (JMSException e) { System.out.println("Erreur JMS : "+ e.getMessage()); } } }
Quand je le lance à son tour, il m'affiche :
Démarage de l'application ...
Initialiser le contexte ...
fabrique créée ...
Destination localisée ...
Connexion établie ...
Session créée ...
Consommateur créé ...
Connexion lancée ...
Et puis il bloque, je pense qu'il attend un message, mais je ne comprends pas pourquoi il ne le reçoit pas du moment où il a été envoyé avec succès.
Il serait important de pouvoir vérifier s'il est bien envoyé, mais je ne sais pas comment.
Merci pour tout signe et toute aide.
Hello,
Pour un envoi/reception de messages JMS, tu dois passer par un serveur d'application.
Est ce que tu as une console de monitoring qui te permet de voir qu'un message a bien été déposé sur ta file "MaFile"?
Ca serait un premier pas, ca permettait de voir si c'est au niveau de l'envoi ou de la réception que ca peche.
A première vue to envoi a l'air de s'être bien passé mais bon....
Bonne chance,
Niroken
Bonjour Niroken,
Je bosse sur une plateform sun (netbeans avec Glassfish), donc tout est intégré, tout est pré configuré, et j'ai même les consoles pour les trois exécutable, le serveur, l'émetteur et le récepteur.
Je ne sais pas ce qui s'est passé, j'ai fait un peu de ménage ce matin, j'ai redémarré le serveur, j'ai supprimé les modules EJBs qu'il contenait, et les sites web, et du coup ça a marché, je ne sais vraiment pas où était le problème? j'ai hâte de savoir. Je vais essayer de reproduire le problème.
Merci Bcp Niroken.