ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)

G.2.3 クライアントアプリケーションの例外処理

  クライアントアプリケーションは、サーバアプリケーションの処理が正常終了したか異常終了したかを知ることができます。また、異常終了した場合には、システムで異常終了したかサーバアプリケーションで異常終了したかを知ることができます。前者をシステム例外、後者をユーザ例外と呼びます。システム例外を以下に示します。例外の意味については、“メッセージ集”の“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サービスから通知される例外情報/マイナーコード”を参照してください。


G.2.3.1 静的起動インタフェース例外

  静的起動インタフェース例外情報を獲得する例を以下に示します。

  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.

G.2.3.2 動的起動インタフェース例外

  動的起動インタフェース例外情報を獲得する例を以下に示します。

* リクエストの送信
    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.