クライアントアプリケーションは、サーバアプリケーションの処理が正常終了したか、異常終了したかを知ることができます。また、異常終了した場合は、システムで異常終了したか、サーバアプリケーションで異常終了したかを知ることができます。前者をシステム例外、後者をユーザ例外と呼びます。
メソッド呼出し時に指定したCORBA-ENVIRONMENT構造体にエラー情報が格納されます。CORBA-ENVIRONMENT構造体は、COBOL登録集ENVIRONMENT.cblを参照してください。
MAJORには、以下の値が設定されます。
CORBA-NO-EXCEPTION:正常終了
CORBA-SYSTEM-EXCEPTION:システム例外
CORBA-USER-EXCEPTION:ユーザ例外
次に示すようなシステム例外の値が設定されます。システム例外で通知されるデータ型は文字列であり、文字列をCORBA-EXCEPTION-ID関数でCORBA-ENVIRONMENT構造体から取り出します。
システム例外を以下に示します。例外の意味については、“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”を参照してください。例外の文字列は、COBOL登録集(EX-で始まる原文)を参照してください。
例外情報 | 例外コード |
---|---|
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-INCOM(注) |
COMM_FAILURE | EX-CORBA-STEXCEP-COMM-FAILURE |
DATA_CONVERSION | EX-CORBA-STEXCEP-DATA-CONVERSI(注) |
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-TRANS(注) |
TRANSACTION_MODE | EX-CORBA-STEXCEP-TRANSACTION-M(注) |
TRANSACTION_REQUIRED | EX-CORBA-STEXCEP-TRANSACTION-R(注) |
TRANSACTION_ROLLEDBACK | EX-CORBA-STEXCEP-TRANSACTION-R(注) |
TRANSACTION_UNAVAILABLE | EX-CORBA-STEXCEP-TRANSACTION-U(注) |
注)COBOLの30文字制限のため、短縮名となります。
システム例外発生時は、CORBA-ENVIRONMENT構造体のMINORにマイナーコードが設定されます。マイナーコードの値については、“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”を参照してください。
マイナーコードを表示する場合は、CORBA-ENVIRONMENT構造体のMINORを作業領域に転送してから表示させてください。
ユーザ例外でも文字列でエラー情報が通知されるため、CORBA-EXCEPTION-ID関数でCORBA-ENVIRONMENT構造体から取り出します。また、IDLで定義したユーザ定義情報の詳細については、CORBA-EXCEPTION-VALUEでCORBA-ENVIRONMENT構造体から取り出します。
(3)例外情報の獲得
例外情報を獲得する例を以下に示します。
WORKING-STORAGE SECTION. 01 WK-ENV PIC 9(10) COMP-5. LINKAGE SECTION. 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. * メソッドの呼び出し MOVE 100 TO PARAM-1. MOVE 20 TO PARAM-2. CALL "ODDEMO-CALCULATE-CALCULATE" USING OBJ PARAM-1 PARAM-2 ENV RESULT. EVALUATE TRUE WHEN CORBA-NO-EXCEPTION OF MAJOR OF ENV CONTINUE * システム例外のエラー処理 WHEN CORBA-SYSTEM-EXCEPTION OF MAJOR OF ENV MOVE FUNCTION LENG (ID) TO STRING-LENGTH CALL "CORBA-STRING-GET" USING IDL-ID OF ENV STRING-LENGTH ID * マイナーコード取得処理 MOVE MINOR OF ENV TO WK-ENV DISPLAY "MINOR OF ENV :" MINOR OF WK-ENV. ... * ユーザ例外のエラー処理 WHEN CORBA-USER-EXCEPTION OF MAJOR OF ENV MOVE FUNCTION LENG (UEXC) TO STRING-LENGTH CALL "CORBA-STRING-GET" USING IDL-ID OF ENV STRING-LENGTH UEXC END-EVALUATE.