Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option プログラム作成の手引


2.1.7 通信先を指定したリモートプロシジャコール

ee_rpc_call関数またはee_rpc_cmtsend関数を使ってサービスを要求する場合,要求するサービスがどこにあるかは,OpenTP1のネームサービスで管理しているので,クライアントUAPで意識する必要はありません。しかし,サービス要求先ノードはネームサービスまたは定義によって管理するため,サービス要求先となるノードが複数存在した場合,サービス要求先となるノードを限定できません。

これに対し,ee_rpc_call_to関数またはee_rpc_cmtsend_to関数を使えば,特定のサービス要求先にサービスを要求できます。

サービス要求先を特定するには,ee_rpc_call_to関数またはee_rpc_cmtsend_to関数の引数に,ノード識別子,ホスト名,ホスト名とポート番号のどれかを指定します。

ノード識別子を指定して,サービス要求先を特定したee_rpc_call_to関数を使った通信の例を次の図に示します。

図2‒15 ee_rpc_call_to関数を使った通信の例

[図データ]

〈この項の構成〉

(1) サービス要求先の特定方法

サービス要求先を特定するには,ee_rpc_call_to関数またはee_rpc_cmtsend_to関数の引数に次のどれかを指定します。

(a) ホスト名

/etc/hostsファイル,またはDNSなどでIPアドレスとマッピングできるホスト名を指定して,サービス要求先ノードを特定します。指定したホストにサービスグループまたはサービスが存在しない場合,RPC要求はエラーとなります。

ネームサーバを指定したRPCの場合
  • ポート番号には,サービス要求元(ee_rpc_call_to関数を呼び出した側)のname_portオペランドに指定した値が使用されます。サービス要求先のTP1/Server Baseのシステム共通定義のname_portオペランドに指定した値と,サービス要求元のname_portオペランドに指定した値が同じであることが前提です。

  • サービス要求先のホストは指定したネームサーバのホストだけであり,対象のネームサーバが管理するほかのホストは,サービス要求先になりません。

  • RPC関連定義のrpc_destination_modeオペランドの指定値に関係なく,ネーム検索によって送信先を決定します。

  • ノード識別子を指定した場合,ノード識別子の指定は無効とします。

スケジュールサービスのポート(scd_port),またはTP1/EEシステムの受信用ポートを指定したRPCの場合
  • ポート番号には,サービス要求元(ee_rpc_call_to関数を呼び出した側)のサービスグループ情報関連定義のmysvgdef定義コマンドで指定したTP1/EEシステムの受信用ポート番号が使用されます。サービス要求先のポート番号と,サービス要求元のサービスグループ情報関連定義のmysvgdef定義コマンドで指定したTP1/EEシステムの受信用ポート番号が同じであることが前提です。

  • キュー受信型のRPCで送信します。ソケット受信型のTP1/Server Baseのユーザサーバに対してこの機能によるRPC要求はできません。指定したホストに対するRPC要求がエラーとなった場合,RPC関連定義のrpc_retryオペランドの指定値を無視し,RPC要求のリトライは行いません。

  • ノード識別子を指定した場合,エラーリターンします。

(b) ノード識別子

TP1/Server Baseのシステム共通定義のnode_idオペランドに指定されているノード識別子を指定して,サービス要求先ノードを特定します。

指定したノード識別子に対応するサービス要求先のOpenTP1ノードのホスト名がグローバルドメイン内にあることが前提です。

該当のRPC要求では,RPC関連定義のrpc_destination_modeオペランドの指定値に関係なく,ネーム検索によって送信先を決定します。サービスグループ情報関連定義のeesvgdef定義コマンドに指定した送信先は対象外とします。また,ホスト名とポート番号を指定した場合,ノード識別子の指定は無効とします。

サービス要求先がTP1/EEの場合も,ノード識別子にはサービス要求先のTP1/Server Baseのノード識別子を指定します。

注※

ここでのグローバルドメインとは,次のノード名の集合を指します。

システム共通定義のname_domain_file_useオペランドにNを指定している場合

システム共通定義のall_nodeオペランド,all_node_exオペランドで指定したノード名の集合です。

システム共通定義のname_domain_file_useオペランドにYを指定している場合

ドメイン定義ファイルに指定したノード名の集合です。なお,ドメイン定義ファイルの格納場所は次のとおりです。

  • all_nodeのドメイン定義ファイル

    $DCCONFPATH/dcnamndディレクトリ下

  • all_node_exのドメイン定義ファイル

    $DCCONFPATH/dcnamndexディレクトリ下

(c) ホスト名とポート番号

/etc/hostsファイル,またはDNSなどでIPアドレスとマッピングできるホスト名,およびポート番号を指定することでサービス要求先ノードを特定します。

ネームサーバを指定したRPCの場合
  • ポート番号には,サービス要求先のTP1/Server Baseのシステム共通定義のname_portオペランドに指定したネームサービスのポート番号を指定します。

  • サービス要求先のホストは指定したネームサーバのホストだけであり,対象のネームサーバが管理するほかのホストは,サービス要求先になりません。

  • RPC関連定義のrpc_destination_modeオペランドの指定値に関係なく,ネーム検索によって送信先を決定します。

  • ノード識別子を指定した場合,ノード識別子の指定は無効とします。

スケジュールサービスのポート(scd_port),またはTP1/EEシステムの受信用ポートを指定したRPCの場合
  • ポート番号には,サービス要求先がTP1/Server Baseの場合は,サービス要求先のOpenTP1システムのスケジュールサービス定義のscd_portオペランドで指定したポート番号を指定します。サービス要求先がTP1/EEの場合は,サービス要求先のサービスグループ情報関連定義のmysvgdef定義コマンドで指定したTP1/EEシステムの受信用ポート番号を指定します。

  • キュー受信型のRPCで送信します。ソケット受信型のTP1/Server Baseのユーザサーバに対してこの機能によるRPC要求はできません。指定したホストに対するRPC要求がエラーとなった場合,RPC関連定義のrpc_retryオペランドの指定値を無視し,RPC要求のリトライは行いません。

  • ノード識別子を指定した場合,エラーリターンします。

(2) 送信先の決定とリトライ処理

ネームサーバ,またはノード識別子を指定したRPCでは,ネームサービスから送信先を取得して送信します。送信失敗時はリトライ処理を行います。ただし,送信先はノード識別子の一致するノードまたはネームサーバのノードであり,1ノードに限定されます。このため,リトライ中にネーム情報に変化がない場合は,同一のノードに対して再送します。

スケジュールサービスのポート(scd_port),またはTP1/EEシステムの受信用ポートを指定したRPCでは,関数の引数に指定された送信先に対して送信します。送信失敗時はリトライ処理を行いません。

(3) 関数の指定値の関係

ee_rpc_call_to関数またはee_rpc_cmtsend_to関数の指定値の関係を次の表に示します。

表2‒2 ee_rpc_call_to関数またはee_rpc_cmtsend_to関数の指定値の関係

項番

関数の指定値

指定の推奨

処理内容

ホスト名

ノード識別子

ポート番号

サービス要求先

1

EENOFLAGS

ee_rpc_call関数またはee_rpc_cmtsend関数と同じです。

2

EERPC_NAMPORT

×

関数がエラーリターンします。

3

EERPC_SCDPORT

×

4

EENOFLAGS

×

5

EERPC_NAMPORT

×

6

EERPC_SCDPORT

×

7

EENOFLAGS

ネームサーバを指定したRPCになります。

サービス要求先のポート番号には,サービス要求元のシステム共通定義のname_portオペランドの指定値を仮定します。

8

EERPC_NAMPORT

×

関数がエラーリターンします。

9

EERPC_SCDPORT

スケジュールサービスのポート,またはTP1/EEシステムの受信用ポートを指定したRPCになります。

サービス要求先のポート番号には,サービス要求元の自サービスグループ情報関連定義のmysvgdef定義コマンドで指定した受信ポート番号を仮定します。

10

EENOFLAGS

×

関数がエラーリターンします。

11

EERPC_NAMPORT

ネームサーバを指定したRPCになります。

12

EERPC_SCDPORT

スケジュールサービスのポート,またはTP1/EEシステムの受信用ポートを指定したRPCになります。

13

EENOFLAGS

ノード識別子を指定したRPCになります。

14

EERPC_NAMPORT

×

関数がエラーリターンします。

15

EERPC_SCDPORT

×

16

EENOFLAGS

×

17

EERPC_NAMPORT

×

関数がエラーリターンします。

ポート番号の指定は無視します(項番14と同じ)。

18

EERPC_SCDPORT

×

関数がエラーリターンします。

19

EENOFLAGS

ネームサーバを指定したRPCになります。

ノード識別子の指定は無視します(項番7と同じ)。

20

EERPC_NAMPORT

×

関数がエラーリターンします。

21

EERPC_SCDPORT

スケジュールサービスのポート,またはTP1/EEシステムの受信用ポートを指定したRPCになります。

ノード識別子の指定は無視します(項番9と同じ)。

22

EENOFLAGS

×

関数がエラーリターンします。

23

EERPC_NAMPORT

ネームサーバを指定したRPCになります。

ノード識別子の指定は無視します(項番11と同じ)。

24

EERPC_SCDPORT

スケジュールサービスのポート,またはTP1/EEシステムの受信用ポートを指定したRPCになります。

ノード識別子の指定は無視します(項番12と同じ)。

(凡例)

○:ノード識別子,ホスト名,またはポート番号値を指定します。

−:ノード識別子,ホスト名,またはポート番号値を指定しません。

◎:指定を推奨します。

△:指定できますが,一部の指定値を無視した動作,または通信先を指定しない動作となるため,指定を推奨しません。

×:指定できません。

注※

サービス要求先の指定値「EERPC_NAMPORT」,「EERPC_SCDPORT」,および「EENOFLAGS」は,C言語の値です。COBOL言語では,「VALUE 'N'」,「VALUE 'S'」,および「VALUE 'D'」を指定します。詳細については,各関数の説明を参照してください。