JMS -Warteschlange in Weblogic10 EJB2 -Sitzungsbean in der Lage, zu senden, aber nicht zu empfangen

StackOverflow https://stackoverflow.com/questions/1476070

Frage

Ich versuche, eine JMS-Nachricht in einem EJB2 zu erhalten (Legacy Sucks ;-) Bean von Weblogic 10.0.1 mit Bean-verwalteten Transaktionen. Warteschlangendefinition aus dem JMS -Ordner sieht aus wie

<uniform-distributed-queue name="ReqQueue">
  <default-targeting-enabled>true</default-targeting-enabled>
  <delivery-params-overrides>
    <delivery-mode>Non-Persistent</delivery-mode>
  </delivery-params-overrides>
  <quota>QuotaCrc</quota>
  <jndi-name>xxx.ReqQueue</jndi-name>
  <load-balancing-policy>Round-Robin</load-balancing-policy>
</uniform-distributed-queue>
<uniform-distributed-queue name="RespQueue">
  <default-targeting-enabled>true</default-targeting-enabled>
  <delivery-params-overrides>
    <delivery-mode>Non-Persistent</delivery-mode>
  </delivery-params-overrides>
  <quota>QuotaCrc</quota>
  <jndi-name>xxx.RespQueue</jndi-name>
  <load-balancing-policy>Round-Robin</load-balancing-policy>
</uniform-distributed-queue>

Die Geschäftsmethode in der Bean startet keine Transaktion, sodass die JMS -Operationen nicht transaktional sind. Der ausgeführte Code ist

InitialContext ictx = new InitialContext();
QueueConnectionFactory cf = (QueueConnectionFactory) 
                       ictx.lookup("weblogic.jms.ConnectionFactory");
Queue responseQueue = (Queue) ictx.lookup("RespQueue");
conn = cf.createConnection();
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer receiver = session.createConsumer(responseQueue);
ObjectMessage response = (ObjectMessage) receiver.receive(30000);

Das Problem ist, dass receiver.receive Gibt Null sofort ohne Blockierung zurück, unabhängig vom Inhalt der Warteschlange. Nach dem JMS API Doc.,, receiver.receive Mit einer Auszeit kehrt Null nach der Auszeit oder sofort zurück, wenn das Ziel geschlossen ist. Das Problem ist das gleiche, wenn ich Bean -verwaltete Transaktionen, Container -verwaltete Transaktionen oder überhaupt keine Transaktionen verwende. Das Posten einer JMS -Nachricht in eine andere Warteschlange funktioniert. Erhalten Sie Returns Null sofort, unabhängig davon, ob ich zuvor in derselben Methode versende oder nicht.

Warum ist die Warteschlange geschlossen oder warum scheint es so?

Leider ist MDB keine Option, da wir einen synchronen Anruf durch JMS abtunnieren müssen (und ich möchte nicht zu viel im Schlammball herumtäuschen ;-)

War es hilfreich?

Lösung

VorMessageConsumer -Empfänger = Sitzung.CreateConsumer (Responsequeue);stellenconn.start ();

Andere Tipps

Nachdem Sie die Verbindung erstellt haben, muss sie begonnen werden, um in den Empfängermodus einzusteigen. Versuche dies

 ......
 conn = cf.createConnection(); 
 conn.start();
 session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); 
 ......
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top