BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   TxRPC を使用した BEA Tuxedo アプリケーションのプログラミング   |   先頭へ   |   前へ   |   次へ   |   目次

 


返されるステータスと例外の処理

X/OPEN RPC 仕様では、アプリケーション以外のエラーは状態パラメータまたは状態復帰で返されます。RPC サーバに障害があった場合には fault_status 値が返され、通信に障害があった場合には comm_status 値が返されます。状態復帰を指定するには、IDL ファイルでオペレーションの戻り値または error_status_t 型の [out] パラメータを定義します。さらにACF ファイルで、そのオペレーションまたはパラメータが [fault_status] または [comm_status] のいずれか、あるいは両方の属性を持つことを宣言します。

たとえば、IDL ファイル内で次のようにオペレーションを定義します。

error_status_t op([in,out]long *parm1, [out]error_status_t *commstat);

対応する ACF ファイル内での定義は次のようになります。

[fault_status]op([comm_status]commstat);

サーバからのエラーは、オペレーションの戻り値に、通信エラーは 2 番目のパラメータに返されます。クライアント・コードでは、以下のようにエラーを処理します。

if (op(&parm1, &commstat) != 0 || commstat != 0) /* エラーの処理 */

状態復帰を使用する利点は、エラー発生個所で対処が行え、きめ細かなエラー回復処理を実行できることです。

状態復帰の欠点は、ローカル版の関数には必要のないパラメータをリモート関数に付加することです。さらに、きめ細かなエラー回復処理は冗長になりがちで、エラーを引き起こす傾向があります (たとえば、場合分けに見落としが生じるなど)。

DCE は第 2 のメカニズムとして例外処理を定義しています。この例外処理は C++ のものと類似しています。

C や C++ のアプリケーション・コードを TRYCATCHCATCH_ALL、および ENDTRY ステートメントを用いて、例外が生じる可能性のあるブロックに区切ります。TRY はブロックの開始を示します。CATCH は、特定の例外用の処理ブロックを示します。CATCH_ALL は、対応する CATCH ステートメントを持たない例外を処理するために使われます。ENDTRY でブロックを終了します。例外処理が低いレベルでは行なえず、RERAISE ステートメントを用いて高いレベルのブロックで例外処理を行う場合、TRY ブロックはネストされます。例外処理ブロックの外部で例外が生じた場合は、プログラムはログにメッセージを記録して終了します。例外処理マクロの詳細と使用例については、『BEA Tuxedo C 言語リファレンス』の TRY(3c) を参照してください。

RPC コールに対して通信とサーバで生成される例外のほかに、さらに低いレベルの例外、特に、オペレーティング・システムのシグナルも生成されます。このような例外の詳細については、『BEA Tuxedo C 言語リファレンス』の TRY(3c) を参照してください。

 

先頭へ戻る 前のトピックへ 次のトピックへ