voila, je voudrai envoyer un message JMS, le plus simplement possible...
Pour cela j'utilise un serveur Weblogic 8.1 , la spécification 1.0.2 de JMS...
en Point à Point (Queue) et en mode asynchrone.
J'essaye depuis plusieurs jours mais sans succès.
Je vais décrire ce que j'ai fait et si quelqu'un peut me dire ce qui ne va pas ou comment faire...
Voila, donc pour l'instant j'ai un méthode sendMessage et une autre receiveMessage:
Je n'ai donc qu'a appeler ces methodes et le message sera envoyer et reçu...?
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 private void sendMessage () { try { Hashtable props = new Hashtable(); props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); props.put("java.naming.factory.url.pkgs", "com.sun.enterprise.naming"); props.put(Context.PROVIDER_URL, "localhost:7001"); Context ctx = new InitialContext(props); QueueConnectionFactory QueueconnectionFactory = (QueueConnectionFactory) ctx.lookup("weblogic.jms.ConnectionFactory"); Queue QueueMessage = (Queue) ctx.lookup("QueueMessage"); QueueConnection cnx = QueueconnectionFactory.createQueueConnection(); QueueSession session = cnx.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); QueueSender sender = session.createSender((Queue) QueueMessage); TextMessage message = session.createTextMessage(); message.setText("JMS sent"); sender.send(message); cnx.close(); } catch (NamingException e) { e.printStackTrace(); } catch (JMSException e) { e.printStackTrace(); } } private void receiveMessage (){ try { Hashtable props = new Hashtable(); props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); props.put("java.naming.factory.url.pkgs", "com.sun.enterprise.naming"); props.put(Context.PROVIDER_URL, "localhost:7001"); Context ctx = new InitialContext(props); QueueConnectionFactory connectionFactory = (QueueConnectionFactory) ctx.lookup("weblogic.jms.ConnectionFactory"); Queue QueueMessage = (Queue) ctx.lookup("QueueMessage"); QueueConnection con = connectionFactory.createQueueConnection(); QueueSession session = con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); QueueReceiver receiver = session.createReceiver(QueueMessage); receiver.setMessageListener(this); con.start(); TextMessage message = (TextMessage) receiver.receive(); System.err.println("Received : "+ message.getText()); } catch (NamingException e) { e.printStackTrace(); } catch (JMSException e) { e.printStackTrace(); } } public void onMessage(Message m) { TextMessage message = (TextMessage) m ; try { String cad = message.getText(); System.err.println("message received : " + cad); } catch (JMSException e) { e.printStackTrace(); } }
Est ce suffisant ou dois-je créer un MessageDrivenBean ??
J'en ai fait un (dans le doute) qui ressemble à :
le tout, accompagné des fichiers xml correspondant : ejb-jar.xml ainsi que weblogic-ejb-jar.xml (qui a priori sont ok)
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 class EJBMessages implements MessageDrivenBean, MessageListener { private MessageDrivenContext context; private static final long serialVersionUID = 1L; public EJBMessages() { } public void onMessage(Message m) { TextMessage message = (TextMessage) m ; try { String cad = message.getText(); System.err.println("message received : " + cad); } catch (JMSException e) { e.printStackTrace(); } } public void ejbCreate(){ } public void setMessageDrivenContext(MessageDrivenContext arg0) throws EJBException { context = arg0 ; } public void ejbRemove(){ } }
J'ai aussi fait les manipulations sous weblogic pour créer le serveur JMS,destination...
Quelqu'un peut-il m'apporter des eclaircissement ?
Merci
caba.
Partager