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:
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 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(); } }
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
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);} }
Une idée d'où j'aurais merdouillé? Je suis loin d'être familier avec les EJB et encore moins avec JMS
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());
Partager