CBLDCRPC('POLLANYR')
- 〈このページの構成〉
形式
PROCEDURE DIVISIONの指定
CALL 'CBLDCRPC' USING 一意名1
DATA DIVISIONの指定
01 一意名1. 02 データ名A PIC X(8) VALUE 'POLLANYR'. 02 データ名B PIC X(5). 02 FILLER PIC X(3). 02 データ名C PIC S9(9) COMP VALUE ZERO. 02 データ名D PIC S9(9) COMP. 02 データ名E PIC S9(9) COMP. 02 データ名F PIC S9(9) COMP.
機能
非同期応答型RPCでサービス要求した結果を非同期に受信します。
受信する非同期応答を特定する場合は,データ名Cに1,または17を設定します。この値を設定した場合は,データ名Eに設定した記述子をリターンした,非同期応答型RPCの応答を受信します。
受信する非同期応答を特定しない場合は,データ名Cに0,または16を設定します。このとき,データ名Eに設定した値は無視されます。データ名Cに0,または16を設定した CBLDCRPC('POLLANYR')が正常に終了すると,受信した非同期応答の記述子と同じ値がリターンされます。
CBLDCRPC('POLLANYR')は,次のどちらかの場合にリターンします。
-
非同期応答型RPCの応答を受信した場合
-
データ名Fに設定した応答待ち時間切れになった場合
CBLDCRPC('POLLANYR')が正常に終了すると,非同期応答型RPCを使ったCBLDCRPC('CALL ')の応答を格納する領域に,値が設定されます。
ステータスコードの一覧のあとに,次の説明を掲載しています。CBLDCRPC('POLLANYR')の詳しい説明を知りたいときに参照してください。
(1)CBLDCRPC('POLLANYR')のデータ名Fについて
(2)CBLDCRPC('POLLANYR')がエラーになるタイミング
(3)ステータスコード「00378」をリターンさせる指定
(4)ステータスコードと同期点処理の関係
(5)CBLDCRPC('POLLANYR')で応答が受け取れない場合
(6)CBLDCRPC('POLLANYR')を使うときの注意
UAPで値を設定するデータ領域
●データ名A
処理結果を非同期に受信することを示す要求コードを「VALUE 'POLLANYR'」と設定します。
●データ名C
次のどれかを設定します。
0…待ち時間の単位は秒で指定し,CBLDCRPC('POLLANYR')で受信する非同期の応答を特定しません。
1…待ち時間の単位は秒で指定し,データ名Eに設定された記述子をリターンした,非同期応答型RPCの応答を受信します。
16…待ち時間の単位はミリ秒で指定し,CBLDCRPC('POLLANYR')で受信する非同期の応答を特定しません。
17…待ち時間の単位はミリ秒で指定し,データ名Eに設定された記述子をリターンした,非同期応答型RPCの応答を受信します。
●データ名E
非同期応答型RPCのCBLDCRPC('CALL ')(データ名Cに2を設定)が正常に終了したときに返された,記述子を設定します。データ名Cに0,または16を設定した場合は,ここに設定した値は無視されます。
●データ名F
CBLDCRPC('POLLANYR')を呼び出してから,応答が返ってくるまでの待ち時間を秒単位で設定します。設定できる値は-1からS9(9)COMPで表せる最大の数までです。
CBLDCRPC('POLLANYR')で非同期応答を受信する場合は,UAPに設定した応答待ち時間を参照しません。
0を設定した場合は,データ名Cが0,または1を設定したとき,応答が返っていないと「00307」ですぐにエラーリターンします。データ名Cに16,または17を設定したとき,50ミリ秒として処理します。
-1を設定した場合は,応答が返るまで待ち続けます。
●データ名D
0を設定します。
OpenTP1から値が返されるデータ領域
●データ名B
ステータスコードが,5けたの数字で返されます。
●データ名D
受信した非同期応答の記述子が返されます。この記述子は,データ名Cに0,または16を設定したCBLDCRPC('POLLANYR')が正常に終了した場合に返されます。データ名Cに1,または17を設定したCBLDCRPC('POLLANYR')が正常に終了した場合には,0が設定されます。
ステータスコード
ステータスコード |
意味 |
---|---|
00000 |
正常に終了しました。 |
00321 |
非同期応答型RPCで要求したサービスの処理結果は,すべて受信しました。 |
00322 |
データ名Eに設定した記述子は存在しません。このステータスコードは,データ名Cに1を設定した場合に返されます。 |
00301 |
データ名に設定した値が間違っています。 要求コード(データ名A)が間違っている場合も含みます。 |
00302 |
CBLDCRPC('OPEN ')を呼び出していません。 |
00304 |
メモリが不足しました。 |
00306 |
ネットワークに障害が起こりました。 |
00307 |
CBLDCRPC('CALL ')の処理が時間切れ(タイムアウト)になりました。 |
サービスを要求されたSPPが,処理を完了する前に異常終了しました。 |
|
00308 |
CBLDCRPC('CALL ')のデータ名Gに設定した入力パラメタ長が,最大値を超えています。 |
00309 |
返ってきた応答が,クライアントUAPで用意した領域に入り切りません。 |
00310 |
CBLDCRPC('CALL ')のデータ名Fに設定したサービスグループは,定義されていません。 |
00311 |
CBLDCRPC('CALL ')のデータ名Eに設定したサービス名は,定義されていません。 |
00312 |
CBLDCRPC('CALL ')のデータ名Eに設定したサービス名があるサービスグループは,閉塞しています。 |
00313 |
CBLDCRPC('CALL ')のデータ名Eに設定したサービスは,終了処理中です。 |
00314 |
CBLDCRPC('CALL ')のデータ名Eに設定したサービスのUAPプロセスが,稼働していません。 |
データ名Fに-1を設定した場合に,サービスを要求されたSPPが,処理を完了する前に異常終了しました。 |
|
00315 |
CBLDCRPC('CALL ')のデータ名Eに設定したサービスがあるノードのOpenTP1が稼働していません。異常終了,停止中,終了処理中,および通信障害が起こったことが考えられます。 |
00316 |
CBLDCRPC('CALL ')に設定したサービスで,システムエラーが起こりました。 |
00317 |
CBLDCRPC('CALL ')に設定したサービスで,メモリが不足しました。 |
00318 |
システムエラーが起こりました。 |
00319 |
サービス関数がOpenTP1に返した応答の長さが,1からDCRPC_MAX_MESSAGE_SIZE※で定義されている値の範囲にありません。 |
00320 |
サービスを要求されたノードにあるOpenTP1は,開始処理中です。 |
00323 |
メモリが不足しました。このステータスコードが返った場合は,トランザクションブランチをコミットできません。 |
00324 |
システムエラーが起こりました。このステータスコードが返った場合は,トランザクションブランチをコミットできません。 |
00325 |
設定したサービスで,システムエラーが起こりました。このステータスコードが返った場合は,トランザクションブランチをコミットできません。 |
00326 |
返ってきた応答が,クライアントUAPで用意した領域に入り切りません。このステータスコードが返った場合は,トランザクションブランチをコミットできません。 |
00327 |
ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境で,複数のSPPのトランザクション属性が一致していません。このステータスコードは,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を使っているSPPにサービスを要求した場合にだけリターンされます。 |
00328 |
ドメイン修飾をしたサービスグループ名の,ドメイン名が間違っています。 |
00329 |
ドメイン修飾をしてサービスを要求しましたが,ドメイン代表スケジュールサービスのポート番号が見つかりません。 |
00356 |
サービスを要求されたソケット受信型サーバが,サービス要求を受け取れません。 |
00366 |
オンラインテスタを使っている環境で,テストモードのUAPからテストモードでないSPPへサービスを要求しています。または,テストモードでないUAPからテストモードのSPPへサービスを要求しています。 |
00370 |
サービスを要求されたSPPは,セキュリティ機能で保護されています。CBLDCRPC('CALL ')でサービスを要求したUAPには,SPPへのアクセス権限がありません。 |
00372 |
同時に起動できるトランザクションブランチの数を超えたため,トランザクションブランチを開始できません。 |
一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため,トランザクションブランチを開始できません。 |
|
00378 |
サービスを要求されたSPPが,処理を完了する前に異常終了しました。このステータスコードは,ユーザサービス定義のrpc_extend_functionオペランドに"00000001"を指定したクライアントUAPの場合にだけリターンされます。rpc_extend_functionオペランドに"00000000"を指定,またはオペランドを省略した場合は,「00378」はリターンされないで,「00307」または「00314」がリターンされます。 |
(1)CBLDCRPC('POLLANYR')のデータ名Cについて
非同期受信の監視時間は,応答が返るたびにリセットされます。そのため,受信する非同期応答を特定する(データ名Cに1,または17を設定)場合は,データ名Fに設定した時間を過ぎても,応答を受信できる場合があります。また,データ名Fに設定した時間を過ぎても,「00307」でエラーリターンしない場合もあります。
(2)CBLDCRPC('POLLANYR')がエラーになるタイミング
サービスを要求されたSPPが異常終了した場合,クライアントUAPでエラーが返るタイミングについて説明します。
サービスを実行するSPPが,処理が終わる前に異常終了すると,CBLDCRPC('POLLANYR')は「00307」でエラーリターンします。CBLDCRPC('POLLANYR')のデータ名Fに-1を設定している場合は,「00314」でエラーリターンします。
CBLDCRPC('POLLANYR')の時間監視でエラーになる場合
次に示す場合には,CBLDCRPC('POLLANYR')のデータ名Fに設定した時間が経過したあとで,「00307」でエラーリターンします。
-
SPPがあるノードのOpenTP1全体が異常終了した場合
-
サービス要求のデータがサーバUAPに届く前,またはサーバUAPの処理が完了してからクライアントUAPに結果が届く前に障害が起こった場合
(3)ステータスコード「00378」をリターンさせる指定
サービスを要求されたSPPが,処理を完了する前に異常終了したことを「00307」または「00314」以外のステータスコードで判別したい場合には,ユーザサービス定義のrpc_extend_functionオペランドに"00000001"を指定します。この指定をすると,上記のエラー時に「00378」がリターンされるようになります。rpc_extend_functionオペランドに"00000000"を指定,またはオペランドを省略した場合は,「00378」はリターンされないで,「00307」または「00314」がリターンされます。
(4)ステータスコードと同期点処理の関係
CBLDCRPC('POLLANYR')のステータスコードと同期点処理(コミット,ロールバック)の関係について説明します。ここで説明する内容は,サービス要求がトランザクション処理になる場合に該当します。トランザクションでないサービス要求(CBLDCRPC('CALL ')のデータ名Cに「32」を加算した場合も含む)には該当しません。
CBLDCRPC('POLLANYR')がエラーリターンしてもコミットとなる場合
サービスを要求されたサービスプログラムの異常終了や,ノードの障害,ネットワーク障害の場合でも,「00307」がリターンすることがあります。クライアントUAPがトランザクション処理でない場合は,「00307」が返っても,要求したサービスがあるSPPは正常終了していて,データベースへの更新などが実行されているときもあります。
ロールバック処理が必要なステータスコード
トランザクション処理から呼び出したCBLDCRPC('POLLANYR')がエラーリターンした場合,ステータスコードによっては,必ずトランザクションがロールバック(サーバUAPがrollback_only状態)になります。この場合,コミット,またはロールバックのどちらを実行しても,必ずロールバックになります。必ずロールバックになるCBLDCRPC('POLLANYR')のステータスコードを次に示します。
「00309」
「00311」
「00317」
「00319」
(5)CBLDCRPC('POLLANYR')で応答が受け取れない場合
非同期応答型RPCでサービスを要求したUAPが次に示すCOBOL-UAP作成用プログラムを呼び出すと,CBLDCRPC('POLLANYR')で応答を受け取れません。
-
CBLDCRPC('DISCARDF')で,非同期応答の受信を拒否した場合
-
トランザクションの処理の場合,同期点処理のCOBOL-UAP作成用プログラムでコミットまたはロールバックした場合
上記のCOBOL-UAP作成用プログラムを使ったあとで返ってきた応答は,破棄されます。非同期応答型RPCでは,上記のCOBOL-UAP作成用プログラムを呼び出す前に,必要な非同期の応答をCBLDCRPC('POLLANYR')ですべて受け取ってください。
(6)CBLDCRPC('POLLANYR')を使うときの注意
-
CBLDCRPC('POLLANYR')を待ち時間0を設定(データ名Fに0を設定)して呼び出すと,マルチスレッド環境のスケジューリングの関係で,応答が到着していても受信できない場合があります。そのため,待ち時間0ですべての応答を受信する CBLDCRPC('POLLANYR')を呼び出すUAPは,無限ループになってしまうことがありますので,注意してください。
-
記述子を特定しない CBLDCRPC('POLLANYR')がエラーリターンした場合,エラーになった応答の記述子を特定できません。CBLDCRPC('POLLANYR')がエラーリターンしたときの該当する記述子がわかるようにしておきたい場合は,データ名Cに1,または17を設定しておいてください。