6.1.2 基本操作
ここでは,Javaプログラム呼び出し機能が提供する基本操作のサービスルーチンについて説明します。
- 〈この項の構成〉
(1) CBLJINITIALIZE
CBLJINITIALIZEサービスルーチンは,Javaプログラム呼び出し機能を初期化します。
CBLJINITIALIZEサービスルーチンの動作を次に示します。
-
Java VMをロードしてJava実行環境を作成します。
ほかのスレッドですでにJava実行環境が作成されている場合,その環境が利用できるようにします。
作成したJava実行環境の情報は,CBLJENV集団項目のCBLJENVCORE項目に設定されます。絶対に変更してはいけません。
-
JNIへのアクセスを最小限に抑えるために,キャッシングの準備をします。
Javaプログラム呼び出し機能自身が使用するクラスとそのフィールドおよびメソッドは,この初期化のタイミングで情報を取得します。
また,一度使用したクラス,フィールド,メソッドの情報をキャッシュするためのハッシュを準備します。
Javaプログラム呼び出し機能の初期化は,各スレッドでJavaプログラム呼び出し機能を使用する前に実行する必要があります。
ただし,次に示すサービスルーチンは,CBLJENV集団項目のCBLJENVCORE項目がNULLの場合に,CBLJINITIALIZEサービスルーチンを自動的に呼び出します。このため,これらのサービスルーチンをスレッドの最初に呼び出す場合は,CBLJINITIALIZEサービスルーチンを明示的に呼び出す必要はありません。
-
CBLJGETCLASSサービスルーチン
-
CBLJXTOSTRINGサービスルーチン
-
CBLJNTOSTRINGサービスルーチン
-
CBLJNEWARRAYサービスルーチン
また,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.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,クラス名を持つ動的長基本項目または名前型集団項目を指定します。名前型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(2) 名前型集団項目」を参照してください。
-
引数3には,Javaクラス参照を受け取るポインタ項目を指定します。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
クラスのロードに失敗した場合は実行時エラーとなります。
(3) CBLJSETSTATICFIELD
CBLJSETSTATICFIELDサービスルーチンは,Javaクラス参照の指すJavaクラスのクラスフィールドに値を設定します。
- 形式
-
CALL 'CBLJSETSTATICFIELD' USING 引数1 引数2 引数3 引数4.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaクラス参照を持つポインタ項目を指定します。
-
引数3には,クラスフィールド名を持つ動的長基本項目または名前型集団項目を指定します。名前型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(2) 名前型集団項目」を参照してください。
-
引数4には,設定値を持つパラメタ型集団項目を指定します。パラメタ型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(3) パラメタ型集団項目」を参照してください。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
失敗した場合は実行時エラーとなります。
(4) CBLJGETSTATICFIELD
CBLJGETSTATICFIELDサービスルーチンは,Javaクラス参照の指すJavaクラスのクラスフィールドの値を取り出します。
- 形式
-
CALL 'CBLJGETSTATICFIELD' USING 引数1 引数2 引数3 引数4.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaクラス参照を持つポインタ項目を指定します。
-
引数3には,クラスフィールド名を持つ動的長基本項目または名前型集団項目を指定します。名前型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(2) 名前型集団項目」を参照してください。
-
引数4には,値を受け取るパラメタ型集団項目を指定します。パラメタ型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(3) パラメタ型集団項目」を参照してください。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
失敗した場合は実行時エラーとなります。
- 注意事項
-
クラスフィールドの型がClassインスタンスの場合,引数4のJavaの型にはjava/lang/Classではなく,実体のクラス名を指定してください。指定したJavaの型と実体のクラス名が一致しない場合,実行時エラーとなります。
(5) CBLJSTATICINVOKE
CBLJSTATICINVOKEサービスルーチンは,Javaクラス参照を使って,Javaのクラスメソッドを呼び出します。
- 形式
-
CALL 'CBLJSTATICINVOKE' USING 引数1 引数2 引数3 引数4 引数5.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaクラス参照を持つポインタ項目を指定します。
-
引数3には,クラスメソッド名を持つ動的長基本項目または名前型集団項目を指定します。名前型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(2) 名前型集団項目」を参照してください。
-
引数4には,クラスメソッドに渡す引数リストを指定します。引数なしのクラスメソッドを呼び出す場合も指定が必要です。引数リストについては,「6.1.1 サービスルーチンで使用する引数」の「(4) 引数リスト型集団項目」を参照してください。
-
引数5には,返却値を受け取る取るパラメタ型集団項目を指定します。void型のクラスメソッドを呼び出す場合も指定が必要です。パラメタ型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(3) パラメタ型集団項目」を参照してください。
-
- 戻り値
-
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.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaクラス参照を持つポインタ項目を指定します。
-
引数3には,コンストラクタに渡す引数リストを指定します。引数なしのコンストラクタを呼び出す場合も指定が必要です。引数リストについては,「6.1.1 サービスルーチンで使用する引数」の「(4) 引数リスト型集団項目」を参照してください。
-
引数4には,Javaオブジェクト参照を受け取るポインタ項目を指定します。
-
- 戻り値
-
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.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,インスタンスフィールド名を持つ動的長基本項目または名前型集団項目を指定します。名前型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(2) 名前型集団項目」を参照してください。
-
引数4には,設定値を持つパラメタ型集団項目を指定します。パラメタ型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(3) パラメタ型集団項目」を参照してください。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
失敗した場合は実行時エラーとなります。
(8) CBLJGETFIELD
CBLJGETFIELDサービスルーチンは,Javaオブジェクト参照の指すJavaインスタンスのインスタンスフィールドの値を取り出します。
- 形式
-
CALL 'CBLJGETFIELD' USING 引数1 引数2 引数3 引数4.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,インスタンスフィールド名を持つ動的長基本項目または名前型集団項目を指定します。名前型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(2) 名前型集団項目」を参照してください。
-
引数4には,値を受け取るパラメタ型集団項目を指定します。パラメタ型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(3) パラメタ型集団項目」を参照してください。
-
- 戻り値
-
RETURN-CODE特殊レジスタには常に0を返します。
失敗した場合は実行時エラーとなります。
- 注意事項
-
クラスフィールドの型がClassインスタンスの場合,引数4のJavaの型にはjava/lang/Classではなく,実体のクラス名を指定してください。指定したJavaの型と実体のクラス名が一致しない場合,実行時エラーとなります。
(9) CBLJINVOKE
CBLJINVOKEサービスルーチンは,Javaオブジェクト参照を使って,Javaのインスタンスメソッドを呼び出します。
- 形式
-
CALL 'CBLJINVOKE' USING 引数1 引数2 引数3 引数4 引数5.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaオブジェクト参照を持つポインタ項目を指定します。
-
引数3には,インスタンスメソッド名を持つ動的長基本項目または名前型集団項目を指定します。名前型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(2) 名前型集団項目」を参照してください。
-
引数4には,インスタンスメソッドに渡す引数リストを指定します。引数なしのインスタンスメソッドを呼び出す場合も指定が必要です。引数リストについては,「6.1.1 サービスルーチンで使用する引数」の「(4) 引数リスト型集団項目」を参照してください。
-
引数5には,返却値を受け取る取るパラメタ型集団項目を指定します。void型のインスタンスメソッドを呼び出す場合も指定が必要です。パラメタ型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(3) パラメタ型集団項目」を参照してください。
-
- 戻り値
-
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.
- 引数
-
-
引数1には,CBLJENV集団項目を指定します。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
引数2には,Javaオブジェクト参照を持つポインタ項目を指定します。
-
- 戻り値
-
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オブジェクト参照を使って,ほかのサービスルーチンを呼び出さないでください。