COBOL2002 Javaプログラム呼び出し機能ガイド
ここでは,サービスルーチンで検知するJava例外とサービスルーチンで検知しないJava例外について説明します。
次のサービスルーチンでは,Javaプログラムから例外がスローされたことで,サービスルーチンの呼び出しが失敗で終了することがあります。
Javaプログラムから例外がスローされた場合,CBLJENV集団項目のCBLJEXCEPTION項目にスローされた例外オブジェクトを設定し,RETURN-CODE特殊レジスタに1を返します。
RETURN-CODE特殊レジスタが0でない場合は,CBLJEXCEPTION項目の例外オブジェクトを使って例外処理をしてください。
インスタンスメソッドを呼び出す例について説明します。
COMPUTE ARGPTR(1) = FUNCTION ADDR( ARG-STRING ). COMPUTE ARGPTR(2) = ZERO. CALL 'CBLJINVOKE' USING CBLJENV OBJREF SampleMethod ARG-LIST RTN-INT. IF RETURN-CODE NOT = 0 *> CBLJEXCEPTIONを使った例外処理をここに記述する。 CALL 'CBLJFINALIZE' USING CBLJENV *> ※1 MOVE nnnn TO ABN-CODE CALL 'CBLABN' USING ABN-CODE *> ※2 END-IF. |
CBLJEXCEPTIONを使った例外処理では,CBLJEXCEPTION項目を使って例外オブジェクトの種別判定や例外オブジェクトのメソッド呼び出しまたはフィールドアクセスを実行します。
この例では※1,※2の呼び出しによってCOBOLプログラムを終了していますが,続行できる例外ならば続行させてもかまいません。
なお,例外処理中にメソッドを呼び出す場合は,CBLJCOPYサービスルーチンを使って,CBLJEXCEPTION項目の例外オブジェクトのオブジェクト参照を退避してください。メソッド呼び出しのサービスルーチンは,CBLJEXCEPTION項目を更新します。
01 EXP-OBJ USAGE POINTER. 01 EXP-CLS USAGE POINTER VALUE NULL. 01 EXP-TOSTRING PIC X DYNAMIC C-STRING VALUE 'toString'. 01 EXP-STRING. 02 EXP-STR-TYPE PIC X(256) VALUE 'Ljava/lang/String;'. 02 EXP-STR-AREA USAGE POINTER. *> 例外オブジェクトのメソッドtoString()を呼び出して *> 情報を取得する CALL 'CBLJCOPY' USING CBLJENV CBLJEXCEPTION EXP-OBJ EXP-CLS. CALL 'CBLJINVOKE' USING CBLJENV EXP-OBJ EXP-TOSTRING NO-ARG EXP-STRING. |
CBLJEXCEPTION項目を使って発生した例外オブジェクトの種別を判定する例を次に示します。
01 MyException PIC X DYNAMIC C-STRING VALUE 'MyException'. 01 MY-EXCEPTION USAGE POINTER. CALL 'CBLJGETCLASS' USING CBLJENV MyException MY-EXCEPTION CALL 'CBLJINSTANCEOF' USING CBLJENV CBLJEXCEPTION MY-EXCEPTION IF RETURN-CODE NOT = 0 *> MyException例外の処理をここに記述する。 END-IF |
01 EXCEPTNAME-LEN PIC 9(9) USAGE COMP VALUE 256. 01 EXCEPTNAME PIC X(256). CALL 'CBLJCLASSNAME' USING CBLJENV CBLJEXCEPTION EXCEPTNAME EXCEPTNAME-LEN EVALUATE EXCEPTNAME WHEN '例外クラス名1' *> 例外クラス名1の処理をここに記述する。 WHEN '例外クラス名2' *> 例外クラス名2の処理をここに記述する。 WHEN '例外クラス名3' *> 例外クラス名3の処理をここに記述する。 WHEN OTHER *> その他の例外の処理をここに記述する。 END-EVALUATE |
サービスルーチンで検知しないJava例外の場合,Javaプログラムで例外が発生したとき,COBOLプログラムのスレッドまたはプロセスが終了します。
この場合の対処については,「5. プログラムのデバッグとトラブルシュート」を参照してください。
All Rights Reserved. Copyright (C) 2014, 2016, Hitachi, Ltd.