クライアントアプリケーションは、サーバアプリケーションの処理が正常終了したか異常終了したかを知ることができます。また、異常終了した場合には、システムで異常終了したかサーバアプリケーションで異常終了したかを知ることができます。前者をシステム例外、後者をユーザ例外と呼びます。システム例外を以下に示します。例外の意味については、“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”を参照してください。
例外情報 | 例外コード |
|---|---|
BADC_ONTEXT | CORBA-BAD_CONTEXT |
BAD_INV_ORDER | CORBA-BAD_INV_ORDER |
BAD_OPERATION | CORBA-BAD_OPERATION |
BAD_PARAM | CORBA-BAD_PARAM |
BAD_QOS | CORBA-BAD_QOS |
BAD_TYPECODE | CORBA-BAD_TYPECODE |
CODESET_INCOMPATIBLE | CORBA-CODESET_INCOMPATIBLE |
COMM_FAILURE | CORBA-COMM_FAILURE |
DATA_CONVERSION | CORBA-DATA_CONVERSION |
FREE_MEM | CORBA-FREE_MEM |
IMP_LIMIT | CORBA-IMP_LIMIT |
INITIALIZE | CORBA-INITIALIZE |
INTERNAL | CORBA-INTERNAL |
INTF_REPOS | CORBA-INTF_REPOS |
INV_FLAG | CORBA-INV_FLAG |
INV_IDENT | CORBA-INV_IDENT |
INV_OBJREF | CORBA-INV_OBJREF |
INV_POLICY | CORBA-INV_POLICY |
MARSHAL | CORBA-MARSHAL |
NO_IMPLEMENT | CORBA-NO_IMPLEMENT |
NO_MEMORY | CORBA-NO_MEMORY |
NO_PERMISSION | CORBA-NO_PERMISSION |
NO_RESOURCES | CORBA-NO_RESOURCES |
NO_RESPONSE | CORBA-NO_RESPONSE |
OBJ_ADAPTER | CORBA-OBJ_ADAPTER |
PERSIST_STORE | CORBA-PERSIST_STORE |
REBIND | CORBA-REBIND |
TIMEOUT | CORBA-TIMEOUT |
TRANSIENT | CORBA-TRANSIENT |
UNKNOWN | CORBA-UNKNOWN |
INVALID_TRANSACTION | CORBA-INVALID_TRANSACTION |
TRANSACTION_MODE | CORBA-TRANSACTION_MODE |
TRANSACTION_REQUIRED | CORBA-TRANSACTION_REQUIRED |
TRANSACTION_ROLLEDBACK | CORBA-TRANSACTION_ROLLEDBACK |
TRANSACTION_UNAVAILABLE | CORBA-TRANSACTION_UNAVAILABLE |
USE文にCORBA-EXCEPTIONクラス等の例外クラスを定義することで例外情報を取り出します。取り出したオブジェクトはCORBA-EXCEPTION-ID-GET-VALUEで文字に変換することができます。
また、システム例外発生時には、CORBA-SYSTEMEXCEPTION-MINORを使用してマイナーコードを獲得することができます。マイナーコードの値については、“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”を参照してください。
静的起動インタフェース例外情報を獲得する例を以下に示します。
WORKING-STORAGE SECTION.
01 API-NAME PIC X(50)
01 EXCEPTION-ID USAGE OBJECT REFERENCE CORBA-STRING.
01 EXCEPTION-ID-VALUE PIC X(50).
01 OUT-MINOR TYPE CORBA-UNSIGNED-LONG.
DECLARATIVES.
*
ZEROPARAM-ERR SECTION.
USE EXCEPTION ODDEMO-CALCULATOR-ZEROPARAM.
DISPLAY "ZEROPARAM Exception: " API-NAME.
EXIT PROGRAM.
END-ZEROPARAM-ERR.
*
OTHER-ERROR SECTION.
USE EXCEPTION CORBA-EXCEPTION.
DISPLAY "CORBA::UserException: " API-NAME.
SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
DISPLAY " Exception-id: " EXCEPTION-ID-VALUE.
EXIT PROGRAM.
END-OTHER-ERR.
* マイナーコード取得処理
MINOR-ERROR SECTION.
USE EXCEPTION CORBA-SYSTEMEXCEPTION.
MOVE MINOR OF EXCEPTION-OBJECT AS CORBA-SYSTEMEXCEPTION TO OUT-MINOR.
DISPLAY " Exception-minor: " OUT-MINOR.
END-MINOR-ERROR.
END DECLARATIVES.動的起動インタフェース例外情報を獲得する例を以下に示します。
* リクエストの送信
INVOKE REQ "INVOKE".
* 例外処理
SET TMP-ENV TO ENV OF REQ.
IF NOT TMP-ENV = NULL
SET EXCEP TO IDL-EXCEPTION OF TMP-ENV
INVOKE EXCEP AS CORBA-UNKNOWNUSEREXCEPTION "EXCEPTION" RETURNING ANY-EXC
SET EXC-STR TO IDL-ID OF EXCEP
INVOKE EXC-STR "GET-VALUE" RETURNING EXCEP-ID
DISPLAY "EXCEPTION ID : " EXCEP-ID
EXIT PROGRAM
END-IF.