[z/OS]

コマンド・サーバーの使用

コマンド・サーバーは、コマンド・プロセッサー・コンポーネントと連動する IBM® MQ コンポーネントです。 コマンド・サーバーにはフォーマット設定メッセージを送信することができ、コマンド・サーバーはそのメッセージを解釈し、管理要求を実行し、および応答を管理アプリケーションに返します。

コマンド・サーバーは、要求メッセージをシステム・コマンド入力キューから読み取り、 それらを検査し、有効なものをコマンド・プロセッサーにコマンドとして渡します。 コマンド・プロセッサーは、コマンドを処理し、 すべての応答を応答メッセージとして、指定された応答先キューに書き込みます。 最初の応答メッセージには、ユーザー・メッセージ CSQN205I が入っています。 詳しくは、 コマンド・サーバーからの応答メッセージの解釈 を参照してください。 コマンド・サーバーは、チャネル・イニシエーターおよびキュー共有グループのコマンドがどこから実行された場合でも、それらの処理も行います。

コマンドを処理するキュー・マネージャーの識別

管理用プログラムから実行したコマンドを処理するキュー・マネージャーは、 メッセージの書き込み先となるシステム・コマンド入力キューを所有しているキュー・マネージャーです。

コマンド・サーバーを開始する

通常、コマンド・サーバーは、キュー・マネージャーが開始したときに、 自動的に開始します。 コマンド・サーバーは、メッセージ CSQ9022I 'START QMGR' NORMAL COMPLETION が、 START QMGR コマンドから戻されると、ただちに使用可能になります。 コマンド・サーバーは、システム終了フェーズで、接続されているすべてのタスクが切り離されたときに停止します。

コマンド・サーバーは、 START CMDSERV および STOP CMDSERV コマンドを使用して制御できます。 IBM MQ の再始動時にコマンド・サーバーが自動的に始動しないようにするには、STOP CMDSERV コマンドを CSQINP1 または CSQINP2 初期設定データ・セットに追加します。 ただし、これは、チャネル・イニシエーターまたはキュー共有グループのコマンドの処理の妨げになるので、お勧めできません。

STOP CMDSERV コマンドは、現在のメッセージの処理が完了した直後、 メッセージが処理中でなければただちに、コマンド・サーバーを停止します。

コマンド・サーバーが、プログラムの中の STOP CMDSERV コマンドで停止した場合、 そのプログラムの他のコマンドは処理することができなくなります。 コマンド・サーバーを再始動するには、 z/OS® コンソールから START CMDSERV コマンドを発行する必要があります。

キュー・マネージャーの実行中に、コマンド・サーバーを停止して再始動した場合、 コマンド・サーバーが停止したときにシステム・コマンド入力キューにあったすべてのメッセージは、 コマンド・サーバーが再始動したときに処理されます。 ただし、コマンド・サーバーが停止した後でキュー・マネージャーを停止して再始動した場合は、 コマンド・サーバーが再始動したときには、 システム・コマンド入力キュー上の持続メッセージのみが処理されます。 システム・コマンド入力キューに入っているすべての非持続メッセージは失われます。

コマンド・サーバーへのコマンドの送信

各コマンドについて、そのコマンドが含まれるメッセージを作成し、 そのメッセージをシステム・コマンド入力キューに書き込みます。

IBM MQ コマンドを含むメッセージの作成
必要なコマンドを含む要求メッセージを作成することにより、 IBM MQ コマンドをアプリケーション・プログラムに組み込むことができます。 このような各コマンドについて、次のようにします。
  1. コマンドを表す文字ストリングが入ったバッファーを作成します。
  2. 呼び出しの buffer パラメーターにバッファー名を指定して、 MQPUT 呼び出しを発行します。
C 言語でこれを行う最も簡単な方法は、「char」を使用してバッファーを定義することです。 以下に例を示します。
char message_buffer[ ] = "ALTER QLOCAL(SALES) PUT(ENABLED)";

コマンドを作成する場合は、NULL 文字で終了する文字ストリングを使用してください。 このようにして定義されたコマンドの冒頭に、 コマンド接頭部ストリング (CPF) を指定しないでください。 このようにしておくと、コマンド・スクリプトを他のキュー・マネージャーで実行したい場合に、 コマンド・スクリプトを変更する必要がありません。 ただし、応答先キューに書き込まれるすべての応答メッセージに CPF が組み込まれることを考慮する必要があります。

コマンド・サーバーは、引用符で囲まれていない小文字をすべて大文字に変換します。

コマンドの長さは、最大 32 762 文字です。

システム・コマンド入力キューへのメッセージの書き込み

コマンドが設定された要求メッセージをシステム・コマンド入力キューに書き込むには、 MQPUT 呼び出しを使用します。 この呼び出しでは、すでにオープンされている応答先キューの名前を指定します。

MQPUT 呼び出しを使用するには、以下のようにします。
  1. 次のような MQPUT のパラメーターを設定します。
    Hconn
    MQCONN または MQCONNX 呼び出しによって戻された接続ハンドル。
    Hobj
    システム・コマンド入力キューに対する MQOPEN 呼び出しによって戻されたオブジェクト・ハンドル。
    BufferLength
    フォーマット後のコマンドの長さ。
    Buffer
    コマンドが入っているバッファーの名前。
  2. 次のような MQMD のフィールドを設定します。
    MsgType
    MQMT_REQUEST
    Format
    MQFMT_STRING または MQFMT_NONE

    キュー・マネージャーと同じコード・ページを使用していない 場合は、CodedCharSetId (適切な場合) および MQFMT_STRING を設定し、 コマンド・サーバーがメッセージを変換できるようにします。 コマンドが PCF として解釈されるため、MQFMT_ADMIN は設定しないでください。

    ReplyToQ
    応答先キューの名前。
    ReplyToQMgr
    応答をローカル・キュー・マネージャーに送りたい場合は、 このフィールドをブランクのままにします。 IBM MQ コマンドをリモート・キュー・マネージャーに送信する場合は、その名前をここに入力します。 また、 分散キューイングおよびクラスターで説明されているように、正しいキューおよびリンクがセットアップされている必要があります。
  3. 必要に応じて、MQMD の他のフィールドを設定します。 通常、コマンドには非持続メッセージを使用してください。
  4. 必要に応じて、PutMsgOpts オプションを設定します。

    MQPMO_SYNCPOINT (デフォルト) を指定した場合、 MQPUT 呼び出しの後に同期点呼び出しを行う必要があります。

MQPUT1 およびシステム・コマンド入力キューの使用
1 つのメッセージだけをシステム・コマンド入力キューに書き込みたい場合は、MQPUT1 呼び出しを使用することができます。 この呼び出しは、MQOPEN 機能、それに続く 1 メッセージの MQPUT 機能、さらにそれに続く MQCLOSE 機能を、 1 つの呼び出しに結合したものです。 この呼び出しを使用する場合は、パラメーターを適宜修正してください。 詳しくは、 MQPUT1 呼び出しを使用したキューへの 1 つのメッセージの書き込み を参照してください。