Bonjour,
Toujours à la recherche de faire fonctionner une application qui fonctionnait sous glassfish sous JBoss 5.0, j'ai deux Message Driven Bean, mais lorsque je tente de les déployer sur JBoss j'ai des erreurs.
Avec JBoss 5, faut il toujours les fichiers jboss.xml ? ejb-jar.xml ? en ai-je oublié ?
J'ai un projet EJB sous eclipse avec ces deux fichiers :
LocationCoutsMDBBean
et
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 package locMDB; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; /** * * @author Mickael */ @MessageDriven( activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/CoutQueue"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) public class LocationCoutsMDBBean implements MessageListener { public LocationCoutsMDBBean() { System.out.println("Je suis crée LocationCoutsMDBBean"); } public void onMessage(Message message) { if(message instanceof TextMessage){ try{ TextMessage msg = (TextMessage)message; String text = msg.getText(); String[] coutsEtDurees = text.split("#"); System.out.println("Cout : "+coutsEtDurees[0]+" Durée : "+coutsEtDurees[1]); }catch(JMSException e) { } } System.out.println("Je suis dans LocationCoutsMDBBean"); } }
LocationMDBBean
Voici mon fichier JBoss.xml :
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 package locMDB; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.Connection; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.MessageProducer; import javax.jms.QueueConnectionFactory; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; /** * * @author Mickael */ @MessageDriven( name="LocationMDB", activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/LocationQueue"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) public class LocationMDBBean implements MessageListener { public LocationMDBBean() { System.out.println("je suis crée LocationMDBBean"); } public void onMessage(Message message) { if (message instanceof TextMessage) { TextMessage msg = (TextMessage) message; try{ String datesAll = msg.getText(); String[] dates = datesAll.split("#"); location.Location beanLoc = new location.Location(); DateFormat df = new SimpleDateFormat("yyyy-mm-dd.hh-mm"); Date dateDebut = df.parse(dates[0]); Date dateFin = df.parse(dates[1]); double cout = beanLoc.calculerCout(dateDebut, dateFin) ; double duree = beanLoc.calculTemps(dateDebut, dateFin); String toSendMessage = cout+"#"+duree; sendMessage(toSendMessage); }catch(JMSException e){ }catch(ParseException ex) { } } System.out.println("<dates debut et fin de location>"); } public void sendMessage(String message){ try{ Context jndiContext = new InitialContext(); javax.jms.ConnectionFactory connectionFactory = (QueueConnectionFactory)jndiContext.lookup("jms/LocationFactory"); javax.jms.Queue queue = (javax.jms.Queue)jndiContext.lookup("jms/CoutQueue"); Connection connection = connectionFactory.createConnection(); Session sessionQ = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); TextMessage msg = sessionQ.createTextMessage(); msg.setText(message); MessageProducer messageProducer=sessionQ.createProducer(queue); messageProducer.send(msg); } catch(JMSException e){ System.out.print(e.getMessage()); } catch(NamingException ex){ System.out.println(ex.getMessage()); } } }
J'ai un autre projet dans lequel il y a l'application web qui me produit un .war qui se lance apparemment très bien sans fichiers xml supplémentaires.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?xml version="1.0" encoding="UTF-8"?> <jboss> <enterprise-beans> <message-driven> <ejb-name>LocationMDB</ejb-name> <destination-jndi-name>jms/LocationQueue</destination-jndi-name> </message-driven> <message-driven> <ejb-name>LocationCoutsMDB</ejb-name> <destination-jndi-name>jms/CoutQueue</destination-jndi-name> </message-driven> </enterprise-beans> </jboss>
De plus j'ai fait des entity beans et il n'y avait pas besoin non plus de fichiers xml supplémentaire.
Voici l'erreur que j'ai en lancant l'application sur le serveur :
J'espère que vous pourrez me dire s'il me manque des fichiers de configurations et s'il y a un endroit précis ou les mettre.
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 17:58:23,549 INFO [EJBContainer] STARTED EJB: locMDB.LocationCoutsMDBBean ejbName: LocationCoutsMDBBean 17:58:24,284 WARN [JmsActivation] Failure in jms activation org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@6061a8(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@aa769a destination=jms/CoutQueue destinationType=javax.jms.Queue tx=true durable=false reconnect=10 provider=java:/DefaultJMSProvider user=null maxMessages=1 minSession=1 maxSession=15 keepAlive=60000 useDLQ=true DLQHandler=org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler DLQJndiName=queue/DLQ DLQUser=null DLQMaxResent=5) javax.naming.NameNotFoundException: queue not bound at org.jnp.server.NamingServer.getBinding(NamingServer.java:771) at org.jnp.server.NamingServer.getBinding(NamingServer.java:779) at org.jnp.server.NamingServer.getObject(NamingServer.java:785) at org.jnp.server.NamingServer.lookup(NamingServer.java:396) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:713) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:673) at javax.naming.InitialContext.lookup(Unknown Source) at org.jboss.util.naming.Util.lookup(Util.java:222) at org.jboss.resource.adapter.jms.inflow.dlq.AbstractDLQHandler.setupDLQDestination(AbstractDLQHandler.java:106) at org.jboss.resource.adapter.jms.inflow.dlq.AbstractDLQHandler.setup(AbstractDLQHandler.java:82) at org.jboss.resource.adapter.jms.inflow.dlq.JBossMQDLQHandler.setup(JBossMQDLQHandler.java:48) at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupDLQ(JmsActivation.java:413) at org.jboss.resource.adapter.jms.inflow.JmsActivation.setup(JmsActivation.java:351) at org.jboss.resource.adapter.jms.inflow.JmsActivation$SetupActivation.run(JmsActivation.java:729) at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204) at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:260) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
Merci d'avance.
Partager