例外

CORBAには次の2種類の例外があります。OMGで完全に規定された標準システム例外と、アプリケーション・プログラマが定義するユーザー例外です。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, 2020, Oracle and/or its affiliates. All rights reserved.