Bonjour,

Je dois faire des jeux d'essais avec différentes versions des EJB.
J'essaye de faire remonter des informations via mon MDB vers un bean session stateless pour renvoyer à la couche présentation que le message a bien été reçu par le MDB.

Le MDB consomme bien un message (je l'ai vu via l'interface d'administration de mon serveur); mais apparement l'information de retour est perdue quelquepart en route.

J'avais choisi d'appeler mon bean session depuis le MDB et de lui passer un indicateur comme quoi il avait reçu le message.

Méthode onMessage de mon MDB:

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
  public void onMessage(Message msg)
  {
      TextMessage message = null;
      try {
 
 
        if (msg instanceof TextMessage) {
            message = (TextMessage) msg;
            FacadeLocalHome home;
            FacadeLocal local;
            Context contexte =InitContext.getContext().getInitialContext();
            home= (FacadeLocalHome) contexte.lookup("java:comp/env/ejb/local/Facade");
            local = (FacadeLocal)home.create();
            local.setMessageInd(true);
            local.setMessage(message.getText());
        } 
 
          } catch (Throwable te) {
              te.printStackTrace();
          }
      }
Méthode d'appel (qui est situé sur le même bean session que celui qui doit recevoir l'information résultat)

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
    public void sendMessage() {
    try{
        Context contexte =InitContext.getContext().getInitialContext();
 
        //Insertion d'un message dans le bean message
         QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory)
             contexte.lookup("jms/maConnectionFactory");
         Queue queue = (Queue)contexte.lookup("jms/demoQueue");
          QueueConnection queueConnection = 
              queueConnectionFactory.createQueueConnection();
          QueueSession queueSession =
              queueConnection.createQueueSession(false,
              Session.AUTO_ACKNOWLEDGE);
          QueueSender queueSender = queueSession.createSender(queue);
          TextMessage message = queueSession.createTextMessage();
          message.setText("Bonjour!");
          queueSender.send(message);
 
        }catch(JMSException e) {throw new EJBException(e.toString());
        }catch (NamingException e){throw new EJBException("Error looking up home", e);}
    }
Récupération au niveau de la couche présentation des informations:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
        Context context =InitContext.getContext().getInitialContext();
        // Récupération de la référence à l'ActionForm de recherche associé à cette Action
        TesteurForm leForm = (TesteurForm) form;   
 
          //envoi du message
          home= (FacadeLocalHome) context.lookup("java:comp/env/ejb/local/Facade");
          local = (FacadeLocal)home.create();
          local.sendMessage();
 
          //récupération du résultat
          leForm.setMessage(local.isMessageInd());
          leForm.setLeMessage(local.getMessage());
Une idée d'où j'aurais merdouillé? Je suis loin d'être familier avec les EJB et encore moins avec JMS