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

制限および制約事項

このドキュメントでは、Natural リモートプロシージャコール(RPC)機能を使用するときに注意する必要がある制限および制約事項について説明します。

RPC でサブプログラムを実行する場合、ローカル実行とは次のような異なる点があります。


ユーザーコンテキストの転送

ユーザー ID を除いて、次の例のように、ユーザーコンテキストはサーバーセッションへは転送されません。

Top of page

システム変数の転送

*USER 以外のシステム変数は、クライアントからサーバー側へ転送できません。

Top of page

エラー状況でのパラメータ処理

エラー状況でのパラメータ処理は異なります。

Top of page

サブプログラム内の可変配列

サブプログラムのパラメータデータエリアに可変オカレンス数(1:V 表記)が含まれている場合、このサブプログラムを呼び出すためにスタブを使用できません。 スタブは固定オカレンス数の配列定義だけをサポートするので、コールからコールへオカレンス数を変更することはできません。

スタブサブプログラムを使用する必要がある場合、例えば、同じプログラムで EntireX RPC サーバーを呼び出す場合には、Natural クライアント側で X-array を使用する必要があります。 X-array を使用すると、スタブサブプログラムを使用するときでも、コールからコールへオカレンス数を変更できます。 この場合、クライアント側の X-array は、サーバー側の(固定の)可変配列に渡されます。 サーバープログラムはコールごとに変化するオカレンス数を受け取る可能性がありますが、オカレンス数を変更できないため、可変配列は固定されます。

Top of page

X-array

X-array は、リモート CALLNAT ステートメント実行のパラメータリストでサポートされています。 サーバーは、オカレンス数を増減する場合があります。

制限

Top of page

グループおよびスタブサブプログラム

グループ配列または X-group 配列がリモート CALLNAT ステートメント実行のパラメータリスト内にあり、スタブサブプログラムが使用される場合、次の制限があります。

制限

Top of page

RPC サーバー側のグループ配列

RPC サーバー側のサブプログラムの DEFINE DATA PARAMETER エリア内のグループ配列のストレージレイアウトは、構文に関して必ずしも同一ではありません。 グループ配列内のフィールドを再定義したり、グループ配列を 3GL プログラムに渡したりしないでください。 これらの処理が必要な場合は、グループ配列を DEFINE DATA LOCAL エリア内の同じレイアウトのグループ配列にコピーし、このローカルグループ配列を 3GL プログラムへのコールで使用します。

Top of page

EntireX RPC サーバー

リモート CALLNAT ステートメント実行によって EntireX RPC サーバーを呼び出す場合、スタブサブプログラムを使用することを強くお勧めします。 EntireX RPC サーバーで呼び出すサブプログラムの IDL(Interface Definition Language)定義にグループ構造が含まれている場合、スタブサブプログラムが必要です。 この場合、[Stub Generation]画面でスタブ生成中に同じグループ構造を定義するか、EntireX IDL ファイルからスタブサブプログラムを生成する必要があります(Windows のみ)。

Top of page

VSAM の使用

サブタスキング環境で VSAM データセットにアクセスしたり、VSAM データセットをリージョン間で共有したりする場合、必要となる共有オプションを考慮する必要があります。 例えば、1 つのアドレススペースで VSAM データセットにレコードが挿入され、別のアドレススペースで同じ VSAM データセットが読み取られる場合、SHAREOPTIONS 2 の代わりにリージョン間 SHAREOPTIONS 4 を設定して、バッファ無効化を強制する必要がある場合があります。 そうしないと、新しく挿入されたレコードが検出されない場合があります。

レコードレベル共有(RLS)の使用も考慮する必要があります。

詳細については、関連する IBM の VSAM ドキュメントを参照してください。

Top of page

Natural ステートメントの動作

いくつかの Natural ステートメントは、次の例のように、Natural RPC のコンテキストで使用したときに異なる動作をすることがあります。

ステートメント 説明
OPEN CONVERSATION
CLOSE CONVERSATION
サーバー上で実行した場合は、これらのステートメントはクライアントセッションには影響しません。 サーバー自身が(エージェントとしての)他のサーバーに対するクライアントとして動作するときは、これらのステートメントは 2 番目のサーバー上の会話にのみ影響します。
PASSW パスワード設定はサーバー側でのみアクティブなままとなり、他ユーザーによる後続の実行に対してもアクティブなままとなります。
SET CONTROL
SET GLOBALS
SET KEY
SET TIME
SET WINDOW
呼び出し元に設定は返されません。
STACK すべてのスタックデータは、実行後に解放されます。
STOP
TERMINATE
これらのステートメントは、クライアントセッションを停止しません。 Natural RPC サーバーを終了する方法については、「Natural RPC サーバーの終了」を参照してください。

Top of page

サーバーに対する Natural ステートメントの注意事項

現在の Natural バージョンでは、RPC との次のステートメントの組み合わせは理論的には可能ですが、予期しない結果を引き起こすためお勧めしません。

ステートメント 説明
TERMINATE 会話が開いている状態に関係なく、サーバーを終了します。
FETCH
RUN
STOP
これらのステートメントを使用すると、CALLNAT コンテキストの消失を引き起こします。

FETCHRUN、または STOP ステートメント上では、サーバーは自身の CALLNAT コンテキストが消失したことを検出し、クライアントへ Natural エラーメッセージを返します。ただし、その時点で、そのステートメントはすでにサーバーにより実行されています。

例外:FETCH RETURN には適用されません。

INPUT Natural スタックからではなくファイルから読み取る場合、入力データ値は予測できません。

Top of page