10.7 制御情報とアプリケーションデータの変換
アプリケーションがメッセージをキューに登録するとき,ローカルキューマネジャは制御情報をメッセージ記述子に追加し,キューマネジャとMCAでメッセージを処理しやすくします。通常は,ローカルシステムの環境の文字セットとマシンコード形式でメッセージヘッダのデータフィールドを作成します。
TP1/Message Queueでは,MQAサービス定義のmqa_local_ccsidオペランドを指定することによって,キューマネジャがメッセージ記述子に設定する文字セットを指定できます。
メッセージをシステム間で移動するとき,必要に応じて,受信側システムで必要な文字セットとマシンコード形式にアプリケーションデータを変換できます。この変換は受信側システムのアプリケーション,または送信側システムのMCAで実行できます。受信側システムでデータ変換がサポートされている場合は,送信側システムで変換してから送信する方法よりも,受信側アプリケーションでアプリケーションデータを変換する方法をお勧めします。
MQGET命令に指定するMQGMO構造体のOptionsフィールドにMQGMO_CONVERTを指定するときにアプリケーションデータは変換されます。このときの条件を次に示します。
-
メッセージに対応するMQMD構造体のCodedCharSetIdおよびEncodingフィールドが,MQGET命令に指定したMQMD構造体の値とは異なること。
-
メッセージに関連するMQMD構造体のFormatフィールドがMQFMT_STRINGであること。
-
MQGET命令に指定されたBufferLengthパラメタが0でないこと。
-
メッセージデータ長が0でないこと。
-
メッセージに関連するMQMD構造体のCodedCharSetIdおよびEncodingフィールドと,MQGET命令に指定したMQMD構造体の値の変換をキューマネジャがサポートすること。
-
キューマネジャがメッセージフォーマットの変換をサポートすること。メッセージに関連するMQMD構造体のFormatフィールドが組み込みフォーマットの場合は,キューマネジャはメッセージを変換できます。組み込みフォーマットでない場合は,データ変換を実行するUOCをユーザが作成しなくてはなりません。
MCAでデータ変換を実行する場合には,MQT通信構成定義のmqtalccha定義コマンドの-dオプションのcnvccsidオペランドを指定してください。データ変換に失敗すると,メッセージは送信側キューマネジャのデッドレターキューに登録され,MQDLH構造体のFeedbackフィールドに理由が設定されます。メッセージをデッドレターキューに登録できない場合は,チャネルは終了し,無変換のメッセージが転送キューに残ります。送信側MCAではなく受信側アプリケーションでデータ変換する場合は,これを回避できます。
通常,組み込みフォーマットやデータ変換のUOCは,文字データとして記述されるデータを,メッセージで使用される文字セットから必要な文字セットに変換します。また,数値データとして記述されるデータを必要なマシンコード形式に変換します。
TP1/Message Queueがサポートする文字セットおよびマシンコード形式については,マニュアル「TP1/Message Queue プログラム作成リファレンス」を参照してください。