__server_pwu() - サーバー作業単位の処理

標準

標準/拡張機能 C/C++ 依存項目
z/OS®UNIX 両方  

形式

#include <sys/server.h>

int __server_pwu(int fcncode, const char *transclass,
                 const char *applenv, server_classify_t classify,
                 int *appldatalen, void **appldata,
                 struct __srv_fd_list **fdlstruc);

機能説明

__server_pwu() 関数は、ワークロード・マネージャー (WLM) サービスによる作業を管理および処理するための汎用インターフェースを提供します。このサービスで提供される機能には次のものが含まれます。作業要求を WLM 作業 キューに入れ、作業を WLM 作業キューから取得し、作業を別の WLM 作業 サービスに転送し、作業単位 (UOW) を終了し、WLM エンクレーブを削除し、さらに WLM 作業サービスを最新表示します。

サポートされるパラメーターは次のとおりです。
fcncode
要求される関数を指示する、次の 1 つ以上の値が入ります。
SRV_PUT_NEWWRK
新規に作成された WLM エンクレーブの一部として、applenv パラメーターによって識別されるアプリケーション環境サーバー の作業キューに、新規作業要求を入れることを指示します。この値は、その他のどの fcncode 値とも結合できません。
SRV_PUT_SUBWRK
呼び出しスレッドと関連した WLM エンクレーブの一部として、applenv パラメーターによって識別されるアプリケーション環境サーバー の作業キューに、新規作業要求を入れることを指示します。この値は、SRV_END_WRK fcncode 値と結合することができます。
SRV_TRANSFER_WRK
呼び出しスレッドにより取得した最後の作業要求を、ターゲット・アプリケーション環境サーバーの作業キューに転送することを 指示します。転送の一部として、呼び出しスレッドがその WLM エンクレーブから分離されます。この値は、その他のどの fcncode 値とも結合できません。
SRV_GET_WRK
新規作業要求を、呼び出しアプリケーション環境サーバーの WLM 作業キュー から取得することを指示します。また、SRV_GET_WRK fcncode も、呼び出しスレッドが、作業要求の WLM エンクレーブと関連付けられるという結果になります。呼び出しスレッドが、既に、SRV_GET_WRK の __server_pwu() に対する以前の 呼び出しのために、WLM エンクレーブと関連付けられている場合には、取得された作業要求と関連付けられるのみでなく、以前の WLM エンクレーブ から分離されます。呼び出しスレッドが、thru タスク終了に進むか、あるいはこのプロセスが終了 されるときには、終了タスクまたはプロセスにより所有されている場合、作業要求が終了され、関連した WLM エンクレーブが削除されます。 SRV_PUT_NEWWRK または SRV_TRANSFER_WRK 関数を使用して、作業がキューに 入れられた場合には、SRV_GET_WRK 呼び出し元がエンクレーブを所有します。呼び出し元が、pthread_create (pthread) を介して作成されるスレッドの 場合には、このスレッド・タスクがエンクレーブを所有します。呼び出し元が pthread ではない場合には、プロセスによってエンクレーブが 所有されます。この値は、SRV_END_WRK および SRV_DEL_ENC fcncode 値と結合する ことができます。
SRV_REFRESH_WRK
呼び出し作業およびキュー・マネージャーによって管理 される、アプリケーション環境と関連したサーバーの更新 を指示します。これによって、すべてのサーバーで、既存の 作業要求が完了されてから、終了されることになります。新規 サーバーは、それから新規作業を処理するために開始されます。この値は、その他のどの fcncode 値とも結合できません。
SRV_END_WRK
呼び出しスレッドを、その WLM エンクレーブから分離するように指示します。この値は、SRV_DEL_ENC、SRV_PUT_SUBWRK、および SRV_GET_WRK fcncode 値 と結合することができます。
SRV_DEL_ENC
呼び出しスレッドと関連した WLM エンクレーブの削除を指示します。この値は、SRV_GET_WRK および SRV_END_WRK fcncode 値と結合する ことができます。
SRV_DISCONNECT
呼び出しサーバーの WLM への接続を、切断するように指示します。 いったんサーバーが WLM から切断されると、このサービスを使用して、(server_init() 関数の呼び出しによる) 接続されていたアプリケーション環境の要求を処理することができなくなります。SRV_DISCONNECT が作業およびキュー・マネージャーにより実行される場合には、すべての関連サーバー・マネージャーは、暗黙的に WLM への接続を失います。また、関連サーバー・マネージャーはこのサービスを通して要求を処理することもできなくなります。
SRV_DISCONNECT_COND
呼び出し元に、まだ管理中の WLM エンクレーブがそれ以上ない場合のみ、呼び出しサーバーの WLM への接続を、切断するように指示します。作業およびキュー・マネージャーは、まだサーバー・マネージャーで保守されて いる場合には、依然としてエンクレーブを管理しています。 いったんサーバーが WLM から切断されると、このサービスを使用して、(server_init() 関数の呼び出しによる) 接続されていたアプリケーション環境の要求を処理することができなくなります。SRV_DISCONNECT_COND が作業およびキュー・マネージャーにより 実行される場合には、すべての関連サーバー・マネージャーは、暗黙的に WLM への接続を失います。また、関連サーバー・マネージャーはこのサービスを通して要求を処理することもできなくなります。
*transclass
作業要求と関連付けられるトランザクション・クラスの 名前を表す NULL 終了ストリングを示します。このパラメーターが 有効なのは、SRV_PUT_NEWWRK fcncode パラメーター値 が指定される場合のみです。その他の fcncode パラメーター値では、NULL にする必要があります。文字ストリングの長さは、最高 8 バイトです。
*applenv
作業要求が、そのもとで保守されるアプリケーション環境の名前を 含む NULL 終了ストリングを示します。このパラメーターが有効なのは、SRV_PUT fcncode 値、SRV_TRANSFER_WRK fcncode 値、および SRV_REFRESH_WRK fcncode 値のセットの場合のみです。その他の fcncode パラメーター値では、NULL にする必要があります。文字ストリングの長さは、最高 32 バイトです。
*classify
作業要求マクロについての、種別情報を含む文字ストリングを示します。
*appldatalen
SRV_PUT または SRV_TRANSFER fcncode パラメーター値 の 1 つが指定されるとき、これは **appldata パラメーターによって 指定されたアプリケーション・データの長さを含む整数を指すように指定された パラメーターです。SRV_GET_WRK fcncode 値が指定された場合、これは出力パラメーターです (ここでは、__server_pwu() 関数により、取得した作業要求と関連した アプリケーション・データの長さが戻されます)。*appldatalen が有効なのは、SRV_PUT、SRV_GET_WRK、または SRV_TRANSFER fcncode パラメーター値の 1 つが指定された ときのみで、値が指定されない場合には、無視されます。アプリケーション・データでサポートされる最大長は、10 メガバイトです。
**appldata
SRV_PUT または SRV_TRANSFER fcncode パラメーター値 の 1 つが指定されるとき、これはアプリケーション・データ ・ストリングを指すパラメーターです。このアプリケーション・データによって、呼び出し元は、要求している特定作業を 固有に識別できます。SRV_GET_WRK fcncode 値が指定された場合、これは出力パラメーターです (ここでは、__server_pwu() 関数により、取得した作業要求と関連した アプリケーション・データへのポインターが戻されます)。戻りデータ域は、作業要求を WLM 作業キューに入れる、対応する __server_pwu() 呼び出しで提供されたデータ域の 同一のコピーになります。**appldata が有効なのは、SRV_PUT、SRV_GET_WRK、または SRV_TRANSER fcncode パラメーター値の 1 つが指定された ときのみで、値が指定されない場合には、無視されます。
**fdlstruct
SRV_PUT または SRV_TRANSFER fcncode パラメーター値 の 1 つが指定されたとき、**fdlstruc パラメーターは入力パラメーターで、__srv_fd_list 構造体へのポインターが入ります。__srv_fd_list 構造体には、以下のメンバーが入ります。
int        fdcount        count of file descriptiors
int        flags          flag SRV_FDCLOSE
int        fd(SRV_FDS)    file descriptor list
提供される __srv_fd_list 構造体には、伝搬されるファイル記述子の数が含まれており、このサービスへの呼び出し によって作成された作業要求を取得するために、server_pwu() を 呼び出すプロセスに伝搬されるファイル記述子のリストが、後に続いています。SRV_FDCLOSE フラグが、__srv_fd_list 構造体のフラグ・フィールドでオンに なっている場合には、リスト中のファイル記述子すべてが、呼び出しプロセスで クローズされます。NULL ポインターが指定されると、ファイル記述子は伝搬されません。**fdlstruc パラメーターを使用して、ファイル記述子を伝搬する場合 には、リスト中のファイル記述子すべてが、呼び出し元のプロセス中の有効オープン・ ファイル記述子であり、このサービスの処理中にクローズされていないことを、呼び出し元は確認することが必要です。そうでない場合には、この関数による、指定ファイル記述子の妥当な伝搬は保証 できません。SRV_GET_WRK fcncode パラメーター値が指定された場合、**fdlstruc パラメーターは出力パラメーターです (ここでは、__server_pwu() 関数は、取得した作業要求と関連した __srv_fd_list 構造体への ポインターを戻します)。戻された __srv_fd_list 構造体には、戻された構造体にファイル記述子の数が入り、作業要求を WLM 作業キューに入れる、対応する __server_pwu() 呼び出し の __srv_fd_list 構造体で提供されたファイル記述子の呼び出しプロセスの 再マップ・ファイル記述子の値のリストが後に続きます。戻り __srv_fd_list 構造体のフラグ・フィールドは、NULL になります。**fdlstruc パラメーターが有効なのは、SRV_PUT、SRV_TRANSFER、または SRV_GET_WRK fcncode パラメーター値 の 1 つが指定された場合のみです。値が指定されない場合には、無視されます。ファイル記述子のリスト構造でサポートされるファイル記述子の最大数は 64 です。

正常に実行された SRV_PUT_NEWWRK fcncode の __server_pwu() への 呼び出しは、WLM 作業キューに入れる作業要求を作成するのみでなく、作業要求 の取得時に、その作業を実行するための新規 WLM エンクレーブも作成します。対照的に、キュー作業では、SRV_PUT_SUBWRK と SRV_TRANSFER_WRK fcncodes が呼び出しスレッドの既存の WLM エンクレーブの一部である必要があります。

正常に実行された SRV_GET_WRK fcncode の __server_pwu() への 呼び出しは、呼び出し元が、呼び出し元のアプリケーション環境と関連した WLM 作業 キューから作業要求を取得するという結果になるのみでなく、呼び出しスレッドが、取得した作業要求と関連した WLM エンクレーブと関連付けられるという結果にも なります。

server_pwu 関数の使用には、__server_init() 関数へ呼び出しを正常に発行する 呼び出しアドレス・スペースが必要です。

SRV_PUT_NEWWRK 関数を正常に実行するために、呼び出し元は 次の managertype パラメーターの組み合わせの 1 つで、__server_init() サービスへの呼び出しを正常に発行している必要があります。
  • SRV_WORKMGR + SRV_QUEUEMGR
  • SRV_WORKMGR + SRV_QUEUEMGR + SRV_SERVERMGR
SRV_PUT_SUBWRK および SRV_TRANSFER_WRK 関数を正常に実行するために、呼び出し元は、次の managertype パラメーターの組み合わせの 1 つで、__server_init() サービスへの呼び出しを正常に発行している必要があります。
  • SRV_WORKMGR + SRV_QUEUEMGR SRV_SERVERMGR
  • SRV_SERVERMGR
SRV_GET_WRK、SRV_END_WRK および SRV_DEL_ENC 関数を正常に実行するために、呼び出し元は次の managertype パラメーターの組み合わせの 1 つで、__server_init() サービスへの呼び出しを正常に発行している必要があります。
  • SRV_WORKMGR + SRV_QUEUEMGR SRV_SERVERMGR
  • SRV_SERVERMGR
SRV_REFRESH_WRK 関数を正常に実行するために、呼び出し元は 次の managertype パラメーターの組み合わせのいずれかで、__server_init() サービスへの呼び出しを正常に発行している必要があります。
  • SRV_WORK_MGR + SRV_QUEUE_MGR
  • SRV_WORK_MGR + SRV_QUEUE_MGR + SRV_SERVER_MGR

戻り値

正常に実行された場合、__server_pwu() は 0 を戻します。

正常に実行されなかった場合、__server_pwu() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EAGAIN
要求されたサービスは、現在時点で実行できませんでした。__errno2() を使用して、その障害についての理由コードを取得します。
EFAULT
このサービスの引数に、呼び出し元にアクセス不能なアドレスが入っていました。
EINVAL
managertype パラメーターに正しくない値が入っています。
EMVSERR
MVS™ の環境エラーまたは内部エラーが発生しました。__errno2() を使用して、その障害についての正確な理由を取得します。
EMVSWLMERROR
WLM サービスで障害が発生しました。__errno2() を使用して、その障害についての WLM サービス理由コードを取得してください。

関連情報