2

JMS API を使用して、メッセージを Websphere MQ サーバーに送信しています。私が作成したメッセージを取得するアプリケーションでは、MQMD 構造体の ApplicationID フィールドを定数値に設定する必要があります。JMS API で MQMD 構造にアクセスする方法が見つかりませんでした

質問: これを行う方法はありますか? はいの場合、どのように?いいえの場合、私の唯一のオプションは、JMS API の代わりに MQ Java API を使用することですか?

4

3 に答える 3

2

v7.0以降、すべてのMQMDフィールドをJMSメッセージプロパティとして読み取ることができ、それらの多くを同じ方法で設定できます。

参照: http: //publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/jm41030_.htm

ただし、この機能を使用するには、クライアントとWMQサーバーの両方がv7.0以降である必要があります。

于 2010-03-31T01:34:12.907 に答える
1

MQMD フィールドは、受信したメッセージから読み取ることができます。setMQMDReadEnabled(true) メソッドを呼び出して、宛先の MQMDReadEnabled プロパティを設定します。

次に、getStringProperty メソッドを使用して applicationIdentityData を読み取ることができます。

于 2011-11-23T17:11:26.463 に答える
0

MQドキュメントから:

MQMDにJMSフィールドと同等のフィールドが含まれている場合、JMSフィールドはMQMDフィールドにマップされます。追加のMQMDフィールドはJMSプロパティとして公開されます。これは、JMSアプリケーションが非JMSアプリケーションと通信するときに、これらのフィールドを取得または設定する必要がある場合があるためです。

探しているプロパティはおそらく「JMSXAppID」です。

それでも問題が解決しない場合は、ドキュメントを確認してください。「アプリケーションがブローカーへのリアルタイム接続を使用する場合、このセクションは適用されません」のような奇妙なことがたくさんあります。(したがって、「ブローカーへのリアルタイム接続」は必要ありません...それが意味するものは何でも)。

また、「管理者は、宛先のTARGCLIENTプロパティをMQに設定することにより、JMSアプリケーションがそのようなアプリケーションと通信していることを示します。

それが意味をなさない場合は、MQが舞台裏で何をしているのかを理解するのに役立つテストケースを作成する必要があります。JMSメッセージを作成し、すべてのプロパティをいくつかの奇妙な値に設定して、それを調べられる非アクティブなMQキューに送信します。このようにして、どのフィールドがどこにマップされているかを把握できます。

それがうまくいった後、あなたは他の方法を試すことができます。JMSの実装でメッセージのすべてのプロパティをマップなどとして取得できない場合は、Javaデバッガーを使用してメモリ内のデータを確認してください。Field.setAccessible(true)あなたの友だちです。

于 2009-02-12T13:10:27.813 に答える