9.6.1 配布リストのオープン
配布リストをオープンするにはMQOPEN命令を使用し,配布リストで実行したいことを指定するにはMQOPEN命令のオプションを使用してください。
MQOPEN命令の入力として,次に示す項目を指定してください。
-
コネクションハンドル
-
オブジェクト記述子(MQOD構造体)の一般情報
-
オープンする各キューの名前
オブジェクトレコード(MQOR構造体)を使用します。
MQOPEN命令の出力を次に示します。
-
配布リストのアクセスを表すオブジェクトハンドル
-
一般完了コード
-
一般理由コード
-
応答レコード(任意)
各あて先についての完了コードと理由コードがあります。
(1) MQOD構造体の使用
オープンするキューを識別するにはMQOD構造体を使用してください。配布リストを定義するには,VersionフィールドにMQOD_VERSION_2を,RecsPresentフィールドに0より大きい値を,ObjectTypeフィールドにMQOT_Qを指定してください。
(2) MQOR構造体の使用
MQOR構造体を各あて先に提供してください。この構造体にはあて先キューとキューマネジャの名前があります。配布リストではMQOD構造体のObjectNameおよびObjectQMgrNameフィールドは使用しません。一つ以上のオブジェクトレコードが必要です。ObjectQMgrNameフィールドが空白のままの場合はローカルキューマネジャが使用されます。
あて先キューは次に示す2とおりの方法で指定できます。
-
ObjectRecPtrフィールドを使用する方法
アプリケーションでMQOD構造体とは別にMQOR構造体の配列を宣言し,ObjectRecPtrフィールドに配列のアドレスを設定してください。C言語での記述例を次に示します。
MQOD MyMqod; MQOR MyMqor[100]; MyMqod.ObjectRecPtr = MyMqor;
ObjectRecPtrフィールドは,ポインタデータ型をサポートするプログラミング言語(C言語)で使用してください。
-
ObjectRecOffsetフィールドを使用する方法
アプリケーションでMQOD構造体に,必要な配列要素数のMQOR構造体が続く独自の構造体を宣言してください。また,ObjectRecOffsetフィールドには,配列の最初の要素についてMQOD構造体の最初からのオフセットを設定します。オフセットが正確であるように注意してください。
アプリケーションのすべての動作環境で使用できる場合は,プログラミング言語で提供される組み込み機能を利用することをお勧めします。COBOL言語での記述例を次に示します。
01 MY-OPEN-DATA. 02 MY-MQOD. COPY CMQODV. 02 MY-MQOR-TABLE OCCURS 100 TIMES. COPY CMQORV. MOVE LENGTH OF MY-MQOD TO MQOD-OBJECTRECOFFSET.
必要な組み込み機能を動作環境で使用できない場合にはMQOD_CURRENT_LENGTH定数を使用できます。この場合の記述例を次に示します。
01 MY-MQ-CONSTANTS. COPY CMQV. 01 MY-OPEN-DATA. 02 MY-MQOD. COPY CMQODV. 02 MY-MQOR-TABLE OCCURS 100 TIMES. COPY CMQORV. MOVE MQOD-CURRENT-LENGTH TO MQOD-OBJECTRECOFFSET.
ただし,この方法はMQOD構造体とMQOR構造体の配列が連続しているときだけ,正常に動作します。コンパイラがMQOD構造体とMQOR構造体の配列の間にスキップバイトを挿入するときには,ObjectRecOffsetフィールドの値にその分を追加してください。
ObjectRecOffsetフィールドは,ポインタデータ型をサポートしていないプログラミング言語(COBOL言語)で使用してください。
ObjectRecOffsetまたはObjectRecPtrフィールドのどちらかを使用してください。両方が0の場合,または両方が0でない場合には,MQRC_OBJECT_RECORDS_ERRORの理由コードで命令が失敗します。
(3) MQRR構造体の使用
この構造体は各あて先に固有な応答レコードです。応答レコードには,配布リストの各キューに対応するCompCodeおよびReasonフィールドがあります。この構造体を使用してユーザは問題を特定できます。
例えば,MQRC_MULTIPLE_REASONSの理由コードを受け取り,配布リストに五つのあて先キューがある場合は,この構造体を使用しないとどのキューに問題があるのか特定できません。しかし,各あて先に完了コードと理由コードがあれば,エラーをより容易に特定できるようになります。
C言語での配布リストのオープンについて,次の図に示します。
COBOL言語での配布リストのオープンについて,次の図に示します。
(4) MQOPEN命令の使用
配布リストのオープン時には,次に示すオプションを指定します。
-
MQOO_OUTPUT
-
MQOO_FAIL_IF_QUIESCING(任意)
-
MQOO_ALTERNATE_USER_AUTHORITY(任意)
-
MQOO_*_CONTEXT(任意)