Bonjour a tous,
je suis actuellement entrain d'apprendre a utilisé les EJB3 sur JBoss 6.
Je n'arrive pas a implémenté un bean message, j'ai cette erreur:
Voici le code de mon bean:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Exception in thread "main" javax.naming.NameNotFoundException: MessageBean not bound
Et voici 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 package beanMessage; import javax.annotation.Resource; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.ejb.MessageDrivenContext; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven( activationConfig={ @ActivationConfigProperty( propertyName="typeDeDestination", propertyValue="javax.jms.Queue" ), @ActivationConfigProperty( propertyName="nomDeDestination", propertyValue="queue/MessageBean" ) } ) public class MessageBean implements MessageListener { @Resource MessageDrivenContext mdc; public void onMessage(Message msg) { TextMessage tm; try { if (msg instanceof TextMessage){ tm = (TextMessage) msg; String text = tm.getText(); System.out.println("Message Bean Reçu : " + text); } else { System.out.println ("Message de mauvais type : "+msg.getClass().getName()); } }catch(JMSException e) { e.printStackTrace(); mdc.setRollbackOnly (); }catch(Throwable te) { te.printStackTrace(); } } }
Je ne comprend vraiment pas d'ou viens le problème...
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 import java.util.Properties; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; import decoupeAvecEtat.DecoupeAvecEtat; import decoupeSSEtat.DecoupeSSEtat; public class Client{ public static void main(String[] args) throws Exception { Properties props = System.getProperties(); props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); props.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); props.put(Context.PROVIDER_URL, "jnp://localhost:1099"); Context ctx = new InitialContext(props); String s="test"; // Initialisation QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory"); QueueConnection connection = factory.createQueueConnection(); QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); Queue queue = (Queue) ctx.lookup("queue/MessageBean"); --> ici que cela plante QueueSender sender = session.createSender(queue); // variable de message TextMessage msg = session.createTextMessage(); // On envoie les lettres de la string s une par une for(int i=0;i<s.length();i++){ msg.setText(String.valueOf(s.charAt(i))); sender.send(msg); } } }
Sous eclipse, je vois bien que JBoss est en run et mon bean message est "Synchronized"
Donc avez vous une idée pour résoudre mon problème ?
Je vous remercie d'avance
EDIT: j'ai résolu en modifiant un fichier de conf de JBOSS.
Rajoute de
Dans le fichier JBOSS_HOME/server/default/deploy/hornetq/hornetq-jms.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <queue name="MessageBean"> <entry name="/queue/MessageBean" /> </queue>
Mais connaissez vous une solution qui permet de ne pas modifier ce fichier comme ceci ?
Partager