JBoss 5.0, Eclipse, Message Driven Bean - Fichier jboss.xml
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
Code:
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");
}
} |
et
LocationMDBBean
Code:
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());
}
}
} |
Voici mon fichier JBoss.xml :
Code:
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> |
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.
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 :
Code:
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) |
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.
Merci d'avance.