例外

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 までのクラスのサブタイプです。

マイナーコード

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

完了ステータス

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

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

ユーザー例外

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

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

マイナーコードの意味

すべてのシステム例外には、CORBA ベンダーが例外発生の原因に関する付加的情報を提供できるように、minor というフィールドが設けられています。OMG の標準マイナーコード例外 (OMGVMCID) のリストについては、Object Management Group の Web サイトを参照してください。

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

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

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


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.