IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Wildfly/JBoss Java Discussion :

Consommation de messages JMS par une application Web


Sujet :

Wildfly/JBoss Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 45
    Par défaut Consommation de messages JMS par une application Web
    Bonjour,

    J'essaie de me former aux JMS et leur lien avec des JSP.

    J'ai créé un petit client qui envoie des messages JMS à un MessageDriverBean sous Jboss 4 qui les recoit bien avec la méthode onMessage(). Jusque là tout va bien. Les messages sont consomés et détruit.

    Maintenant j'aimerai pouvoir afficher ces messages dans une JSP sans avoir à les persister en DB.
    En gros, que mon application web "s'abonne" au client qui envoie ses messages.

    Dois-je passer par une 2eme queue ? Le MessageDriverBean a-t-il une utilité dans ce cas de figure ?

    J'ai du mal a comprendre l'architecture dans ce probleme.

    Si vous avez des idées, merci d'avance.

  2. #2
    Membre Expert
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Par défaut
    Le MDB n'a plus d'intérêt.

    L'appli Web consomme le message dans la queue. Il n'y a qu'un seul consommateur par message. Dans ce cas, le MDB serait un consommateur concurrent.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 45
    Par défaut
    Citation Envoyé par hasalex Voir le message
    Le MDB n'a plus d'intérêt.

    L'appli Web consomme le message dans la queue. Il n'y a qu'un seul consommateur par message. Dans ce cas, le MDB serait un consommateur concurrent.
    J'ai supprimer mon Message delivery Bean, j'ai le client qui écrit un TextMessage et ma JSP qui val lire mon TextMessage, mais au moment de le lire, je recois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.ClassCastException: org.jboss.mq.SpyObjectMessage cannot be cast to javax.jms.TextMessage
    J'ai pu voir sur le net qu'il y a de la configuration à mettre mais j'ai beaucoup de mal à trouver de l'info... car pour moi le client poste des TextMessage et le consommateur lit des TextMessage, apparemment c'est pas si simple.

  4. #4
    Membre Expert
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Par défaut
    Ben si, normalement c'est si simple...

    Ne te reste-t-il pas quelques anciens messages ?

    Peux-tu poster ton code et la config de ta queue ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 45
    Par défaut
    J'ai relancé plein de fois et j'ai toujours l'erreur.

    Voici la config de la queue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8"?>
    <server> 
      <mbean  code="org.jboss.mq.server.jmx.Queue"
     name="jboss.mq.destination:service=Queue,name=MDBReceiveQueue">
        <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
      </mbean>
     
      </server>
    Voici le code mon client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public void sendMessage() throws JMSException, NamingException, InterruptedException {
    		// Rcupration du contexte
    		Properties p = new Properties();
    		p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
    		p.put(Context.URL_PKG_PREFIXES, "jboss.naming:org.jnp.interfaces");
    		p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
    		InitialContext ctx = new javax.naming.InitialContext(p);
     
    		// Etablissement de la connexion et rcupration d'un metteur vers la queue cible
    		QueueConnectionFactory queueCnxFactory = (QueueConnectionFactory)ctx.lookup("ConnectionFactory");
    		QueueConnection queueCnx = queueCnxFactory.createQueueConnection();
    		QueueSession queueSession = queueCnx.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
    		QueueSender queueSender = queueSession.createSender((Queue)ctx.lookup("queue/MDBReceiveQueue"));
    		queueCnx.start();
     
    		TextMessage txtmsg = queueSession.createTextMessage();
    		txtmsg.setText("Coucou");
    		queueSender.send(txtmsg);
     
    		// Cloture des sessions et des connexions
    		queueSender.close();
    		queueCnx.stop();
    		queueSession.close();
    		queueCnx.close();
    	}
    et enfin le code utilisée par la Servlet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    	public String getQueueMessage() throws JMSException, NamingException, InterruptedException {
    		// Rcupration du contexte
    		Properties p = new Properties();
    		p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
    		p.put(Context.URL_PKG_PREFIXES, "jboss.naming:org.jnp.interfaces");
    		p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
    		InitialContext ctx = new javax.naming.InitialContext(p);
     
    		// Etablissement de la connexion et rcupration d'un metteur vers la queue cible
    		QueueConnectionFactory queueCnxFactory = (QueueConnectionFactory)ctx.lookup("ConnectionFactory");
    		QueueConnection queueCnx = queueCnxFactory.createQueueConnection();
    		QueueSession queueSession = queueCnx.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
    		QueueReceiver queueReceiver = queueSession.createReceiver((Queue)ctx.lookup("queue/MDBReceiveQueue"));
    		queueCnx.start();
     
    		TextMessage textMsg = (TextMessage)queueReceiver.receive();
     
    		// Cloture des sessions et des connexions
    		 queueReceiver.close();
    		queueCnx.stop();
    		queueSession.close();
    		queueCnx.close();
    		return textMsg.getText();
    	}

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 45
    Par défaut
    Ca marche. En effet, il y avait énormément de messages dans la queue. J'ai redéployé mon MDB qui s'est chargé de vider la queue. Puis je l'ai enlevé, remis un message dans la queue et que la JSP a pu récupérer.

    Merci hasalex pour tes conseils.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connection d'un cube olap par une application web
    Par Ash_Potter dans le forum Autres outils décisionnels
    Réponses: 0
    Dernier message: 18/05/2010, 23h16
  2. Réponses: 2
    Dernier message: 03/05/2010, 14h30
  3. Réponses: 15
    Dernier message: 08/08/2008, 23h25
  4. Réponses: 7
    Dernier message: 17/10/2007, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo