このセクションでは、次のトピックについて説明します。
サービスディレクトリを使用するために 2 つのオプションがあります。
Natural サブプログラム内のサービスディレクトリの使用
通常、サービスを見つけるには、Natural RPC では Natural サブプログラム内のサービスディレクトリを使用します。 このディレクトリは、SYSRPC
リモートディレクトリメンテナンスサービスディレクトリメンテナンス機能で生成した NATCLTGS
プログラム内の初期化した LDA データ構造であり、すべての RPC クライアントアプリケーションに有効にする必要があります。
リモートディレクトリの使用
サービスを見つけるには、リモートディレクトリを使用します。 リモートディレクトリサーバー(RDS)を使用すると、そのサービスを RPC 環境内の全クライアントが使用できるよう、1 つの場所にディレクトリ定義を定めることができます。
このセクションでは、サービスを見つけるためのリモートディレクトリサーバーの使用方法を説明します。
リモートディレクトリサーバーは、Natural サブプログラムとして実装されます。
そのようなサブプログラムのサンプルが、SYSRPC
ライブラリ内に提供されています。 このサブプログラムは RDSSCDIR
と呼ばれ、必要なディレクトリ情報はワークファイルから読み取られます。 このサブプログラムのインターフェイスは、独自のリモートディレクトリサービスの開発を可能にするためにドキュメント化されています。 詳細については、「RDS インターフェイスの作成」を参照してください。
RDS インターフェイスは、Natural サブプログラムの Natural パラメータデータエリアであり、ディレクトリサービスルーチンは Natural サブプログラムのコードセクションです。 リモート CALLNAT
がローカルサービスディレクトリ内で検出されない場合、RPC ランタイムは内部的なリモート CALLNAT
を実行することでリモートディレクトリサーバーと通信します。
内部ディレクトリキャッシュは、リモートディレクトリへのアクセスを最小にします。 キャッシュ情報は、リモートディレクトリサーバーにより定義された有効時間で制御されます。
リモートディレクトリサーバーを使用するには
ディレクトリファイルの作成
SYSRPC
ユーティリティのリモートディレクトリメンテナンスサービスディレクトリメンテナンス機能を使用して、リモートディレクトリサービスのディレクトリファイルを作成します。 サブプログラム RDSSCDIR
は SYSRPC ライブラリ内に提供されており、Natural ワークファイル(固定ブロック、レコード長 80 バイト)からディレクトリ情報を読み取ります。
リモートディレクトリサーバーの起動
リモートディレクトリサーバーを起動し、次の手順へ進んでください。
RDS の定義
次の2 つのオプションがあります。
プロファイルパラメータ RDS
に RDS を指定します。
または、SYSRPC
ユーティリティのメンテナンス機能を使用して、リモートディレクトリサーバーを定義します。『SYSRPC ユーティリティ』ドキュメントのリモートディレクトリメンテナンスサービスディレクトリメンテナンスを参照してください。 リモートディレクトリサーバーの定義は、互換性の理由でサポートを継続しています。 ただし、プロファイルパラメータ RDS
に RDS を定義してください。 このために、ディレクトリサーバーの場所の定義を許可するエントリが提供されています。 これにより、1 つ以上のリモートディレクトリサーバー定義による既存のローカルディレクトリ情報の展開が可能となります。
次に示すのは、サービスディレクトリ NATCLTGS
内のリモートディレクトリサーバーの定義方法の例です。
サービスディレクトリ | |||||
---|---|---|---|---|---|
NODE | SERVER | LIBRARY | PROGRAM | LOGON | |
1 | NODE1 |
||||
2 | SERVER1 |
||||
3 | SYSTEM |
||||
4 | TESTS1 |
||||
5 | TESTS2 |
||||
6 | RDSNODE |
||||
7 | DIRSRV1 |
||||
8 | #ACI |
||||
9 | RDSSCDIR |
この例では、ローカルに SERVER1
という名前のサーバーを定義します。 このサーバーは、サービス TEST1
および TEST2
を実行します。
さらに、リモートディレクトリサーバー DIRSRV1
に対する定義があります。 リモートディレクトリサーバーは、ライブラリ定義用にハッシュ(#)記号が先行することで識別されます。
NODE
および SERVER
の定義は、通常どおり Natural RPC 内で使用されます。 ライブラリ定義では、RDS との接続のために必ず使用されるトランスポートプロトコル(ACI)が定義されます。
最後に、PROGRAM
エントリにはリモートディレクトリサービスを提供するリモートサブプログラムの名前が含まれます(この場合は、サンプルサブプログラム RDSSCDIR
を参照します)。
RDS インターフェイスは、Natural サブプログラムのパラメータデータエリア(PDA)です。
独自の RDS インターフェイスを作成するには、次に示すパラメータデータエリアを使用できます。
DEFINE DATA PARAMETER 1 P_UDID(B8) /* OUT 1 P_UDID_EXPIRATION(I4) /* OUT 1 P_CURSOR(I4) /* INOUT 1 P_ENTRIES(I4) /* IN 1 P_REQUEST(A16/1:250) /* IN 1 P_EXTENT (A16/1:250) /* OUT 1 P_RESULT(A32) /* OUT 1 REDEFINE P_RESULT 2 SRV_NODE(A8) 2 SRV_NODE_EXT(A8) 2 SRV_NAME(A8) 2 SRV_NAME_EXT(A8) END-DEFINE
パラメータの説明については、次の表を参照してください。
パラメータ | フォーマット/長さ | 説明 |
---|---|---|
P_UDID
|
B8 | 一意のディレクトリ ID です。ディレクトリ情報の変更後に増加します。 クライアントは、この ID をキャッシュ内に保存します。 このバイナリ番号が 1 つのクライアント要求から次へと増える場合、リモートディレクトリ情報と対応しなくなるため、クライアントはそのローカルキャッシュ情報を削除します。 |
P_UDID_EXPIRATION
|
I4 | これは、有効時間を秒単位で定義します。つまり、UDID 設定の確認のために RDS に接続することなく、ローカルキャッシュ情報をクライアントが使用できる秒数です。 全クライアントに対してディレクトリ修正がアクティブにされることを保証できた後の時間制限の定義を可能にします。 この時間を不用意に低い値に設定すると、多数の
RDS へのネットワークトラフィックを引き起こすことになります。
|
P_CURSOR |
I4 | リモートプロシージャコールには、以前のサーバーへの接続が設定できない場合に別のサーバーをスキャンするためのオプションがあります(プロファイルパラメータ TRYALT を参照)。
このパラメータは上部からの検索用にゼロを含み、スキャンを継続するためにレコード位置を記憶するよう、RDS により修正されることがあります。 値はクライアントにより評価されません。スキャンを継続するためにキャッシュからのみ挿入されます。 |
P_ENTRIES
|
I4 | このパラメータは、P_REQUEST 内のサービス定義の数を含みます。
|
P_REQUEST
|
A16/1:250 | スキャン可能なサーバーアドレスに対するサービスのリストです。 エントリは次のように構成されます。
プログラム名(A8) |
P_EXTENT |
A16/1:250 | 予約済み(将来的に使用される予定)です。 |
SRV_NODE |
A8 | サーバーノードを含みます。 |
SRV_NODE_EXT |
A8 | サーバーノード拡張を含みます。 |
SRV_NAME |
A8 | サーバー名を含みます。 |
SRV_NAME_EXT |
A8 | サーバー名拡張を含みます。 |
リモートディレクトリサービスルーチンは、Natural サブプログラムのコードエリアです(このコードエリアのデフォルトバージョンは SYSRPC
ライブラリ内のプログラム RDSSCDIR
です)。
独自の RDS ルーチンを作成するには
次に示す中間コードを修正します。
Set UDID and UDID_EXPIRATION values IF P_ENTRIES = 0 ESCAPE ROUTINE IF P_CURSOR != 0 position to next server entry after P_CURSOR Scan for server which may execute P_REQUEST(*) IF found SRV_NODE = found node name SRV_NODE_EXT = node extension SRV_NAME = found server name SRV_NAME_EXT = server extension P_CURSOR = position of found server ELSE P_CURSOR = 0
このプログラムは、SYSRPC
ライブラリ内にあります。 ワークファイル(固定ブロック、レコード長 80 バイト)からディレクトリ情報を読み込みます。
独自のプログラムは、どこ(例:データベース)からでもディレクトリ情報を読み込むことができます。
* comment UDID definition UDID_EXPIRATION definition node definition ... node definition
(UDID) binary number
(UDID_EXPIRATION) number of seconds
(NODE) namevalue (logon-option) server definition ... server definition
(SERVER) namevalue (logon-option) library definition ... library definition
(LIBRARY) namevalue program definition ... program definition
(PROGRAM) namevalue ... namevalue
Max. 8 characters in uppercase
namevalue
の後の logon-option
は、次の定義行と同様にオプションです。 logon-option
の有効な値については、『SYSRPC ユーティリティ』ドキュメントの「サービスディレクトリメンテナンス」を参照してください。
(UDID) ACB8AAB4777CA000 (UDID_EXPIRATION) 3600 * this is a comment (NODE) NODE1 (SERVER) SERVER1 (LIBRARY) SYSTEM (PROGRAM) TESTS1 TESTS2 TESTS3 (SERVER) SERVER2 (logon-option) (LIBRARY) SYSTEM (PROGRAM) TESTS4 (NODE) NODE2 (logon-option) (SERVER) SERVER1 (LIBRARY) SYSTEM (PROGRAM) TESTS1 TESTS2 TESTS3 TESTS4
上記例では、ディレクトリは以下を含みます。
ノード NODE1
上で実行している SERVER1
および SERVER2
の 2 つのサーバー。
サーバー SERVER1
は、SYSTEM
ライブラリのプログラム TESTS1
、TESTS2
、および TESTS3
を実行します。
サーバー SERVER2
は、SYSTEM
ライブラリのプログラム TESTS4
を実行します。
ノード NODE2 上の SERVER1
サーバーは、SYSTEM
ライブラリのプログラム TESTS1
から TESTS4
を実行します。
上記例内の行のインデントは必須ではありません。 すべての行は、任意の位置(1)で開始できます。 このファイルは手動で修正することができます。