ORB 例外

スローできる例外は、ユーザーとシステムのカテゴリーに分けられます。

問題が ORB に関連している場合、アプリケーションが何も実行していないか、誤った結果を提供していない限り、ログ・ファイルまたは端末には、以下の語を含む例外が含まれている可能性があります。CORBAおよびrmi何回も 良好なアプリケーションで発生するすべての異常な動作は、例外により明らかになります。 この原理は、ORB の CORBA 例外にも適用されます。 Java™と同様に、CORBA はその例外をユーザー例外とシステム例外に分割します。

ユーザー例外

ユーザー例外は、IDL で定義され、org.omg.CORBA.UserException から継承されます。 これらの例外は、Java のチェック例外にマップされます。つまり、リモート・メソッドがいずれかの例外を発生させた場合は、そのメソッドを呼び出したアプリケーションが例外をキャッチする必要があります。 通常、ユーザー例外はリカバリー不能例外ではないので、アプリケーションで必ず処理される必要があります。 したがって、このようなユーザー例外のいずれかを受け取った場合、問題箇所が分かります。これは、アプリケーション開発者が、このような例外が発生することを考慮に入れていたためです。 ほとんどの場合、ORB は問題の原因ではありません。

システム例外

システム例外は、アプリケーションに透過的にスローされ、接続の中断時など、ORB が正常にリカバリーできない異常な状態を表します。 CORBA 2.6 仕様では、31 個のシステム例外と、それらの Java へのマッピングが定義されています。 これらはすべて org.omg.CORBA パッケージに含まれています。 CORBA 仕様には、これらの例外の意味が定義され、例外がスローされる状態が記述されています。

最も一般的なシステム例外は以下のとおりです。
  • BAD_OPERATION: この例外は、オブジェクト参照が既存のオブジェクトを示しているが、呼び出された操作をオブジェクトがサポートしていない場合にスローされます。
  • BAD_PARAM: この例外は、呼び出しに渡されたパラメーターが範囲外であるか、または無効であると見なされた場合にスローされます。 NULL 値または NULL ポインターが操作に渡された場合は、ORB によってこの例外が発生する可能性があります。
  • COMM_FAILURE: この例外は、要求がクライアントによって送信された後、サーバーからの応答がクライアントに返される前に、操作の進行中に通信が失われた場合に発生します。
  • DATA_CONVERSION: この例外は、ORB がマーシャル表現のデータをネイティブ表現に変換できない場合、またはネイティブ表現のデータをマーシャル表現に変換できない場合に発生します。 例えば、この例外は、ワイド文字コード・セットの変換に失敗したか、または ORB が異なる表現間で浮動小数点値を変換できない場合に発生する可能性があります。
  • MARSHAL: この例外は、ネットワークからの要求または応答が構造的に無効であることを示します。 通常、このエラーはクライアント・サイドのランタイムまたはサーバー・サイドのランタイムのバグを示します。 例えば、サーバーからの応答ではメッセージに含まれるバイト数が 1000 と示されているが、実際のメッセージは 1000 バイトより短いか長い場合、ORB によってこの例外が発生します。
  • NO_IMPLEMENT: この例外は、呼び出された操作が存在する (IDL 定義がある) にもかかわらず、その操作の実装が存在しないことを示します。
  • UNKNOWN: この例外は、実装が非 CORBA 例外 (実装のプログラミング言語に固有の例外など) をスローした場合に発生します。 また、この例外は、クライアントが認識していないシステム例外をサーバーが返した場合にも発生します。 クライアントが使用しているバージョンよりも新しいバージョンの CORBA をサーバーが使用しており、新しいシステム例外が新しいバージョンに追加された場合は、この例外が発生する可能性があります。