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

Natural RPC 環境の運用

このセクションでは、Natural RPC 環境の操作に必要なタスクを説明します。

これらのタスクのいくつかは SYSRPC ユーティリティで実行されます。 SYSRPC ユーティリティが提供する機能の手順については、Natural『SYSRPC ユーティリティ』ドキュメントを参照してください。

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


RPC サーバーアドレスの指定

各リモート CALLNAT 要求に対して、CALLNAT が実行されるサーバーが割り当てられます(servername および nodename で識別される)。 したがって、リモートにアクセスされるすべてのサブプログラムは以下で定義する必要があります。

上記のメソッドに加えて、代替サーバーを指定できます。

EntireX Broker を使用する場合、EntireX ロケーショントランスペアレンシを使用してサーバーを定義することも可能です。「EntireX ロケーショントランスペアレンシの使用」を参照してください。

以下に参考情報を示します。

ローカルディレクトリエントリの使用

クライアントのローカルサービスディレクトリのすべてのデータは、サブプログラム NATCLTGS に保存されます。 実行時、このサブプログラムは、ターゲットサーバーを検索するために使用されます。 結果として、NATCLTGS は、クライアントアプリケーションまたはアプリケーション用に定義された Natural steplib の 1 つで有効にする必要があります。

NATCLTGS が steplib に生成されなかったか、または別のマシンに存在する場合、適切な Natural ユーティリティ(SYSMAIN または Natural オブジェクトハンドラ)を使用して、NATCLTGS をアプリケーション用に定義された steplib のいずれかに移動してください。

共同使用のために NATCLTGS を使用している場合、例えば、そのサブプログラムをライブラリ SYSTEM にコピーして、すべてのクライアント環境に有効にする必要があります。または、クライアントごとに個々のコピーが使用される場合、SYSRPC ユーティリティのサービスディレクトリメンテナンス機能を使用してこのクライアントのためにメンテナンスする必要があります。

RPC サービスエントリを定義し、編集するには、『SYSRPC ユーティリティ』ドキュメントの「サービスディレクトリメンテナンス」を参照してください。

リモートディレクトリエントリの使用

リモートディレクトリには、各種 Natural クライアントに有効にできるサービスエントリが含まれています。 Natural クライアントは、リモートディレクトリサーバーからこれらのサービスエントリを検索できます。 リモートディレクトリサーバーの目的およびインストールについては、「リモートディレクトリサーバーの使用」を参照してください。

SYSRPC リモートディレクトリメンテナンス機能については、『SYSRPC ユーティリティ』ドキュメントの関連するセクションを参照してください。

Natural 起動時のデフォルトサーバーアドレスの指定

ローカルまたはリモートサービスディレクトリを使用してサーバーにアドレスする代わりに、プロファイルパラメータ RPC またはパラメータマクロ NTRPC のキーワードサブパラメータ DFS(Natural『オペレーション』ドキュメントを参照)でデフォルトサーバーを事前に設定することができます。 サブプログラムがローカルでもリモートサービスディレクトリでも検出できない場合、このサーバーアドレスが使用されます。

DFS 設定によって、セッション全体に対するデフォルトサーバー、またはそれをダイナミックに上書きするまでのデフォルトサーバーが決定されます。

DFS 設定が存在せず、与えられたリモートプロシージャコールのサーバーアドレスがサービスディレクトリに見つからない場合、Natural エラーメッセージが返されます。

別のライブラリにログオンしたり、Natural エラーが発生したりする場合でも、クライアントアプリケーション内で定義されたデフォルトサーバーアドレスは、アクティブな状態のままです。

Natural セッション内のデフォルトサーバーアドレスの指定

クライアントアプリケーション自体はランタイム時にデフォルトサーバーアドレスをダイナミックに指定できます。 この目的のために、Natural はアプリケーションプログラミングインターフェイス USR2007N を提供します。 このインターフェイスにより、リモートプログラムがサービスディレクトリ経由でアドレスできないときに使用されるデフォルトのサーバーアドレスを決定できます。

Start of instruction setUSR2007N を使用するには

  1. サブプログラム USR2007N を、ライブラリ SYSEXT からライブラリ SYSTEM または steplib ライブラリまたはサーバー環境の任意のアプリケーションにコピーします。

  2. DEFINE DATA PARAMETER ステートメントをストラクチャードモードで使用するか、または RESET ステートメントをレポーティングモードで使用して、次のパラメータを指定します。

    パラメータ フォーマット 説明
    function A1 関数。設定可能値は次のとおりです。
    P(Put) サーバーアドレス(パラメータ nodename および servername で構成、下記参照)が、サービスディレクトリに定義されていないすべての後続のリモートプロシージャコールに対するデフォルトアドレスであることを指定します。

    デフォルトサーバーアドレスを削除するには、nodename および servername に空白を指定します。

    G(Get) 機能 P で設定した現在のデフォルトサーバーアドレスを取得します。
    nodename A192

    アドレスされるサーバーノードの名前を指定/返します。

    物理ノード名の場合は最大 32 文字、論理ノード名の場合は最大 192 文字をノード名に含めることができます。 「EntireX ロケーショントランスペアレンシの使用」を参照してください。

    注意:
    互換性の理由から、servername は、オプション BY VALUE または BY VALUE RESULTDEFINE DATA ステートメントの説明の「パラメータデータ定義」を参照)で定義し、servername の A8 フィールドを渡す既存の呼び出し元をサポートするようにします。

    ライブラリ SYSEXT で提供されるサンプル USR2007P は、最大 32 文字をサポートします。

    servername A192

    アドレスされるサーバー名を指定/返します。

    物理サーバー名の場合は最大 32 文字、論理サービス名の場合は最大 192 文字をサーバー名に含めることができます。 「EntireX ロケーショントランスペアレンシの使用」を参照してください。

    注意:
    互換性の理由から、nodename は、オプション BY VALUE または BY VALUE RESULTDEFINE DATA ステートメントの説明の「パラメータデータ定義」を参照)で定義し、nodename の A8 フィールドを渡す既存の呼び出し元をサポートするようにします。

    ライブラリ SYSEXT で提供されるサンプル USR2007P は、最大 32 文字をサポートします。

    logon A1 ログオンオプションを指定/返します。「ログオンオプションの使用」を参照してください。
    protocol A1 トランスポートプロトコルを指定/返します。
    有効な値:B(=EntireX Broker)
    noservdir A1 サービスディレクトリオプションを指定/返します。プロファイルパラメータ RPC またはパラメータマクロ NTRPC のキーワードサブパラメータ DFS を参照してください。
    Y サービスディレクトリが存在していない必要があります。
    N サービスディレクトリが存在する必要があります。
  3. クライアント側の呼び出し元プログラムで、次のステートメントを指定します。

    CALLNAT 'USR2007N' function nodename servername logon protocol [noservdir]
    

注意:
ライブラリ SYSRPC の Natural サブプログラム NATCLTPS は、互換性保持のためにのみメンテナンスされます。

代替サーバーの使用

接続の失敗を回避するために、リモート CALLNAT のために代替サーバーを定義できます。 そのような代替サーバーを指定すると、Natural は次のように処理します。

Start of instruction set代替サーバーの使用を可能にするには

  1. 同じサービスに対するサービスディレクトリ内に複数のサーバーを定義します。

  2. 代替サーバーの使用を許可するために、プロファイルパラメータ RPC またはパラメータマクロ NTRPC のキーワードサブパラメータ TRYALTON に設定します。

このパラメータは、現在のセッションに対してダイナミックに設定することもできます。 パラメータメンテナンス機能(『SYSRPC ユーティリティ』ドキュメントを参照)を使用します。

EntireX ロケーショントランスペアレンシの使用

EntireX ロケーショントランスペアレンシを使用すると、何かを構成したり、クライアントやサーバーのプログラムを変更しなくても、物理的なノードおよびサーバーの名前を変更できます。 現在、物理ノードや物理サーバーの名前を使用する代わりに、論理的な名前でサーバーをアドレスすることができます。 論理名は、ディレクトリサービスを使って物理的なノードとサーバーの名前にマップされます。

ロケーショントランスペアレンシを利用するため、以前にノードとサーバー名のみが指定された場合でも、Natural RPC では論理名の受け入れが可能となりました。 論理名は、最初に使用される前に EntireX Broker に渡されます。

論理名の最大長は 192 文字です。 新規 Natural プロファイルパラメータを避けるために、論理名は既存パラメータのサーバー名の部分に指定されます。 2 種類の論理名があります。

EntireX ロケーショントランスペアレンシの詳細については、EntireX ドキュメントを参照してください。

次のコンポーネントはノードとサーバーの名前を参照します。

SYSRPC ユーティリティ』ドキュメントの「サービスディレクトリメンテナンス」機能の「ロケーショントランスペアレンシ」も参照してください。

Top of page

スタブおよび RPC 自動実行

Natural RPC 自動実行が使用される場合、「Natural RPC 自動実行の操作」に説明されているスタブは必要ありません。

ただし、スタブを生成すると、リモートに実行する CALLNAT(複数可)の制御を有利にし、エラー診断を容易にします。 不正な CALLNAT 名のためにリモートコールが失敗すると、その後に発行された Natural エラーメッセージは、問題の原因を即座に識別するために役立ちます。 スタブがないと、不正な CALLNAT に対して、トランスポート層または Natural サーバーから返される追加のエラーを受け取ることがあります。

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

以下に参考情報を示します。

スタブサブプログラムの作成

SYSRPC ユーティリティのスタブ生成機能では、クライアントの呼び出し元プログラムをサーバー上のサブプログラムへ接続するために使用する Natural スタブサブプログラムを生成することができます。 スタブは、パラメータデータエリア(PDA)およびサーバーコールロジックで構成されます。『SYSRPC ユーティリティ』ドキュメントのスタブ生成に関するセクションを参照してください。

PDA は呼び出し元プログラムの CALLNAT ステートメントで使用されるパラメータと同じものを含み、スタブ生成機能の[Stub Generation]画面で定義されている必要があります。 同一名でコンパイルした Natural サブプログラムがすでに存在する場合は、このサブプログラムにより使用される PDA が画面を事前に設定するために使用されます。 サーバーコールロジックは、PDA が定義された後にスタブ生成機能により自動的に生成されます。

実行時に、CALLNAT ステートメントを持っている Natural アプリケーションプログラムおよびスタブサブプログラムは、クライアント側に存在する必要があります。 Natural アプリケーションサブプログラムは、サーバー側に存在する必要があります。 スタブおよびサーバーサブプログラムは、同じ名前にする必要があります。

Natural RPC 自動実行の操作

Natural RPC スタブの生成は必須ではありませんが、Natural RPC の自動実行(つまり、Natural スタブを使用しない)を操作できます。 Natural RPC 自動実行を操作するには、プロファイルパラメータ RPC またはパラメータマクロ NTRPC のキーワードサブパラメータ AUTORPC を次のように設定します。

AUTORPC=ON

この場合は、RPC 使用のための準備中にクライアントスタブの生成を省略することができます。 Natural RPC 自動実行が有効(AUTORPC=ON)のとき、Natural は次のように動作します。

クライアントプログラムに対してのみスタブが存在する場合、この機能はサーバー上の CALLNAT プログラムには何も影響しません。

プロファイルパラメータ RPC またはパラメータマクロ NTRPC のキーワードサブパラメータ AUTORPCON に設定されており、Natural スタブが存在する場合は、そのスタブが使用されます。

Top of page

Natural セッション中の RPC プロファイルパラメータの修正

パラメータメンテナンス機能で、現在のセッションに対する Natural プロファイルパラメータモジュール内の RPC プロファイルパラメータのいくつかを、セッション内でダイナミックに修正できます。

注意:
これらの修正はユーザーセッションがアクティブである限り保持されます。セッションが終了すると削除されます。 スタティックな設定は Natural プロファイルパラメータを使用して行います。

Top of page

サーバーコマンドの実行

サービスディレクトリで定義されたアクティブサーバー(「RPC サーバーアドレスの指定」を参照)は、SYSRPC サーバーコマンド実行機能で制御できます(『SYSRPC ユーティリティ』ドキュメントの関連するセクションを参照)。

Top of page

サーバーライブラリへのログオン

CALLNAT が実行されるサーバーライブラリは、クライアント側の RPC のログオンオプションおよびサーバー側の 1 組のパラメータに依存します。

次の表に、適切なパラメータとそれらがライブラリ設定にどのように影響するかを示します。

  クライアント サーバー
1 2 3 4 5 6 7
*library-id サーバーエントリの
RPC
LOGON
フラグ
の設定
LOGONRQ
の設定
STACK=
で起動される
サーバー
NSC
または
ネイティブ
Natural
NSC:
ライブラリ
プロファイル内の
RPC ログオン
オプション
サーバー
*library-id
1 Lib1 × × logon lib1 影響なし N/-- Lib1
2 Lib1 × × logon lib2 影響なし N/-- Lib2
3 Lib1 × (クライアント LOGON フラグ = NOかつLOGONRQ=YES
は不可。
4 Lib1 影響なし 影響なし NSC AUTO Lib1
5 Lib1 影響なし 影響なし NSC N Lib1
6 Lib1 影響なし 影響なし ネイティブ Natural -- Lib1

表の項目の説明:

  1. CALLNAT が開始されるクライアントアプリケーションのライブラリ ID。

  2. RPC LOGON フラグの値。 ノードまたはサーバー全体に対して設定できます。

    このフラグは次のものを使用して設定できます。

    SYSRPC ユーティリティのサービスディレクトリメンテナンス機能

    プロファイルパラメータ RPC またはパラメータマクロ NTRPC のキーワードサブパラメータ DFS

    または、アプリケーションプログラミングインターフェイス USR2007N

  3. プロファイルパラメータ RPC またはパラメータマクロ NTRPC のキーワードサブパラメータ LOGONRQ は、サーバー起動時に設定できます。

  4. その起動時にサーバーが位置付けられるライブラリ ID。

  5. サーバーは Natural Security(NSC)下で実行されるかどうか(「Natural Security での Natural RPC の使用」を参照)

  6. NSC サーバーアプリケーションの NSC ライブラリプロファイル項目セッションオプション > Natural RPC 制限)のログオンオプションの設定。 NSC ログオンオプションAAUTO)に設定されると、ライブラリとユーザー ID だけが取得されます。 N(デフォルト)に設定されると、ライブラリ、ユーザー ID、およびパスワードパラメータが評価されます。

  7. 最終的に CALLNAT プログラムが実行されるサーバーのライブラリ。

Top of page

ログオンオプションの使用

ログオンオプションは、リモートサブプログラムが実行されるライブラリを定義します。 「サーバーライブラリへのログオン」も参照してください。

注意:
ログオンオプションを使用しないとき、CALLNAT は、サーバーが現在ログオンしているライブラリで実行されます。 このサーバーログオンは、Natural プロファイルパラメータ STACK=(LOGON library) で定義されます。 サーバーは、library(および library に定義されたすべての関連 steplib)で実行される CALLNAT を検索します。

クライアントアプリケーションは、このサブプログラムにログオンオプションを設定することによって、異なるライブラリのサブプログラムの実行を可能にします。 これにより、クライアントは、このログオンオプションとともにその現在のライブラリの名前をサーバーに渡します。 そして、サーバーは、このライブラリへログオンし、必要なサブプログラムを検索します。後者が見つかった場合、それを実行します。 その後、前のライブラリからログオフします。

異なるライブラリへのログオン

クライアントの現在のライブラリ以外のライブラリにサーバーがログオンする必要がある場合、リモート CALLNAT が実行される前に、クライアントはアプリケーションプログラミングインターフェイス USR4008N を呼び出す必要があります。 USR4008N によって、クライアントはサーバーがログオンするライブラリの代替名を指定します。 このライブラリの名前は、ログオンオプションが適用されるリモートサブプログラムへの後続のすべてのコールに使用されます。 ライブラリ名に空白が指定された場合は、現在のクライアントライブラリの名前が再度使用されます。

Start of instruction setUSR4008N を使用するには

  1. サブプログラム USR4008N を、ライブラリ SYSEXT からライブラリ SYSTEM または steplib ライブラリまたはサーバー環境の任意のアプリケーションにコピーします。

  2. DEFINE DATA PARAMETER ステートメントを使用して、次のパラメータを指定します。

    パラメータ I/O フォーマット 説明
    P-FUNC I A01

    ファンクションコード。設定可能値は次のとおりです。

    P(Put) リモート CALLNAT 実行のために新しいライブラリを指定します。
    G(Get) リモート CALLNAT 実行のために以前に指定されたライブラリを取得します。
    P-LIB I A8 リモート CALLNAT 実行のためのサーバー上のライブラリ。
  3. クライアント側の呼び出し元プログラムで、次のステートメントを指定します。

    CALLNAT 'USR4008N' P-FUNCP-LIB

    注意:
    Natural RPC クライアントがリモート CALLNAT を呼び出す前に、呼び出し元プログラムを実行する必要があります。

クライアント側で必要な設定

ログオンオプションを設定するには、SYSRPC サービスディレクトリメンテナンス機能(『SYSRPC ユーティリティ』ドキュメントの関連セクションを参照)、または(デフォルトサーバーを使用しているときは)プロファイルパラメータロファイルパラメータ RPC またはパラメータマクロ NTRPC のキーワードサブパラメータ DFS やアプリケーションプログラミングインターフェイス USR2007N を使用できます。

サーバー側で必要な設定

サーバー側に設定は必要ありません。

Top of page

圧縮の使用

圧縮タイプは、01、または 2 です。 COMPR=1 または 2 で生成したスタブは、データ転送率の削減を支援します。

圧縮タイプ 説明
COMPR=0 CALLNAT パラメータ値が送信され、サーバーから返信されます。つまり、圧縮は実行されません。
COMPR=1

M タイプのパラメータが送信され、サーバーから返信されます。一方、O タイプのパラメータは送信バッファ内でのみ転送されます。 A タイプのパラメータは返信バッファ内にのみ含まれます。 返信バッファにはフォーマット記述は含まれません。

これはデフォルト設定です。

COMPR=2 サーバー返信メッセージが CALLNAT パラメータのフォーマット記述を含むことを除いては、COMP=1 と同じです。 これは、EntireX Broker によるデータ変換に対して特定のオプションを使用する場合に便利です(詳細については、EntireX Broker ドキュメントの変換サービスの説明を参照してください)。

Top of page

Secure Socket Layer の使用

Natural RPC では、EntireX Broker への TCP/IP 通信のために Secure Socket Layer(SSL)がサポートされています。

TCP/IP 通信で SSL を使用する必要があることを EntireX Broker に認識させるには、次の方法の 1 つを使用する必要があります。

例:

SRVNODE='157.189.160.95:1971:SSL'

必要な SSL パラメータ文字列を設定するには、SSL を使用して EntireX Broker にアクセスする前に、アプリケーションプログラミングインターフェイス USR2035N を最初に呼び出す必要があります。

Start of instruction setUSR2035N を使用するには

  1. サブプログラム USR2035N を、ライブラリ SYSEXT からライブラリ SYSTEM または steplib ライブラリまたはサーバー環境の任意のアプリケーションにコピーします。

  2. DEFINE DATA PARAMETER ステートメントを使用して、次のパラメータを指定します。

    パラメータ I/O フォーマット 説明
    FUNCTION
    I A01 ファンクションコード。設定可能値は次のとおりです。
    P(Put) 新規 SSL パラメータ文字列を指定します。

    SSL パラメータ文字列は内部的に保存され、SSL 通信を使って EntireX Broker が初めて参照されるたびに、EntireX に渡されます。 複数の EntireX Broker 接続に対し、EntireX Broker に最初にアクセスする前に、毎回 アプリケーションプログラミングインターフェイス USR2035N を呼び出して異なる SSL パラメータ文字列を使用できます。

    例:
    FUNCTION := 'P'
    SSLPARMS := 'TRUST_STORE=FILE://DDN:CACERT&VERIFY_SERVER=N' 
    CALLNAT 'USR2035N' USING FUNCTION SSLPARMS 

    Natural RPC サーバーの場合に SSL パラメータを設定するには、サーバーを起動するときに、呼び出し元プログラムの名前を Natural スタックに置いてください。

    例:
    STACK=(LOGON server-library;set-SSL-parms)

    set-SSL-parms は、SSL パラメータ文字列を設定するためにユーザーアプリケーションプログラミングインターフェイス USR2035N を呼び出す Natural プログラムです。

    G(Get) 前に指定した SSL パラメータ文字列を取り出します。

    前に指定した SSL パラメータ文字列は、呼び出し元に返されます。

    SSL パラメータ文字列の詳細については、EntireX ドキュメントを参照してください。

    SSLPARMS
    I A128 EntireX Broker に必要な SSL パラメータ文字列
  3. クライアント側の呼び出し元プログラムで、次のステートメントを指定します。

    CALLNAT 'USR2035N' FUNCTION SSLPARMS

Top of page

RPC セッションのステータスのモニタ

次のセクションで構成されています。

RPCERR プログラムの使用

RPCERR プログラムは、コマンド行から実行するか、または Natural プログラム内から FETCH ステートメントを使用して呼び出すことができます。 RPCERR によって次の情報が表示されます。

さらに、最後の EntireX Broker コールからのノードおよびサーバー名も取得可能です。

RPC エラー表示例:RPCERROR

Natural error number: NAT6972 
Natural error text  : 
Directory error on Client, reason 3.

RPC error information: 
No additional information available. 

Server Node:                                       Library: SYSTEM 
Server Name:                                       Program: NATCLT3 
                                                   Line No: 1010         

RPCINFO サブプログラムの使用

現在の RPC セッションの状態に関する情報を取得するために、アプリケーションプログラム内で RPCINFO サブプログラムを使用できます。 これは、特定のエラークラスに対処することでより適切にエラーを制御することもできます。

RPCINFO サブプログラムは、RPCINFO を呼び出すサンプルプログラム TESTINFO とともに SYSRPC ライブラリ 内に含まれます。

例:

DEFINE DATA LOCAL USING RPCINFOL              
  LOCAL                                       
  1 PARM   (A1)                               
  1 TEXT   (A80)                              
  1 REDEFINE TEXT                             
    2 CLASS  (A4)                             
    2 REASON (A4)                             
END-DEFINE                                    
...                                           
OPEN CONVERSATION USING SUBPROGRAM 'APPLSUB1' 
  CALLNAT 'APPLSUB1' PARM                    
CLOSE CONVERSATION *CONVID                    
...                                           
ON ERROR                                      
   CALLNAT 'RPCINFO' SERVER-PARMS CLIENT-PARMS  
   ASSIGN TEXT=C-ERROR-TEXT                   
   DISPLAY CLASS REASON                       
END-ERROR                                     
...                                           
END

RPC Info のパラメータ

RPCINFO には、パラメータデータエリア RPCINFOL 内で提供されている次のパラメータがあります。

パラメータ フォーマット 説明
SERVER-PARMS   サーバーとして動作しているときに、Natural セッションに関する情報を含みます 。

RPC サーバー上でリモートに RPCINFO を実行する場合のみ SERVER-PARMS を適用します。

S-BIKE A1

使用されたトランスポートプロトコル。設定可能値は次のとおりです。

B EntireX Broker
S-NODE A8 サーバーのノード名です。
S-NAME A8 サーバー名です。
S-ERROR-TEXT A80 トランスポート層から返されたメッセージテキストを含みます。
S-CON-ID I4 現在の会話 ID です。 これは、論理 Natural ID ではなく、EntireX Broker の物理的な ID であることに注意してください。

このパラメータに含まれる値は常に、会話型および非会話型の両方のコールに対して EntireX Broker が生成する ID です。

物理会話 ID が非数値または I4 より大きい場合は、-1 が返されます。

S-CON-OPEN L オープンな会話があるかどうかを示します。

会話が継続中の場合は、このパラメータに値 TRUE が含まれます。それ以外の場合は、FALSE が含まれます。

CLIENT-PARMS   クライアントとして動作しているときに、Natural セッションに関する情報を含みます。

RPC クライアント上でリモートに RPCINFO を実行する場合のみ CLIENT-PARMS を適用します。

C-BIKE A1

使用されたトランスポートプロトコル。設定可能値は次のとおりです。

B EntireX Broker
C-NODE A8 事前にアドレスされたサーバーのノード名です。
C-NAME A8 事前にアドレスされたサーバー名です。
C-ERROR-TEXT A80 トランスポート層から返されたメッセージテキストを含みます。
C-CON-ID I4 最後のサーバーコールの会話 ID です。 これは、論理 Natural ID ではなく、EntireX Broker の物理的な ID であることに注意してください。

会話が開かれていない場合は、このパラメータの値は 0 以下になります。 物理会話 ID が非数値または I4 より大きい場合は、-1 が返されます。

C-CON-OPEN L オープンな会話があるかどうかを示します。

会話が継続中の場合は、このパラメータに値 TRUE が含まれます。それ以外の場合は、FALSE が含まれます。

サーバートレース機能の使用

Natural RPC には、サーバーアクティビティのモニタおよび可能性のあるエラー状況のトレースを有効にするトレース機能が含まれています。

サーバートレース機能の起動/停止

サーバートレース機能を起動/停止するには、以下のオプションでサーバーを開始します。

TRACE=n

整数値 n" は、必要なトレースレベルを意味します。つまり、トレースに記録されるサーバーの詳細の程度です。 可能な値は次のとおりです。

トレースレベル
0 トレースは実行されません(デフォルト)。
1 すべてのクライアント要求および対応するサーバーレスポンスがトレースされ、記録されます。
2 すべてのクライアント要求および対応するサーバーレスポンスがトレースされ、記録されます。さらに、全 RPC データがトレースファイルへ書き込まれます。

RPC トレース機能によって、Natural レポート番号 10 にトレースデータが書き込まれます。

変換エラーが Natural エラー番号 NAT6974 および理由コード 2 と 3 でレポートされた場合は、エラーが含まれている可能性があるデータのバッファにおける位置が示されます。

RPC サーバーのトレースに対する TS=ON のサポート

次の情報は、メインフレーム環境にのみ適用されます。

Natural RPC サーバーセッションで TS=ON が指定された場合、Natural RPC サーバートレース内のすべてのメッセージは大文字に変換されます。 クライアント間のデータのトレースに TS=ON の影響はなく、何も変更されることはありません。

トレースファイルの定義

トレースファイル定義は環境に依存します。

メインフレーム環境のトレースファイル処理 - 全般的な情報

メインフレームでは、環境に適したトレースファイルを定義します。『パラメータリファレンス』ドキュメントの NTPRINT マクロも参照してください。

z/OS バッチモードでのトレースファイル処理

a)単一タスクとしてのサーバーの実行

サーバー起動ジョブで、z/OS データセットを Natural 追加レポート CMPRT10 に割り当てます。

例:

//NATRPC   JOB  CLASS=K,MSGCLASS=X
//NATSTEP  EXEC PGM=NATOS
//STEPLIB  DD   DISP=SHR,DSN=SAG.NAT.LOAD
//         DD   DISP=SHR,DSN=SAG.EXX.LOAD 
//CMPRMIN  DD   * 
IM=D,MADIO=0,MT=0,OBJIN=R,AUTO=OFF,MAXCL=0,ID=',',INTENS=1,  
PRINT=((10),AM=STD)
/* 
//SYSUDUMP DD   SYSOUT=X
//CMPRT10  DD   SYSOUT=X
//CMPRINT  DD   SYSOUT=X
/*

b)レプリカでのサーバーの実行

  1. RPC パラメータ NTASKS を 1 より大きな値に設定します。

  2. CMPRMINDISP=SHR のデータセットまたは * に割り当てます。

  3. 各タスクが別々の CMPRINT データセットに書き込むため、次の DD カード名を定義します。

    CMPRINT(メインタスク用)

    CMPRINT1CMPRINT9(最初の 9 個のサブタスク用)

    CMPRIN10CMPRINnn(次の 2 桁の番号のサブタスク用)。nn=NTASKS-1

  4. プロファイルパラメータ RPC またはパラメータマクロ NTRPC のキーワードサブパラメータ TRACE が設定されると、トレース機能によってプリンタ 10 に書き込まれます。

    次の DD カード名を定義する必要があります。

    CMPRT10(メインタスク用)

    CMPRT101CMPRT1nn(すべてのサブタスク用)nn=NTASKS-1

例:

//NATRPC   JOB  CLASS=K,MSGCLASS=X                                   
//NATSTEP  EXEC PGM=NATOS,REGION=8M                                  
//steplib  DD   DISP=SHR,DSN=SAG.NAT.LOAD                            
//         DD   DISP=SHR,DSN=SAG.EXX.LOAD                            
//CMPRMIN  DD   *                                                        
IM=D,MADIO=0,MT=0,OBJIN=R,AUTO=OFF,MAXCL=0,ID=',',INTENS=1,
PRINT=((10),AM=STD)                                           
/*                                                                       
//SYSUDUMP DD   SYSOUT=X                                               
//CMPRT10  DD   SYSOUT=X                                            
//CMPRT101 DD   SYSOUT=X                                               
//CMPRT102 DD   SYSOUT=X                                               
//CMPRT103 DD   SYSOUT=X                                           
//CMPRINT  DD   SYSOUT=X                                               
//CMPRINT1 DD   SYSOUT=X                                               
//CMPRINT2 DD   SYSOUT=X                                               
//CMPRINT3 DD   SYSOUT=X                                               
/*

CICS 環境のトレースファイル処理

CICS 環境では、トレースファイルは出力ファイル 10 に書き込まれます(このファイルが存在する場合)。 出力ファイル 10 が定義されていない場合、トレースファイルはワークファイル 10 に書き込まれます(このファイルが存在する場合)。 出力ファイル 10 もワークファイル 10 も定義されていない場合は、トレースは無効です。

Natural 出力ファイルは、特別パーティション一時データキューに割り当てる必要があります。

例:

Natural 定義:

NTPRINT ((10),AM=CICS,DEST=RPCT,TYPE=TD)

CICS 定義:

RPCTRAC DFHDCT TYPE=SDSCI,                       X
               BLKSIZE=136,                      X
               BUFNO=1,                          X
               DSCNAME=RPCTRACE,                 X
               RECFORM=VARUNB,                   X
               RECSIZE=132,                      X
               TYPEFLE=OUTPUT
        SPACE
RPCT    DFHDCT TYPE=EXTRA,                       X
               DSCNAME=RPCTRACE,                 X
               DESTID=RPCT,                      X     
               OPEN=INITIAL

CICS 起動 JCL:

RPCTRACE DD    SYSOUT=*

z/VSE バッチモードでのトレースファイル処理

z/VSE バッチモードでは、トレースファイルをプリンタ番号 10 に割り当てます。

例:

// LIBDEF PHASE,SEARCH=(SAGLIB.NATvrs,SAGLIB.ETBvrs),TEMP 
// ASSGN SYS000,READER
// ASSGN SYSLST,FEE
// ASSGN SYS050,FEF
// EXEC NATVSE,SIZE=AUTO,PARM='SYSRDR'
IM=D,MADIO=0,MT=0,OBJIN=R,AUTO=OFF,MAXCL=0,ID=',',INTENS=1,
PRINT=((10),AM=STD,SYSNR=50)
/*

vrs は、バージョン、リリース、システムメンテナンスレベルを表します。

BS2000/OSD バッチモードでのトレースファイル処理

BS2000/OSD バッチモードでは、トレースファイルをプリンタ番号 10 に割り当てます。

例:

/.NATRPC      LOGON
/             SYSFILE   SYSOUT=output-file
/             SYSFILE   SYSDTA=(SYSCMD)
/             SYSFILE   SYSIPT=(SYSCMD)
/             FILE trace-file,LINK=P10,OPEN=EXTEND       */server trace file  
/             STEP
/             SETSW      ON=2
/             EXEC NATBS2
MADIO=O,IM=D,ID=',',PRINT=((10),AM=STD)

UNIX および OpenVMS 環境のトレースファイル処理

個別にトレースできるように、サーバーごとに異なるファイル名(つまり、異なる NATPARM パラメータファイル)を使用することをお勧めします。 トレースファイルは、Natural サーバーの NATPARM パラメータファイルに定義されます。

  1. レポート割り当て
    論理デバイス LPT10 をレポート番号 10 に割り当てます。

  2. デバイスパラメータ割り当て
    LPT10 に物理プリンタ指定を選択する代わりに、トレースファイルの名前を示すファイル名を指定します。

UNIX の例:

/bin/sh -c cat>>/filename

filename は、トレースファイルの名前です。

OpenVMS の例:

nattmp:filename

filename は、トレースファイルの名前です。

Windows 環境のトレースファイル制御

個別にトレースできるように、サーバーごとに異なるファイル名(つまり、異なる NATPARM パラメータファイル)を使用することをお勧めします。 トレースファイルは、Natural サーバーの NATPARM パラメータファイルに定義されます(『コンフィグレーションユーティリティ』の「デバイス/レポート割り当て」を参照)。

  1. レポート

    論理デバイス LPT10 をレポート番号 10 に割り当てます。

  2. デバイス

    LPT10 に物理プリンタ指定を選択する代わりに、トレースファイルの名前を示すファイル名を指定します。 デフォルトで、同じ名前で新しいファイルが作成されるときに、古いトレースファイルは削除されます。

    既存のファイルに新しいログを追加する場合は、次のように指定します。

    >>filename

Top of page

サーバーのランタイム設定の取得

Natural アプリケーションプログラミングインターフェイス(API)USR4010N によって、次のようなサーバーのランタイム設定を取得できます。

Start of instruction setUSR4010N を使用するには

  1. サブプログラム USR4010N を、ライブラリ SYSEXT からライブラリ SYSTEM または steplib ライブラリまたはサーバー環境の任意のアプリケーションにコピーします。

  2. DEFINE DATA PARAMETER ステートメントを使用して、次のパラメータを指定します。

    パラメータ フォーマット 説明
    FUSER-DBID N5 システムファイル FUSER のデータベース ID。
    FUSER-FNR N5 システムファイル FUSER のファイル番号。
    FNAT-DBID N5 システムファイル FNAT のデータベース ID。
    FNAT-FNR N5 システムファイル FNAT のファイル番号。
    FSEC-DBID N5 システムファイル FSEC のデータベース ID。
    FSEC-FNR N5 システムファイル FSEC のファイル番号。
    STEP-NAME A8/15 steplib の名前。
    STEP-DBID N5/15 steplib のデータベース ID。
    STEP-FNR N5/15 steplib のファイル番号。
  3. クライアント側の呼び出し元プログラムで、次のステートメントを指定します。

    CALLNAT 'USR4010' USR4010-PARM

    CALLNAT ステートメントの「構文の説明」も参照してください。

  4. RPC パラメータ AUTORPC=OFF の場合、スタブ USR4010X をクライアント環境にコピーします。

    RPC パラメータ AUTORPC=ON の場合、API はクライアント環境で使用可能にできません。使用可能にすると、API はローカルで呼び出されます。

USR4010N が呼び出されるとき、上記の指定されたパラメータの値はフィールドグループ USR4010-PARM に出力されます。

Top of page

EntireX の Setting/Getting パラメータ

アプリケーションプログラミングインターフェイス(API)USR4009N によって、Natural RPC で現在サポートされている EntireX パラメータを設定または取得できます。 次のものがあります。

Start of instruction setUSR4009N を使用するには

  1. サブプログラム USR4009N を、ライブラリ SYSEXT からライブラリ SYSTEM または steplib ライブラリまたはサーバー環境の任意のアプリケーションにコピーします。

  2. DEFINE DATA PARAMETER ステートメントを使用して、次のパラメータを指定します。

    パラメータ フォーマット I/O 説明
    FUNCTION A01 I 関数。設定可能値は次のとおりです。
    G(Get) EntireX パラメータにすでに設定されている値が返されます。

    Natural セッションの前に PUT が呼び出されていない場合、すべての値はゼロまたは空白です。

    P(Put) EntireX パラメータに対して指定した値が保存され、EntireX の後続のすべてのコールで使用されます。
    ENVIRONMENT A01 I 環境。設定可能値は次のとおりです。
    S サーバー
    C クライアント
    B 両方
    COMPRESSLEVEL A01 I/O 圧縮レベル。
    ENCRYPTION-LEVEL I01 I/O 暗号化レベル。
    ACIVERS B02 O 使用される ACI バージョン。
    RC B01 O リターンコード(ゼロではない場合)。 要求されたパラメータを設定するために必要な ACI バージョンが含まれています。
    0 機能は成功しました。
    6 暗号化レベルに ACI バージョン 6 が必要です。
    7 圧縮レベルに ACI バージョン 7 が必要です。
  3. インターフェイスは次の 2 つの方法で呼び出すことができます。

    1. プログラム内から:

      CALLNAT 'USR4009N' FUNCTION ENVIRONMENT                                        
                         COMPRESSLEVEL                                               
                         ENCRYPTION-LEVEL                                            
                         ACIVERS RC
    2. コマンドプロンプトから、または上記のパラメータの値とともにステートメント STACK を使用して:

      例:

      USR4009P P,C,ENCRYPTION-LEVEL=1                                      
      USR4009P P,C,,2                                                      
      USR4009P P,C,ENCRYPTION-LEVEL=1,COMPRESSLEVEL=6

コマンドモードで、keyword=value 表記を使用して EntireX パラメータのサブセットのみを設定できます。 参照されないパラメータの値は、変更されないままです。

注意:

Top of page

エラー処理

リモートエラー処理

サーバー上の Natural エラーは、次のようにクライアントへ返されます。

注意:
プロファイルパラメータ RPC またはパラメータマクロ NTRPC のキーワードサブパラメータ AUTORPCON に設定されており、サブプログラムがローカル環境内で検出できない場合は、Natural はこれをリモートプロシージャコールであると解釈します。 その後、サービスディレクトリ内でこのサブプログラムの検出を試行します。 そこで検出されない場合は、NAT6972 エラーが発行されます。 そのため、サブプログラムが検出できない場合に NAT0082 エラーは発行されません。

RPCERR プログラムの使用」も参照してください。

サーバープログラムからのエラーメッセージ NAT3009 の回避

サーバーアプリケーションプログラムが長時間データベースコールを発行しない場合は、次のデータベースコールが NAT3009 エラーメッセージを返します。

この問題を回避するには、次の手順に従います。

  1. SYSRPC ライブラリ内の NATRPC39 プログラム内に FIND FIRST または HISTOGRAM ステートメントを追加します。

  2. 更新したプログラムを FUSER のライブラリ SYSTEM へコピーします。

    サーバーが現在ログオンしているライブラリの STEPLIB 連結は評価されません。

ユーザー出口 NATRPC01

ユーザー出口 NATRPC01 は、Natural がエラーを発行したとき、実際には、エラーが Natural RPC ランタイムによって処理された後、およびレスポンスがクライアントに送り返される直前に呼び出されます。 これは、エラートランザクションと同じ論理ポイント、つまり、Natural エラー処理の終了時、すべての ON ERROR ブロックが処理された後に出口が呼び出されることを意味します。

エラートランザクションと違って、この出口は CALLNAT ステートメントで呼び出されます。したがって、これはサブプログラムであり、その呼び出し元に戻る必要があります。

この出口へのインターフェイスは、エラートランザクションのインターフェイスに類似しています。 さらに、出口は、Natural RPC ランタイムによってトレースされる情報を 10 行まで戻すことができます。 空白以外の文字で始まる行だけがトレースされます。

重要な注意:

  1. NATRPC01FUSER のライブラリ SYSTEM に存在させる必要があります。 サーバーが現在ログオンしているライブラリの STEPLIB 連結は評価されません

  2. DEFINE DATA PARAMETER ステートメントブロックを変更しないでください。

Top of page

サービス実行の前後のユーザー出口

管理者がサービスの実行(リモート CALLNAT)をより制御できるようにするために、オプションの 2 つのユーザー出口が Natural RPC サーバー側で呼び出されます。

ユーザー出口 目的
NATRPC02 オプションのサービス実行前出口 NATRPC02 が、サービスが実行される直前に呼び出されます。 この時点で、要求はすべてのセキュリティチェックをパスしており、データは整列解除されています。
NATRPC03 オプションのサービス実行後出口 NATRPC03 が、サービスから正常に戻された直後に呼び出されます。 この時点で、データはまだ整列されていません。 処理されないエラーが発生した場合、出口は呼び出されません。

これらの出口は相互に独立しており、別々に使用できます。

両方の出口に次のルールが適用されます。

出口は、監査やトレースのために使用できます。 NATRPC02 を追加のセキュリティチェックのために使用することもできます。

NATRPC02 の例:

DEFINE DATA PARAMETER
1 SUBPROGRAM (A8) BY VALUE
END-DEFINE
IF *USER <> 'DBA' AND SUBPROGRAM = 'PRIVATE' 
  *ERROR-NR := 999
END-IF
END

Top of page