例外


CORBA には次の 2 種類の例外があります。OMG で完全に規定された標準システム例外と、アプリケーションプログラマが定義するユーザー例外の 2 つです。CORBA の例外は Java の例外オブジェクトとは多少異なりますが、その違いの大部分は IDL から Java へのマッピング時に解決されます。

ここでは、以下の項目について説明します。

CORBA の例外と Java の例外の違い

IDL で例外を指定するときは、キーワード raises を使用します。これは、Java で throws を指定するのと同様です。IDL でこの例外キーワードを使用する場合は、ユーザー定義例外を作成することになります。標準システム例外では、このような指定をする必要はなく、また、このような指定をすることはできません。

システム例外

CORBA では、一連の標準システム例外が定義されています。標準システム例外は、次のようなシステム関連のエラー状態の発生を知らるため、一般に ORB ライブラリによって生成されます。

システム例外は、呼び出されたすべての IDL オペレーションに対してスローされる可能性があります。インタフェースの設計者は、インタフェース内のオペレーションでシステム例外をスローできるような仕様にする必要はありません。この処理は自動で行われます。

オペレーションの実装がどれほど単純であったとしても、別のプロセス (多くが別のマシン上のプロセス) であるクライアントからオペレーション呼び出しが行われることにより、あらゆるエラーが発生する可能性があるため、この仕様は妥当であるといえます。

したがって、CORBA クライアントでは、CORBA のシステム例外を常にキャッチするようにすべきです。また、CORBA のシステム例外は java.lang.RuntimeException の下位クラスになるため、キャッチすべきシステム例外の通知を Java コンパイラに任せることはできません。

システム例外の構造

CORBA のシステム例外は、すべて次のような同じ構造をしています。

exception <SystemExceptionName> { // descriptive of error
    unsigned long minor;          // more detail about error
    CompletionStatus completed;   // yes, no, maybe
}
 

システム例外は、java.lang.RuntimeException から org.omg.CORBA.SystemException までのクラスのサブタイプです。

java.lang.Exception
 |
 +--java.lang.RuntimeException
     |
     +--org.omg.CORBA.SystemException
         |
         +--BAD_PARAM
         |
         +--//etc. 
 

マイナーコード

CORBA のすべてのシステム例外には、例外発生の原因となったエラーに関する付加的情報を提供するマイナーコードフィールドが設けられています。マイナーコードの意味は OMG では規定されておらず、各 ORB ベンダーが、その実装ごとに適切なマイナーコードを規定することになっています。Java  ORB によって規定されているマイナーコードの意味については、「マイナーコードの意味」を参照してください。

完了状態

CORBA のすべてのシステム例外には、例外をスローしたオペレーションの状態を表す完了状態フィールドがあります。完了状態コードには、次の 3 つがあります。

COMPLETED_YES
オブジェクトの実装は、例外が起こる前に処理を完了した
COMPLETED_NO
オブジェクトの実装は、例外が起こる前に呼び出されなかった
COMPLETED_MAYBE
呼び出しの状態が不明

ユーザー例外

CORBA のユーザー例外は、java.lang.Exception から org.omg.CORBA.UserException までのクラスのサブタイプです。

java.lang.Exception
 |
 +--org.omg.CORBA.UserException
      |
      +-- Stocks.BadSymbol
      |
      +--//etc. 

各ユーザー定義例外は、生成された Java 例外クラスの IDL の結果の中で規定します。ユーザー定義例外は、すべてプログラマが定義し、実装します。

マイナーコードの意味

すべてのシステム例外には、CORBA ベンダーが例外発生の原因に関する付加的情報を提供できるように、minor というフィールドが設けられています。OMG の標準マイナーコード例外 (OMGVMCID) のリストについては、OMG のドキュメント (http://www.omg.org/docs/omg/03-01-04.txt) を参照してください。

よく遭遇する Sun のマイナーコード例外には、次のようなものがあります。

上記の説明では不十分な場合、または上記以外の Sun マイナーコードに遭遇した場合には、http://forum.java.sun.com の開発者フォーラムにメッセージを投稿してください。

マイナーコードの意味について情報を求める場合には、次の情報をお知らください。


ホーム


Copyright ©1996-2004 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn.View, CA.94043-1100 USA., All rights reserved.