Ich habe eine Java-EE-Anwendung, die eine Message-driven Bean hat und es läuft gut auf JBoss 4, aber wenn ich das Projekt für JBoss 6 konfigurieren und darauf bereitstellen, bekomme ich das Error;jBoss Bereitstellung von Message-Driven Bean spec Verletzung
WARN [org.jboss.ejb.deployers.EjbDeployer.verifier] EJB spec violation:
...
The message driven bean must declare one onMessage() method.
...
org.jboss.deployers.spi.DeploymentException: Verification of Enterprise Beans failed, see above for error messages.
Aber meine Bohne hat die onMessage Methode! Es hätte dann auch nicht auf jboss 4 funktioniert.
Warum bekomme ich diesen Fehler?
Edit:
Die Klasse in Frage wie folgt aussieht
package ...
imports ...
public class MyMDB implements MessageDrivenBean, MessageListener {
AnotherSessionBean a;
OneMoreSessionBean b;
public MyMDB() {}
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
//Lookup sessionBeans by jndi, create them
lookupABean();
// check message-type, then invokie
a.handle(message);
// else
b.handle(message);
} catch (SomeException e) {
//handling it
}
}
}
public void lookupABean() {
try {
// code to lookup session beans and create.
} catch (CreateException e) { // handling it and catching NamingException too }
}
}
Edit 2: Und das ist die jboss.xml relevanten Teile
<message-driven>
<ejb-name>MyMDB</ejb-name>
<destination-jndi-name>topic/A_Topic</destination-jndi-name>
<local-jndi-name>A_Topic</local-jndi-name>
<mdb-user>user</mdb-user>
<mdb-passwd>pass</mdb-passwd>
<mdb-client-id>MyMessageBean</mdb-client-id>
<mdb-subscription-id>subid</mdb-subscription-id>
<resource-ref>
<res-ref-name>jms/TopicFactory</res-ref-name>
<jndi-name>jms/TopicFactory</jndi-name>
</resource-ref>
</message-driven>
bearbeiten 3:
Ich habe nur alle meine Gläser aus dem Projekt entfernt und nur relevante hinzugefügt (auch von neuen Versionen), um NoClassDefFound Fehler auszulösen. Noch bleibt das Problem bestehen.
Bearbeiten: Irgendwelche Richtungen, welchen Bereich soll ich betrachten? Mein Projekt oder jboss-configuration oder die Deployment-Einstellungen ??
Können wir die Klasse sehen, die 'onMessage()' implementiert? – skaffman
Es ruft eine andere Session Bean nach dem Überprüfen der Nachricht, warum? Kann ich nicht tun, was ich normalerweise in einer Methode tun kann? – rapadura
@skaffman, aktualisierte die Frage mit dem MB-Bean-Code. – rapadura