例外を扱う場合は、変数をオブジェクト型で宣言し、この変数をオペレーションの実行時のパラメタの最後に追加します。例外が発生した場合、この変数に例外情報を保持した例外オブジェクトのリファレンスが設定されます。このオブジェクトのEX_majorメンバには以下の値が設定されます。
2 : システム例外 1 : ユーザ例外 0 : 正常終了
システム例外が発生した場合は、オブジェクトのリポジトリIDメンバにシステム例外の識別情報が文字列として設定されます。システム例外を識別するために一覧に示すシステム例外と文字列を比較します。例外コードの一覧とその意味を以下に示します。例外の意味については、“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”を参照してください。
例外情報 | 例外コード |
---|---|
BAD_CONTEXT | IDL:CORBA/StExcep/BAD_CONTEXT:1.0 |
BAD_INV_ORDER | IDL:CORBA/StExcep/BAD_INV_ORDER:1.0 |
BAD_OPERATION | IDL:CORBA/StExcep/BAD_OPERATION:1.0 |
BAD_PARAM | IDL:CORBA/StExcep/BAD_PARAM:1.0 |
BAD_QOS | IDL:CORBA/StExcep/BAD_QOS:1.0 |
BAD_TYPECODE | IDL:CORBA/StExcep/BAD_TYPECODE:1.0 |
CODESET_INCOMPATIBLE | IDL:CORBA/StExcep/CODESET_INCOMPATIBLE:1.0 |
COMM_FAILURE | IDL:CORBA/StExcep/COMM_FAILURE:1.0 |
CONTEXT | IDL:CORBA/StExcep/CONTEXT:1.0 |
DATA_CONVERSION | IDL:CORBA/StExcep/DATA_CONVERSION:1.0 |
FREE_MEM | IDL:CORBA/StExcep/FREE_MEM:1.0 |
IMP_LIMIT | IDL:CORBA/StExcep/IMP_LIMIT:1.0 |
INITIALIZE | IDL:CORBA/StExcep/INITIALIZE:1.0 |
INTERNAL | IDL:CORBA/StExcep/INTERNAL:1.0 |
INTF_REPOS | IDL:CORBA/StExcep/INTF_REPOS:1.0 |
INV_FLAG | IDL:CORBA/StExcep/INV_FLAG:1.0 |
INV_IDENT | IDL:CORBA/StExcep/INV_IDENT:1.0 |
INV_OBJREF | IDL:CORBA/StExcep/INV_OBJREF:1.0 |
INV_POLICY | IDL:CORBA/StExcep/INV_POLICY:1.0 |
MARSHAL | IDL:CORBA/StExcep/MARSHAL:1.0 |
NO_IMPLEMENT | IDL:CORBA/StExcep/NO_IMPLEMENT:1.0 |
NO_MEMORY | IDL:CORBA/StExcep/NO_MEMORY:1.0 |
NO_PERMISSION | IDL:CORBA/StExcep/NO_PERMISSION:1.0 |
NO_RESOURCES | IDL:CORBA/StExcep/NO_RESOURCES:1.0 |
NO_RESPONSE | IDL:CORBA/StExcep/NO_RESPONSE:1.0 |
OBJ_ADAPTER | IDL:CORBA/StExcep/OBJ_ADAPTER:1.0 |
PERSIST_STORE | IDL:CORBA/StExcep/PERSIST_STORE:1.0 |
REBIND | IDL:CORBA/StExcep/REBIND:1.0 |
TIMEOUT | IDL:CORBA/StExcep/TIMEOUT:1.0 |
TRANSIENT | IDL:CORBA/StExcep/TRANSIENT:1.0 |
UNKNOWN | IDL:CORBA/StExcep/UNKNOWN:1.0 |
INVALID_TRANSACTION | IDL:CORBA/StExcep/INVALID_TRANSACTION:1.0 |
TRANSACTION_MODE | IDL:CORBA/StExcep/TRANSACTION_MODE:1.0 |
TRANSACTION_REQUIRED | IDL:CORBA/StExcep/TRANSACTION_REQUIRED:1.0 |
TRANSACTION_ROLLEDBACK | IDL:CORBA/StExcep/TRANSACTION_ROLLEDBACK:1.0 |
TRANSACTION_UNAVAILABLE | IDL:CORBA/StExcep/TRANSACTION_UNAVAILABLE:1.0 |
システム例外発生時には、EX_minorメンバにマイナーコードが設定されます。マイナーコードの値については、“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”を参照してください。
ユーザ例外が発生した場合は、IDLで定義した例外情報のリポジトリIDが例外オブジェクトのリポジトリIDメンバに設定されます。リポジトリIDの形式を以下に示します。
IDL: 例外の名前:1.0
また、例外の詳細情報はIDLで定義した名前でオブジェクトのメンバ変数としてアクセスできます。例外のVisual Basicでの使用例を以下に示します。
exception foo { // ユーザ例外の定義 long dummy; } ; interface example9 { // long型のパラメタを持つope関数、復帰値なし void ope(in long arg) raises(foo); } ;
Global Const CORBA_NO_EXCEPTION = 0 // 正常終了 Global Const CORBA_USER_EXCEPTION = 1 // ユーザ例外 Global Const CORBA_SYSTEM_EXCEPTION = 2 // システム例外 Dim excp As Object // 例外情報を格納する変数 Dim dummy As long // ユーザ例外を格納する変数 obj.ope(1000, excp) // ope関数の呼び出し // システム例外の判定およびその処理 if excp.EX_major = CORBA_SYSTEM_EXCEPTION Then if excp.EX_RepositoryID = "IDL:CORBA/StExcep/UNKNOWN:1.0" Then // UNKNOWNに対応したエラー処理 else if excp.EX_RepositoryID = "IDL:CORBA/StExcep/BAD_PARAM:1.0" Then // BAD_PARAMに対応したエラー処理 // マイナーコードが設定されている場合 if excp.EX_minor = 1 Then // CORBA_Environmentの_minorメンバ // マイナーコードに対応した処理 endif ・ ・ // ユーザ例外の判定およびその処理 else if excp.EX_major = CORBA_USER_EXCEPTION Then if excp.EX_RepositoryID = "IDL:foo:1.0" Then dummy = excp.dummy // ユーザ例外に対応した処理 endif endif