バージョン 4.2.5
 —  Natural リモートプロシージャコール(RPC)  —

会話型 RPC の使用

このセクションでは、次のトピックについて説明します。


会話を開く

Start of instruction set会話を開くには、次の手順に従います。

  1. クライアント側で OPEN CONVERSATION ステートメントを指定します。

  2. OPEN CONVERSATION ステートメント内で、この会話のメンバとしてサービス(サブプログラム)のリストを指定します。

OPEN CONVERSATION ステートメントは、システム変数 *CONVID に一意の会話識別子を割り当てます。

複数の会話を並行して開くこともできます。 サブプログラムが相互にインターフェイスとなる場合は、アプリケーションプログラムは CALLNAT 指示により評価される適切な *CONVID の設定でさまざまな会話の管理を行います。

会話は任意のプログラムレベルで開くことができ、この会話内の CALLNAT は他の任意の上位または下位プログラムレベルで実行できます。

サーバーがエージェントの役割を果たすよう、サーバー上で実行されたリモート CALLNAT でクライアント会話を開くことができます。 クライアントはサーバーの会話ではなく独自の会話のみを制御するため、アプリケーションプログラマは、メインクライアントが閉じられる前にサーバー上の会話を正常に閉じることを保証する必要があります。

追加制限

会話型 RPC をローカルにテストすることが可能です。 会話型 CALLNAT をリモートまたはローカルに実行する場合に同一の動作を保持するには、次の追加制限を適用します。

Top of page

会話を閉じる

Start of instruction set会話を閉じるには、次の手順に従います。

これにより、クライアントは特定の会話またはすべての会話を閉じることができます。 閉じられた会話の全コンテキスト変数は、その後解放され、サーバータスクは別のクライアントのために再度有効になります。

Natural を終了すると、全会話は自動的に閉じます。

サーバーが CLOSE CONVERSATION 要求を受け取ると、CLOSE CONVERSATION ALL ステートメントが発行され、エージェントとして開かれていたサーバーを含む全会話も閉じられます。

暗黙の BACKOUT TRANSACTION(Rollback)で会話を閉じる

デフォルトで、CLOSE CONVERSATION ステートメントが実行されとき、Rollback オプションは CLOSE CONVERSATION ステートメントでサーバーに送られます。 これにより、会話処理の終わりにサーバー側で暗黙の BACKOUT TRANSACTION が生じます。

暗黙の END TRANSACTION(Commit)で会話を閉じる

サーバー側で暗黙の END TRANSACTION を起こすように ライブラリ SYSEXT で有効なインターフェイス USR2032N を使用できます。

次の CLOSE CONVERSATION ステートメントが実行される前に、出口を呼び出す必要があります。 結果として、CLOSE CONVERSATION ステートメントとともに Commit オプションがサーバーに送られ、会話処理の終わりにサーバーで END TRANSACTION ステートメントが実行されます。

Commit オプションは、クライアントアプリケーションにより実行される次の CLOSE CONVERSATION ステートメントに適用されます。 会話(複数可)が閉じた後に、デフォルトオプションは再度使用されます。 これは、次の CLOSE CONVERSATION ステートメントが再び BACKOUT TRANSACTION ステートメントを結果として生じることを意味しています。

Top of page

会話コンテキストの定義

会話中、この会話のメンバであるサブプログラムは、このサーバー上でコンテキストエリアを共有することができます。

このことを行うには、関係している各サブプログラム内に DEFINE DATA CONTEXT ステートメントでデータエリアを宣言します。

会話がローカルまたはリモートであった場合は、コンテキストエリアを使用するサブプログラムは同じ方法で動作します。 DEFINE DATA CONTEXT ステートメントは、DEFINE DATA INDEPENDENT ステートメントにほぼ一致します。 AIV 変数の定義に適用されるすべてのルールは、接頭文字としてプラス記号(+)の使用が必要でないことを除き、コンテキスト変数にも適用されます 。

(通常は AIV で)このアプリケーションに対する全定義を含むプログラムの実行により変数の作成を必要とするため、コンパイラはフォーマット/長さ定義のチェックを行いません。 RPC サービスルーチンを含むライブラリは通常アプリケーション依存ではないため、これはコンテキスト変数に対して何も意味を持ちません。

AIV と対比して、呼び出し元のコンテキスト変数は CALLNAT 境界を渡って送信されません。 コンテキスト変数は名前で参照され、コンテキスト ID で適用します。 1 コンテキスト変数は、1 会話内の同じ変数名を参照する全サービスルーチンにより共有されます。 つまり、各会話は独自のコンテキスト変数の集合を持ちます。 コンテキスト変数は、同じ変数名であっても異なる会話間では共有できません。

OPEN CONVERSATION ステートメントまたは非会話型 CALLNAT ステートメントが実行されたときに、コンテキストエリアは初期値にリセットされます。

Top of page

システム変数 *CONVID の修正

システム変数 *CONVID(フォーマット I4)は OPEN CONVERSATION ステートメントにより設定され、アプリケーションプログラムにより修正できます。

*CONVID の修正は、複数会話を並行して使用している場合にのみ必要です。

Top of page