JMS API を使用して、メッセージを Websphere MQ サーバーに送信しています。私が作成したメッセージを取得するアプリケーションでは、MQMD 構造体の ApplicationID フィールドを定数値に設定する必要があります。JMS API で MQMD 構造にアクセスする方法が見つかりませんでした
質問: これを行う方法はありますか? はいの場合、どのように?いいえの場合、私の唯一のオプションは、JMS API の代わりに MQ Java API を使用することですか?
JMS API を使用して、メッセージを Websphere MQ サーバーに送信しています。私が作成したメッセージを取得するアプリケーションでは、MQMD 構造体の ApplicationID フィールドを定数値に設定する必要があります。JMS API で MQMD 構造にアクセスする方法が見つかりませんでした
質問: これを行う方法はありますか? はいの場合、どのように?いいえの場合、私の唯一のオプションは、JMS API の代わりに MQ Java API を使用することですか?
v7.0以降、すべてのMQMDフィールドをJMSメッセージプロパティとして読み取ることができ、それらの多くを同じ方法で設定できます。
参照: http: //publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/jm41030_.htm
ただし、この機能を使用するには、クライアントとWMQサーバーの両方がv7.0以降である必要があります。
MQMD フィールドは、受信したメッセージから読み取ることができます。setMQMDReadEnabled(true) メソッドを呼び出して、宛先の MQMDReadEnabled プロパティを設定します。
次に、getStringProperty メソッドを使用して applicationIdentityData を読み取ることができます。
MQドキュメントから:
探しているプロパティはおそらく「JMSXAppID」です。
それでも問題が解決しない場合は、ドキュメントを確認してください。「アプリケーションがブローカーへのリアルタイム接続を使用する場合、このセクションは適用されません」のような奇妙なことがたくさんあります。(したがって、「ブローカーへのリアルタイム接続」は必要ありません...それが意味するものは何でも)。
また、「管理者は、宛先のTARGCLIENTプロパティをMQに設定することにより、JMSアプリケーションがそのようなアプリケーションと通信していることを示します。」
それが意味をなさない場合は、MQが舞台裏で何をしているのかを理解するのに役立つテストケースを作成する必要があります。JMSメッセージを作成し、すべてのプロパティをいくつかの奇妙な値に設定して、それを調べられる非アクティブなMQキューに送信します。このようにして、どのフィールドがどこにマップされているかを把握できます。
それがうまくいった後、あなたは他の方法を試すことができます。JMSの実装でメッセージのすべてのプロパティをマップなどとして取得できない場合は、Javaデバッガーを使用してメモリ内のデータを確認してください。Field.setAccessible(true)
あなたの友だちです。