JBoss sendet die Nachricht zwar, aber nur, wenn die aktuelle, von der EJB gestartete Transaktion abgeschlossen ist.
Wir haben dieses Problem mit JBoss 4.0.3 und dem JmsTemplate von Spring. Eine EJB sendet eine Nachricht an eine Warteschlange mit einer temporären Warteschlange als reply_to-Feld. Dann wird innerhalb derselben Transaktion auf die Antwort der ersten MDB gewartet. Das Problem ist, dass die JmsTemplate-Methode "send" nicht ausgeführt wird, nachdem die Transaktion beendet ist. Zu dem Zeitpunkt, an dem die Nachricht an die Warteschlange gesendet und von der MDB verarbeitet wird, ist der Listener der temporären Warteschlange also bereits verschwunden.
Dies wird als "Synchroner Empfang" bezeichnet.
Zwei Dinge ändern dieses Verhalten, geben aber Anlass zur Sorge:
-
Ändern Sie den Transaktionstyp der EJB in BMT. (Besorgniserregend: BMT ist schlecht)
-
Erstellen Sie einen Thread, dessen einzige Aufgabe es ist, die Methode JmsTemplate.send() aufzurufen.
Als Randbemerkung, dies ist eine EJB, die korrekt auf eine Weblogic-Umgebung funktioniert, und die Nachricht wird gesendet, wenn es sollte, in der Mitte der Transaktion nicht, wenn es vorbei ist.
Danke für jede Hilfe.