付属のOpenMQJMSキューを使用してGlassfish3.1.2にWebサービスを実装しようとしています。このキューは、応答の一時キューを使用して同期JMS要求/応答を実装します。リモートクライアントジョブ(コンテナの外部で実行)によってメインキューから取得されたメッセージを送信し、一時キューで応答を受信します。
基本的なJavaPOCでは、これは機能します。しかし、サーバー側のコードをコンテナーに入れると、機能しません。
メッセージがキューに送られ、ピックアップされないようにジョブをオフにし、QBrowserでキューを追跡します。
プロデューサーからメッセージを送信するだけで、キューに入れられ、ジョブで読み取ることができます。
しかし、応答を受信するコードを追加すると、メッセージはキューで読み取ることができなくなります。QBrowserは、キューに1つのメッセージがあると言っていますが、UnAckとマークされており、キューは空のように見えます(たとえば、メッセージが読み取れません)。
connectionFactoryとrequestQueueは、glassfishから@Resourceとして注入されます。メインキューはGlassfishで定義されています。
Webサービスの内部:
connection = connectionFactory .createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(requestQueue);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
MyObject myObj=new MyObject();
Message message=session.createObjectMessage(myObj);
TemporaryQueue responseQueue = session.createTemporaryQueue();
MessageConsumer consumer = session.createConsumer(responseQueue);
message.setJMSReplyTo(responseQueue);
producer.send(message);
//if I comment out the next line, the message appears on the queue. If I leave it in, it will behave as described above.
Message response=consumer.receive();
個別の接続とセッション、非同期コンシューマーなど、さまざまなアプローチを試し、プロデューサーのトランザクションセッションを試みましたが、コミットしようとしたときにのみスタックトレースを取得しました。
これを適切にキューに入れるために何が欠けていますか?
前もって感謝します!
編集:ConnectionFactoryおよびQueueのDomain.xml参照:
<connector-connection-pool description="Connection factory for job processing" name="jms/MyJobs"
resource-adapter-name="jmsra" connection-definition-name="javax.jms.ConnectionFactory"
transaction-support=""></connector-connection-pool>
<connector-resource pool-name="jms/MyJobs" jndi-name="jms/MyJobs"></connector-resource>
<admin-object-resource res-adapter="jmsra" res-type="javax.jms.Queue"
description="Queue to request a job process" jndi-name="jms/MyJobRequest">
<property name="Name" value="MyJobRequest"></property>
</admin-object-resource>
[...]
<resource-ref ref="jms/MyJobs"></resource-ref>
<resource-ref ref="jms/MyJobRequest"></resource-ref>