Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ

付録J 旧互換機能> J.1 COM/CORBA連携プログラミング

J.1.8 例外

 例外を扱う場合は、変数をオブジェクト型で宣言し、この変数をオペレーションの実行時のパラメタの最後に追加します。例外が発生した場合、この変数に例外情報を保持した例外オブジェクトのリファレンスが設定されます。このオブジェクトの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での使用例を以下に示します。

IDL言語

  exception foo {          // ユーザ例外の定義
     long dummy; 
  } ; 
  interface example9 {
     // long型のパラメタを持つope関数、復帰値なし
     void ope(in long arg) raises(foo); 
  } ; 

Visual Basic

  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

目次 索引 前ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005