| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 第4章 アプリケーションの開発(C言語) |
クライアントアプリケーションは、サーバアプリケーションの処理が正常終了したか異常終了したかを知ることができます。異常終了した場合には、システムの異常か、サーバアプリケーションの異常かを知ることができ、前者をシステム例外、後者をユーザ例外と呼びます。
メソッド呼出し時に指定したCORBA_Environment構造体にエラー情報が格納されます。CORBA_Environment構造体を以下に示します。
typedef struct {
CORBA_enum _major;
CORBA_unsigned_long _minor;
・
・
} CORBA_Environment;
アプリケーションは、メソッドを呼び出す前にCORBA_Environment構造体の領域を初期化する必要があります。
CORBA_Environment env; memset( &env, 0, sizeof(CORBA_Environment));
_majorには以下の値が設定されます。
CORBA_NO_EXCEPTION : 正常終了 CORBA_SYSTEM_EXCEPTION : システム例外 CORBA_USER_EXCEPTION : ユーザ例外
次に示すようなシステム例外の値が設定されます。システム例外で通知されるデータ型は文字列であり、文字列をCORBA_exception_id()でCORBA_Environment構造体から取り出します。以下にシステム例外を示します。例外の意味については、“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”を参照してください。
|
例外情報 |
例外コード |
|
BAD_CONTEXT |
ex_CORBA_StExcep_BAD_CONTEXT |
|
BAD_INV_ORDER |
ex_CORBA_StExcep_BAD_INV_ORDER |
|
BAD_OPERATION |
ex_CORBA_StExcep_BAD_OPERATION |
|
BAD_PARAM |
ex_CORBA_StExcep_BAD_PARAM |
|
BAD_QOS |
ex_CORBA_StExcep_BAD_QOS |
|
BAD_TYPECODE |
ex_CORBA_StExcep_BAD_TYPECODE |
|
CODESET_INCOMPATIBLE |
ex_CORBA_StExcep_CODESET_INCOMPATIBLE |
|
COMM_FAILURE |
ex_CORBA_StExcep_COMM_FAILURE |
|
CONTEXT |
ex_CORBA_StExcep_CONTEXT |
|
DATA_CONVERSION |
ex_CORBA_StExcep_DATA_CONVERSION |
|
FREE_MEM |
ex_CORBA_StExcep_FREE_MEM |
|
IMP_LIMIT |
ex_CORBA_StExcep_IMP_LIMIT |
|
INITIALIZE |
ex_CORBA_StExcep_INITIALIZE |
|
INTERNAL |
ex_CORBA_StExcep_INTERNAL |
|
INTF_REPOS |
ex_CORBA_StExcep_INTF_REPOS |
|
INV_FLAG |
ex_CORBA_StExcep_INV_FLAG |
|
INV_IDENT |
ex_CORBA_StExcep_INV_IDENT |
|
INV_OBJREF |
ex_CORBA_StExcep_INV_OBJREF |
|
INV_POLICY |
ex_CORBA_StExcep_INV_POLICY |
|
MARSHAL |
ex_CORBA_StExcep_MARSHAL |
|
NO_IMPLEMENT |
ex_CORBA_StExcep_NO_IMPLEMENT |
|
NO_MEMORY |
ex_CORBA_StExcep_NO_MEMORY |
|
NO_PERMISSION |
ex_CORBA_StExcep_NO_PERMISSION |
|
NO_RESOURCES |
ex_CORBA_StExcep_NO_RESOURCES |
|
NO_RESPONSE |
ex_CORBA_StExcep_NO_RESPONSE |
|
OBJ_ADAPTER |
ex_CORBA_StExcep_OBJ_ADAPTER |
|
PERSIST_STORE |
ex_CORBA_StExcep_PERSIST_STORE |
|
REBIND |
ex_CORBA_StExcep_REBIND |
|
TIMEOUT |
ex_CORBA_StExcep_TIMEOUT |
|
TRANSIENT |
ex_CORBA_StExcep_TRANSIENT |
|
UNKNOWN |
ex_CORBA_StExcep_UNKNOWN |
|
INVALID_TRANSACTION |
ex_CORBA_StExcep_INVALID_TRANSACTION |
|
TRANSACTION_MODE |
ex_CORBA_StExcep_TRANSACTION_MODE |
|
TRANSACTION_REQUIRED |
ex_CORBA_StExcep_TRANSACTION_REQUIRED |
|
TRANSACTION_ROLLEDBACK |
ex_CORBA_StExcep_TRANSACTION_ROLLEDBACK |
|
TRANSACTION_UNAVAILABLE |
ex_CORBA_StExcep_TRANSACTION_UNAVAILABLE |
システム例外発生時には、CORBA_Environment構造体の_minorにマイナーコードが設定されます。マイナーコードの値については、“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”を参照してください。
ユーザ例外でも文字列でエラー情報が通知されるため、CORBA_exception_id()でCORBA_Environment構造体から取り出します。また、IDLで定義したユーザ定義情報の詳細については、CORBA_exception_value()でCORBA_Environment構造体から取り出します。
例外情報を獲得する例を以下に示します。
/* メソッドの呼出し */
ret = ODdemo_calculator_calculate(obj, a, b, &env);
switch(env._major){
case CORBA_SYSTEM_EXCEPTION:
/* システム例外のエラー処理 */
id = CORBA_exception_id(&env);
if ( strcmp (id, ex_CORBA_StExcep_COMM_FAILURE) == 0 ) {
/* マイナーコードの獲得 */
fprintf( stderr, "SystemException:COMM_FAILURE (minor = %x)\n", env._minor);
・
・
}
・
・
case CORBA_USER_EXCEPTION:
/* ユーザ例外のエラー処理 */
id = CORBA_exception_id(&env);
if ( strcmp (id, ex_exp_exc) == 0 ) {
uexc = (exp_exc *)CORBA_exception_value(&env);
・
・
}
・
・
目次
索引
![]()
|