COBOL2002 Javaプログラム呼び出し機能ガイド


6.1.2 基本操作

ここでは,Javaプログラム呼び出し機能が提供する基本操作のサービスルーチンについて説明します。

〈この項の構成〉

(1) CBLJINITIALIZE

CBLJINITIALIZEサービスルーチンは,Javaプログラム呼び出し機能を初期化します。

CBLJINITIALIZEサービスルーチンの動作を次に示します。

Javaプログラム呼び出し機能の初期化は,各スレッドでJavaプログラム呼び出し機能を使用する前に実行する必要があります。

ただし,次に示すサービスルーチンは,CBLJENV集団項目のCBLJENVCORE項目がNULLの場合に,CBLJINITIALIZEサービスルーチンを自動的に呼び出します。このため,これらのサービスルーチンをスレッドの最初に呼び出す場合は,CBLJINITIALIZEサービスルーチンを明示的に呼び出す必要はありません。

また,CBLJINITIALIZEサービスルーチンは,CBLJENV集団項目のCBLJENVCORE項目がNULLでない場合は何もしないで終了するため,何度呼び出してもかまいません。

CBLJINITIALIZEサービスルーチンが明示的または暗黙的に呼び出されるまでに,CBLJENV集団項目のCBLJVMOPTIONS項目に,VALUE句またはMOVE文でJava VMの起動オプションを設定してください。

VALUE句でn個の起動オプションを設定するには,次のように記述します。

        02  CBLJVMOPTIONS.
          03 CBLJOPTCOUNT  PIC S9(9) USAGE COMP VALUE n.
          03 CBLJOPTION-1  PIC X(m)  VALUE 'オプション文字列'.
          03 CBLJOPTION-2  PIC X(m)  VALUE 'オプション文字列'.
             :
          03 CBLJOPTION-n  PIC X(m)  VALUE 'オプション文字列'.

CBLJVMOPTIONS項目のCBLJOPTION-n項目に指定できるオプションについては,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。ただし,ほかのスレッドのCOBOL以外のプログラムで,すでにJava VMが起動されている場合は,CBLJVMOPTIONS項目に指定されたオプションは適用されません。

形式
CALL 'CBLJINITIALIZE' USING  引数1.
引数

引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。

戻り値

RETURN-CODE特殊レジスタには常に0を返します。

初期化に失敗した場合は実行時エラーとなります。

注意事項
  • Javaプログラム呼び出し機能は,32bit版COBOL2002の場合,JDK1.5以上を,64bit版COBOL2002の場合,JDK1.6以上を前提とします。

    64bit版COBOL2002では前提バージョンより古いJDKを使用した場合,明示的または暗黙的にこのサービスルーチンが呼び出されたときに,実行時エラー(詳細メッセージ番号0110)となります。32bit版COBOL2002では前提バージョンより古いJDKを使用した場合でも実行時エラーとなりません。

  • 同じプロセスで作成できるJava実行環境は一度だけです。すでにJava実行環境を削除しているプロセスでは,このサービスルーチンでJava実行環境を作成できないため,実行時エラー(詳細メッセージ番号0111)となります。

(2) CBLJGETCLASS

CBLJGETCLASSサービスルーチンは,JavaクラスをJava実行環境(Java VM)上にロードして使用できるようにし,そのJavaクラス参照を返します。すでにロードされている場合は,Javaクラス参照だけを返します。

形式
CALL 'CBLJGETCLASS' USING  引数1  引数2  引数3.
引数
戻り値

RETURN-CODE特殊レジスタには常に0を返します。

クラスのロードに失敗した場合は実行時エラーとなります。

(3) CBLJSETSTATICFIELD

CBLJSETSTATICFIELDサービスルーチンは,Javaクラス参照の指すJavaクラスのクラスフィールドに値を設定します。

形式
CALL 'CBLJSETSTATICFIELD' USING  引数1  引数2  引数3  引数4.
引数
戻り値

RETURN-CODE特殊レジスタには常に0を返します。

失敗した場合は実行時エラーとなります。

(4) CBLJGETSTATICFIELD

CBLJGETSTATICFIELDサービスルーチンは,Javaクラス参照の指すJavaクラスのクラスフィールドの値を取り出します。

形式
CALL 'CBLJGETSTATICFIELD' USING  引数1  引数2  引数3  引数4.
引数
戻り値

RETURN-CODE特殊レジスタには常に0を返します。

失敗した場合は実行時エラーとなります。

注意事項

クラスフィールドの型がClassインスタンスの場合,引数4のJavaの型にはjava/lang/Classではなく,実体のクラス名を指定してください。指定したJavaの型と実体のクラス名が一致しない場合,実行時エラーとなります。

(5) CBLJSTATICINVOKE

CBLJSTATICINVOKEサービスルーチンは,Javaクラス参照を使って,Javaのクラスメソッドを呼び出します。

形式
CALL 'CBLJSTATICINVOKE' USING  引数1  引数2  引数3  引数4  引数5.
引数
戻り値

RETURN-CODE特殊レジスタに0(正常リターン)または1(例外リターン)を返します。

呼び出しができなかった場合や致命的な例外(java/lang/Errorのサブクラス)がスローされた場合は実行時エラーとなります。

備考

RETURN-CODEが1の場合,CBLJENV引数のCBLJEXCEPTION項目にJavaプログラムからスローされた例外オブジェクトが格納されています。これを使ってエラーの詳細を確認できます。

注意事項

返却値の型がClassインスタンスの場合,引数5のJavaの型にはjava/lang/Classではなく,実体のクラス名を指定してください。指定したJavaの型と実体のクラス名が一致しない場合,実行時エラーとなります。

(6) CBLJNEW

CBLJNEWサービスルーチンは,Javaクラス参照の指すJavaクラスのインスタンスを生成して,コンストラクタを呼び出し,Javaインスタンスのオブジェクト参照(Javaオブジェクト参照)を返します。

取得したJavaオブジェクト参照の扱いは,必ず「3.2.5 Javaオブジェクト参照の使用ガイドライン」に従ってください。

形式
CALL 'CBLJNEW' USING  引数1  引数2  引数3  引数4.
引数
戻り値

RETURN-CODE特殊レジスタに0(成功)または1(例外発生)を返します。

コンストラクタの呼び出しができなかった場合や致命的な例外(java/lang/Errorのサブクラス)がスローされた場合は,実行時エラーとなります。

備考

RETURN-CODEが1の場合,CBLJENV引数のCBLJEXCEPTION項目にJavaプログラムからスローされた例外オブジェクトが格納されています。これを使ってエラーの詳細を確認できます。

注意事項
  • 取得したJavaオブジェクト参照はCOMPUTE文やSET文では転記しないでください。

  • 不要になったJavaオブジェクト参照は,必ずCBLJRELEASEまたはCBLJSETNULLサービスルーチンで解放してください。

(7) CBLJSETFIELD

CBLJSETFIELDサービスルーチンは,Javaオブジェクト参照の指すJavaインスタンスのインスタンスフィールドに値を設定します。

形式
CALL 'CBLJSETFIELD' USING  引数1  引数2  引数3  引数4.
引数
戻り値

RETURN-CODE特殊レジスタには常に0を返します。

失敗した場合は実行時エラーとなります。

(8) CBLJGETFIELD

CBLJGETFIELDサービスルーチンは,Javaオブジェクト参照の指すJavaインスタンスのインスタンスフィールドの値を取り出します。

形式
CALL 'CBLJGETFIELD' USING  引数1  引数2  引数3  引数4.
引数
戻り値

RETURN-CODE特殊レジスタには常に0を返します。

失敗した場合は実行時エラーとなります。

注意事項

クラスフィールドの型がClassインスタンスの場合,引数4のJavaの型にはjava/lang/Classではなく,実体のクラス名を指定してください。指定したJavaの型と実体のクラス名が一致しない場合,実行時エラーとなります。

(9) CBLJINVOKE

CBLJINVOKEサービスルーチンは,Javaオブジェクト参照を使って,Javaのインスタンスメソッドを呼び出します。

形式
CALL 'CBLJINVOKE' USING  引数1  引数2  引数3  引数4  引数5.
引数
戻り値

RETURN-CODE特殊レジスタに0(正常リターン)または1(例外リターン)を返します。

呼び出しができなかった場合や致命的な例外(java/lang/Errorのサブクラス)がスローされた場合は実行時エラーとなります。

備考

RETURN-CODEが1の場合,引数1に指定したCBLJENV集団項目のCBLJEXCEPTION項目にJavaプログラムからスローされた例外オブジェクトが格納されます。これを使ってエラーの詳細を確認できます。

注意事項

返却値の型がClassインスタンスの場合,引数5のJavaの型にはjava/lang/Classではなく,実体のクラス名を指定してください。指定したJavaの型と実体のクラス名が一致しない場合,実行時エラーとなります。

(10) CBLJRELEASE

CBLJRELEASEサービスルーチンは,Javaオブジェクト参照を解放します。

不要になったJavaオブジェクト参照は,CBLJRELEASEサービスルーチンまたはCBLJSETNULLサービスルーチンで解放する必要があります。

形式
CALL 'CBLJRELEASE' USING  引数1  引数2.
引数
戻り値

RETURN-CODE特殊レジスタには常に0を返します。

注意事項
  • 引数2のポインタ項目にNULLを指定しないでください。

  • Javaクラス参照は解放できません。

(11) CBLJFINALIZE

CBLJFINALIZEサービスルーチンは,Javaプログラム呼び出し機能の実行環境を削除します。

形式
CALL 'CBLJFINALIZE' USING  引数1.
引数

引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。

戻り値

RETURN-CODE特殊レジスタには常に0を返します。

環境の削除に失敗した場合は実行時エラーとなります。

注意事項

このサービスルーチンを実行したあとに,Javaクラス参照やJavaオブジェクト参照を使って,ほかのサービスルーチンを呼び出さないでください。