2.1.12 リカーシブコールを使うときの注意
実行中のサーバUAPから,自分と同じサービスグループ名とサービス名を指定してサービスを要求できます。これをリカーシブコール(再帰呼び出し)といいます。リカーシブコールの場合でも,その同じサービスを実行するために新しいプロセスが必要になります。そのため,リカーシブコールを使う場合,サービスを要求する指定をした時点で,実行できるプロセスがなくなる場合があります。このとき,RPCのタイムアウトになるか,待ち時間を指定していないときは永久に待ちになります。リカーシブコールを使うときは,余裕あるプロセス数を指定してください。なお,リカーシブコールを使えるのはキュー受信型サーバです。ソケット受信型サーバはリカーシブコールを使えません。
グローバルトランザクションの構成要素である一つのトランザクションブランチの中でも,リカーシブコールはできます。ただし,クライアントUAPと同じサービスグループに属していても,要求されたサービスは別プロセスで別のトランザクションブランチとして実行されます。
- 〈この項の構成〉
(1) リカーシブコールとシステム定義との関連
ユーザサービス定義のbalance_countオペランドに設定した値によっては,リカーシブコールをしてもプロセスが増えないで,タイムアウトになる場合があります。次の場合には,必ずbalance_countオペランドの値に0を指定してください。
-
非常駐プロセスだけで構成されるユーザサーバでリカーシブコールをする場合(例えば,parallel_count=0,2の場合)。
-
一つの常駐プロセスと,ほかの非常駐プロセスで構成されるサーバでリカーシブコールをする場合(例えば,parallel_count=1,2の場合)。
ユーザサービス定義の最大プロセス数に1を指定した(parallel_count=1)のサービスグループに属するサービスでは,リカーシブコールは使えません。