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 message JMS


Sujet :

Wildfly/JBoss Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut Consommation de message JMS
    Bonjour,
    j'ai implémenté un client java qui écris un message dans une queue. ce message est ensuite lu par un MDB sur mon serveur JBoss. jusque la tout va bien. Mais lorsque j'ai voulu que le mdb envoi un message au client sur une autre queue, j'ai mon client qui ne reçoit pas de message. est-ce normal? le client doit-il forcément être déployé sur le serveur JBoss?
    merci d'avance pour votre aide.

    Krum

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Le client n'a pas besoin d'être dans JBoss. Il peut très bien se mettre à l'écoute d'une queue à distance.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Merci, tu confirme bien ce que je pensais. As-tu une idée de pourquoi cela marche dans un sens, mais pas dans l'autre? (je peux recevoir un message côté serveur, mais avec le même code de l'autre côté je ne peux pas recevoir de message coté client.)

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Est-ce que tu peux me montrer ton code de réception coté client ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Bien sur, le voila:
    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
     
    try {
    	ConnectionFactory factory = (ConnectionFactory) context.lookup("ConnectionFactory");
    	Connection connection = factory.createConnection();
    	Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    	Destination destination = (Destination)context.lookup("queue/AcknowledgementQueue");
    	MessageConsumer consumer = session.createConsumer(destination);
    	TextMessage message = (TextMessage) consumer.receive();
    	System.out.println(message.getText());
    	connection.close();
    } catch (NamingException e) {
    	// TODO Auto-generated catch block
    	e.printStackTrace();
    } catch (JMSException e) {
    	// TODO Auto-generated catch block
    	e.printStackTrace();
    }
    il s'agit exactement du même code que j'utilise côté serveur sur une autre queue. et les deux sont bien déclarés.

    merci pour ton aide

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Regarde du côté de "context", je pense que tu n'as pas les bons paramètres pour pointer vers ton serveur (ce qui est transparent côté serveur)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    je ne pense pas que cela vienne du context, car dans la même classe je contacte mon serveur (qui lui reçoit le message), et juste après j'ouvre un consumer pour lire la réponse du serveur sur une autre queue. et coté serveur, j'utilise un MDB pour la réception et un context qui pointe sur localhost pour l'envoi du message.

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    As-tu vérifié que le message est bien dans la queue, avec un outil comme HermesJMS ou en JMX ?

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Edit: après vérification, j'ai bien des message dans ma file d'acquitement. donc c'est bien le consumer qui a un problème :s

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Tu peux inspecter tes queues par la jmx-console.

    Le MBean s'appellera "jboss.mq.destination:name=queue/AcknowledgementQueue,service=Queue" ou "jboss.messaging.destination:name=queue/AcknowledgementQueue,service=Queue", selon ta version de jboss.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    oui, comme je te le disais, j'ai bien trouvé les messages que j'avais envoyé lors de mes tests qui n'étaient pas consommé. le problème vient donc du client je pense.

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Je sèche un peu...

    Comment se comporte ton client ? Il se met en attente sur le receive, il sort une exception, il s'arrête gentiment ?

  13. #13
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    il attend bien sagement... :s

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Pour rebondir sur la réponse de OButterlin, peux-tu poster tes paramètres de connexion au contexte (jndi.properties, par exemple) ?

  15. #15
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    voici la classe cliente de test:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    package test;
     
    import java.util.Properties;
     
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.MessageConsumer;
    import javax.jms.MessageProducer;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
     
     
    public class TestWithQueue {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Properties prop=new Properties();
    		prop.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
    		prop.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
    		prop.put(Context.PROVIDER_URL,"jnp://localhost:1099");
    		Context context = null;
    		try {
    			context = new InitialContext(prop);
    		} catch (NamingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		try {
    			ConnectionFactory factory = (ConnectionFactory) context.lookup("ConnectionFactory");
    			Connection connection = factory.createConnection();
    			Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    			Destination destination = (Destination)context.lookup("queue/SubscriptionQueue");
    			MessageProducer producer = session.createProducer(destination);
    			TextMessage message = session.createTextMessage("localhost,1280,Mission,EquipmentType(1)");
    			producer.send(message);
    			connection.close();
    		} catch (NamingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (JMSException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		try {
    			ConnectionFactory factory = (ConnectionFactory) context.lookup("ConnectionFactory");
    			Connection connection = factory.createConnection();
    			Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    			Destination destination = (Destination)context.lookup("queue/AcknowledgementQueue");
    			MessageConsumer consumer = session.createConsumer(destination);
    			TextMessage message = (TextMessage) consumer.receive();
    			System.out.println(message.getText());
    			connection.close();
    		} catch (NamingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (JMSException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    	}
     
    }
    et voici le MDB sur le serveur:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    package notification.server.listeners;
     
    import java.io.IOException;
    import java.util.Properties;
     
    import javax.ejb.ActivationConfigProperty;
    import javax.ejb.MessageDriven;
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.MessageProducer;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
     
    import org.apache.log4j.Logger;
     
    import notification.clients.NotificationClient;
    import notification.server.NotificationServer;
    import notification.utils.ListenersTools;
     
    @MessageDriven(name="SubscriptionQueueProcessor",
    		activationConfig={
    			@ActivationConfigProperty(
    					propertyName="destinationType",
    					propertyValue="javax.jms.Queue"),
    			@ActivationConfigProperty(
    					propertyName="destination",
    					propertyValue="queue/SubscriptionQueue")
    		}
    )
    public class SubscriptionListenerWithQueue implements MessageListener{
     
    	/** Logger. */
    	private static final Logger logger = Logger.getLogger(SubscriptionListenerWithQueue.class);
     
    	public SubscriptionListenerWithQueue() throws IOException {
    		logger.debug(this.getClass().getName() + "constructor");
    	}
     
    	@Override
    	public void onMessage(Message message) {
    		TextMessage mess = (TextMessage) message;
    		try {
    			String textMessage = mess.getText();
    			String[] args = textMessage.split(",");
    			String[] pojos = ListenersTools.getPojos(args);
    			NotificationServer server = NotificationServer.getServer();
    			NotificationClient client = ListenersTools.getClient(args[0], Integer.parseInt(args[1]));
    			boolean ok = server.subscribe(client, pojos);
    			if (ok)
    				sendAcknowledgement(client, pojos,true);
    		} catch (JMSException e) {
    			logger.error(this.getClass().getName() + " "+e.getMessage());
    		}
     
    	}
     
    	private void sendAcknowledgement(NotificationClient client, String[] pojos,
    			boolean b) {
    		Properties prop=new Properties();
    		prop.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
    		prop.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
    		prop.put(Context.PROVIDER_URL,"jnp://localhost:1099");
    		Context context = null;
    		try {
    			context = new InitialContext(prop);
    		} catch (NamingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		try {
    			ConnectionFactory factory = (ConnectionFactory) context.lookup("ConnectionFactory");
    			Connection connection = factory.createConnection();
    			Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    			Destination destination = (Destination)context.lookup("queue/AcknowledgementQueue");
    			MessageProducer producer = session.createProducer(destination);
    			TextMessage message = session.createTextMessage("Bien reçu");
    			producer.send(message);
    			connection.close();
    		} catch (NamingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (JMSException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }

  16. #16
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Tu testes le client sur la même machine que le serveur ?
    (parce que localhost, sur le client, si c'est une autre machine... )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    non non je te rassure, je suis bien sur la même machine... mais même en testant sur une autre machine avec la bonne adresse ip je n'ai pas réussi... :s

  18. #18
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    avec tes outils, tu vois lesmessages dans le queue d'acknoledgement, mais est-ce que tu vois que cette queue a un consommateur?

  19. #19
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    j'ai quelque chose lorsque je fais appel à la méthod listsubscribers() dans la console jmx, mais rien lorsuqe j'appelle la méthode listReceivers()

  20. #20
    Membre éclairé Avatar de XmasRock
    Inscrit en
    Janvier 2007
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 729
    Points : 821
    Points
    821
    Par défaut
    il te manque un "connection.start(); "

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [EJB3] Recevoir des messages JMS dans un managed bean
    Par FrenchFrogger dans le forum Java EE
    Réponses: 1
    Dernier message: 23/07/2009, 20h11
  2. re-emission de message JMS
    Par schausson dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 27/02/2009, 09h45
  3. Consommation de messages JMS par une application Web
    Par romain3395 dans le forum Wildfly/JBoss
    Réponses: 7
    Dernier message: 09/02/2009, 21h41
  4. [JMS] Consommation de message dans file JMS
    Par ujoodha dans le forum Java EE
    Réponses: 3
    Dernier message: 04/10/2008, 05h13
  5. Update de messages JMS
    Par Aurélie38 dans le forum Websphere
    Réponses: 6
    Dernier message: 06/08/2008, 15h43

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