配布ヘッダ構造体の現在のバージョン
このフィールドの初期値は MQDH_VERSION_1 です。
MQDLH 構造体 − デッドレターヘッダ
MQDLH 構造体は,次のフィールドから構成されます。
フィールド(データタイプ) 内容 初期値
StrucId(MQCHAR4 型) 構造体識別子 MQDLH_STRUC_ID
Version(MQLONG 型) 構造体バージョン番号 MQDLH_VERSION_1
Reason(MQLONG 型) メッセージ通知理由 MQRC_NONE
DestQName(MQCHAR48 型) あて先キュー名 ヌル文字列/空白
DestQMgrName(MQCHAR48 型) あて先キューマネジャ名 ヌル文字列/空白
Encoding(MQLONG 型) MQDLH 構造体に続くデータのマシ
ンコード形式
0
CodedCharSetId(MQLONG 型) MQDLH 構造体に続くデータの文字
セット識別子
MQCCSI_UNDEFINED
Format(MQCHAR8 型) MQDLH 構造体に続くデータのフォー
マット名
MQFMT_NONE
PutApplType(MQLONG 型) 登録アプリケーションタイプ 0
PutApplName(MQCHAR28 型) 登録アプリケーション名 ヌル文字列/空白
PutDate(MQCHAR8 型) 登録日付 ヌル文字列/空白
PutTime(MQCHAR8 型) 登録時刻 ヌル文字列/空白
概要
目的
MQDLH 構造体には,デッドレターキューに格納されるメッセージのアプリケーションデータの先頭に付 けられる情報を記述します。デッドレターキューにメッセージが届くのは,次のどちらかの場合です。
• キューマネジャまたは MCA が,デッドレターキューにメッセージを転送した場合
• アプリケーションが直接,デッドレターキューにメッセージを登録した場合
セグメントであるメッセージが,MQDLH 構造体を先頭に付けて登録される場合,キューマネジャは特別 な処理をします。詳細については,この章の「MQMDE 構造体 − メッセージ記述子の拡張」を参照し てください。
フォーマット名
MQFMT_DEAD_LETTER_HEADER
文字セットおよびマシンコード
MQDLH 構造体のフィールドは,MQDLH 構造体の前にあるヘッダ構造体の CodedCharSetId および Encoding フィールドの文字セットおよびマシンコードに従います。また,MQDLH 構造体がアプリケー ションメッセージデータの先頭にある場合,MQMD 構造体の CodedCharSetId および Encoding フィー ルドに従います。
文字セットは,キュー名に有効な 1 バイト文字セットにする必要があります。
使用方法
アプリケーションが直接デッドレターキューにメッセージを登録する場合,メッセージデータの先頭に MQDLH 構造体を付ける必要があります。また,構造体の各フィールドを適切に初期化してください。
MQDLH 構造体を付けたかどうか,および各フィールドの値が正しいかどうかは,キューマネジャによっ てチェックされません。
デッドレターキューに登録するメッセージが長過ぎる場合,アプリケーションは次のどれかの処置をして ください。
• デッドレターキューに登録できるように,メッセージの後部を切り捨てます。
• 補助記憶装置にメッセージを格納し,その旨を示す例外報告メッセージをデッドレターキューに登録し ます。
• メッセージを破棄し,登録元アプリケーションにエラーを通知します。重要なメッセージの場合は,
メッセージを破棄するときに注意が必要です。この場合,登録元アプリケーションがメッセージの複製 を保持していると判明しているときだけ,破棄してください。例えば,MCA によって通信回線から受 け取ったメッセージの場合などです。
上記のどの方法を採用するかは,アプリケーションの設計方法によって異なります。
セグメントであるメッセージが MQDLH 構造体を先頭にして登録されたとき,キューマネジャは特別な処 理をします。詳細については,この章の「MQMDE 構造体 − メッセージ記述子の拡張」を参照してく ださい。
デッドレターキューへのメッセージの登録
メッセージをデッドレターキューへ登録するとき,MQPUT または MQPUT1 命令に使用する MQMD 構造体は,そのメッセージに関連する MQMD 構造体と同一にする必要があります(通常は,MQGET 命 令によって返される MQMD 構造体です)。ただし,次の例外があります。
• CodedCharSetId フィールドと Encoding フィールドには,MQDLH 構造体の各フィールドで使用す る値を設定します。
• Format フィールドには,MQFMT_DEAD_LETTER_HEADER を設定します。この値は,MQDLH 構造体でデータが始まることを示します。
• 次に示すコンテキストフィールドには,状況に合ったコンテキストオプションを使用して設定します。
• UserIdentifier
• AccountingToken
• ApplIdentityData
• PutApplType
• PutApplName
• PutDate
• PutTime
• ApplOriginData
• デッドレターキューに登録するメッセージがそれ以前のメッセージと無関係の場合,
MQPMO_DEFAULT_CONTEXT オプションを使用します。このオプションを使用すると,すべて のコンテキストフィールドに省略時の値が設定されます。
• サーバアプリケーションが受信したメッセージをデッドレターキューに登録する場合,元のコンテキス ト情報を保存するために,MQPMO_PASS_ALL_CONTEXT オプションを使用します。
• サーバアプリケーションが受信したメッセージに対する応答をデッドレターキューに登録する場合,
MQPMO_PASS_IDENTITY_CONTEXT オプションを使用します。このオプションを使用すると,
識別コンテキストの情報は保存されます。しかし,登録元コンテキストの情報は,サーバアプリケー ションのコンテキスト情報に変更されます。
• MCA が通信回線から受け取ったメッセージをデッドレターキューに登録する場合,元のコンテキスト 情報を保存するために MQPMO_SET_ALL_CONTEXT オプションを使用します。
MQDLH 構造体中の各フィールドは,次のように設定してください。
• CodedCharSetId フィールド,Encoding フィールドおよび Format フィールドには,MQDLH 構造 体に続くデータに応じた値を設定します。通常は,登録元のメッセージ記述子の値を設定します。
• 次に示すコンテキストフィールドには,デッドレターキューにメッセージを登録するアプリケーション に応じた値を設定します。これらの値は,登録元メッセージとは関係ありません。
• PutApplType
• PutApplName
• PutDate
• PutTime
• そのほかのフィールドには,適切な値を設定します。
アプリケーションは,各フィールドの値が適切かどうか,および文字フィールドの余りが空白で埋められ ているかどうかを確認する必要があります。MQDLH 構造体中の文字データは,ヌル文字で終了できませ ん。キューマネジャは,MQDLH 構造体のヌル文字以降の文字を,空白に置き換えません。
デッドレターキューからのメッセージの取り出し
アプリケーションは,デッドレターキューから取り出したメッセージが,MQDLH 構造体で始まっている かどうかを確認する必要があります。メッセージ記述子 MQMD 構造体の Format フィールドを調べるこ
とで,それを確認できます。Format フィールドが MQFMT_DEAD_LETTER_HEADER の場合,メッ セージデータが MQDLH 構造体で始まっていると判断できます。なお,メッセージを取り出すアプリケー ションは,メッセージが長過ぎて後部が切り捨てられた場合があることに注意してください。
フィールド
構造体を構成するフィールドについて,アルファベット順に説明します。
● CodedCharSetId(MQLONG 型) 文字セット識別子
MQDLH 構造体に続くデータの文字セット識別子です。MQDLH 構造体に続くデータ(通常は,元のメッセージから取られたデータ)の文字セット識別子を指定 します。MQDLH 構造体自身の文字データには適用されません。
MQPUT または MQPUT1 命令では,アプリケーションはデータに合った値をこのフィールドに設定する 必要があります。
MQCCSI_INHERIT
この構造体の文字セット識別子を引き継ぎます。
この構造体に続くデータの文字データは,この構造体と同じ文字セットです。
メッセージで送信される構造体のこの値を,キューマネジャは構造体の実際の文字セット識別子に変更 します。エラーが発生しない場合,MQGET 命令では MQCCSI_INHERIT は返されません。
MQMD 構造体の PutApplType フィールドの値が MQAT_BROKER の場合,MQCCSI_INHERIT は使用できません。
このフィールドの初期値は MQCCSI_UNDEFINED です。
● DestQMgrName(MQCHAR48 型) あて先キューマネジャ名
登録元メッセージのあて先であるキューマネジャの名称です。このフィールドの長さは,MQ_Q_MGR_NAME_LENGTH に定義されています。
このフィールドの初期値は,C 言語ではヌル文字列です。そのほかのプログラミング言語では,48 個の空 白です。
● DestQName(MQCHAR48 型) あて先キュー名
登録元メッセージのあて先キューの名称です。このフィールドの長さは,MQ_Q_NAME_LENGTH に定義されています。
このフィールドの初期値は,C 言語ではヌル文字列です。そのほかのプログラミング言語では,48 個の空 白です。
● Encoding(MQLONG 型) マシンコード形式
MQDLH 構造体に続くデータのマシンコード形式です。MQDLH 構造体に続くデータ(通常は,元のメッセージから取られたデータ)のマシンコード形式を指定 します。MQDLH 構造体自身の数値データには適用されません。
MQPUT および MQPUT1 命令では,アプリケーションはデータに合った値をこのフィールドに設定する 必要があります。
このフィールドの初期値は 0 です。
● Format(MQCHAR8 型) フォーマット名
MQDLH 構造体に続くデータのフォーマット名です。MQDLH 構造体に続くデータ(通常は元のメッセージから取られたデータ)のフォーマット名を指定しま す。
MQPUT および MQPUT1 命令では,アプリケーションはデータに合った値をこのフィールドに設定する 必要があります。このフィールドの設定方法は MQMD 構造体の Format フィールドと同じです。
このフィールドの長さは,MQ_FORMAT_LENGTH に定義されています。
このフィールドの初期値は MQFMT_NONE です。
● PutApplName(MQCHAR28 型) 登録アプリケーション名
メッセージをデッドレターキューに登録するアプリケーションの名称です。
名称の形式は,PutApplType フィールドの値に合わせます。この章の「MQMD 構造体 − メッセージ
記述子」で PutApplName フィールドの説明を参照してください。
キューマネジャがデッドレターキューにメッセージを転送する場合,PutApplName フィールドの値は キューマネジャ名の先頭から 28 文字までです。キューマネジャは,必要に応じて余りを空白で埋めます。
このフィールドの長さは,MQ_PUT_APPL_NAME_LENGTH に定義されています。
このフィールドの初期値は,C 言語ではヌル文字列です。そのほかのプログラミング言語では,28 個の空 白です。
● PutApplType(MQLONG 型) 登録アプリケーションタイプ
メッセージをデッドレターキューに登録するアプリケーションのタイプです。
このフィールドの意味は,メッセージ記述子 MQMD 構造体の PutApplType フィールドと同じです。
キューマネジャがデッドレターキューにメッセージを転送する場合,PutApplType フィールドの値は MQAT_QMGR です。
このフィールドの初期値は 0 です。