6.1.1 サービスルーチンで使用する引数
ここでは,Javaプログラム呼び出し機能のサービスルーチンで使用する引数について説明します。
(1) CBLJENV集団項目
Javaプログラム呼び出し機能のサービスルーチンの第1引数には,CBLJENV集団項目を指定します。
CBLJENV集団項目は,スレッドごとに一つの領域を確保する必要があります。また,一つのJavaプログラム呼び出し機能の実行単位(CBLJINITIALIZEサービスルーチンで初期化してからCBLJFINALIZEサービスルーチンで終了するまでの間)に,複数のCBLJENV集団項目を使用することはできません。
CBLJENV集団項目は,作業場所節に01レベルの集団項目として記述してください。
CBLJENV集団項目を次に示します。
01 CBLJENV. 02 CBLJENVCORE USAGE POINTER VALUE NULL. *> JNI/Java VM情報 02 CBLJEXCEPTION USAGE POINTER VALUE NULL. *> 例外情報 02 CBLJFLAGS PIC 1(32) USAGE BIT VALUE ALL B'0'. *> オプションフラグ 02 CBLJSTRMAXLEN PIC S9(9) USAGE COMP VALUE m. *> 引数で使う文字列長 02 CBLJVMOPTIONS. *> Java VM起動オプション 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 'オプション文字列'. |
複数のプログラムで一つの実行単位を構成する場合にも,一つのCBLJENV集団項目を使用する必要があります。あるプログラムの作業場所節でCBLJENV集団項目を定義し,ほかのプログラムでは参照渡し(BY REFERENCE)の引数として受け渡したCBLJENV集団項目を使用します。
複数のプログラムで一つのCBLJENV集団項目を使用する場合を次に示します。
IDENTIFICATION DIVISION. PROGRAM-ID. MAIN. DATA DIVISION. WORKING-STORAGE SECTION. 01 CBLJENV. 02 CBLJENVCORE USAGE POINTER VALUE NULL. : PROCEDURE DIVISION. CALL 'SUB1' USING CBLJENV. : IDENTIFICATION DIVISION. PROGRAM PROGRAM-ID. SUB1. DATA DIVISION. LINKAGE SECTION. 01 CBLJENV. 02 CBLJENVCORE USAGE POINTER. : PROCEDURE DIVISION USING CBLJENV. CALL 'CBLJGETCLASS' USING CBLJENV SampleClass CLASSREF. |
CBLJENV集団項目の内容を次の表に示します。
項番 |
項目名 |
設定値 |
---|---|---|
1 |
CBLJENVCORE |
CBLJINITIALIZEサービスルーチンで作成されたJavaの実行環境(JNIおよびJava VM)の管理情報が格納されます。 必ずNULLで初期化してください。 |
2 |
CBLJEXCEPTION |
Javaのコンストラクタやメソッドの呼び出しでスローされた例外オブジェクトが格納されます。 必ずNULLで初期化してください。 |
3 |
CBLJFLAGS |
Javaプログラム呼び出し機能の初期化時オプションが格納されます。 必ずALL B'0'で初期化してください。 |
4 |
CBLJSTRMAXLEN |
サービスルーチンへの引数で使う英数字項目または日本語項目の最大のサイズ(バイト数)を指定します。1〜1,024の範囲で指定します。 |
5 |
CBLJVMOPTIONS |
Java VMの起動オプションを英数字項目で指定します。 項目のサイズはCBLJSTRMAXLENに指定した値です。 なお,オプション文字列の値の先頭および末尾の連続した半角空白は無視されます。 また,ほかのスレッドでJava VMがすでに起動されている場合,ここで指定したオプションは適用されません。 |
CBLJVMOPTIONSのCBLJOPTION-(1〜n)項目に指定できるオプションの例を次に示します。指定するプロパティ名や値などについては,使用するJava VMのドキュメントを参照してください。
- Java VM起動オプションの例1
-
オプション文字列:-Dプロパティ名=値
説明:システムプロパティを設定します。
- 例
-
-Djava.compiler=NONE …JITの無効化設定 -Djava.class.path=パス …クラスのパス設定 -Djava.library.path=パス …ライブラリのパス設定
- Java VM起動オプションの例2
-
オプション文字列:-verbose:{gc|class|jni}
説明:指定メッセージ種別の詳細メッセージ出力を有効にします。
gc:ガーベジコレクション関連メッセージ
class:クラスロード関連メッセージ
jni:JNI関連メッセージ
- 注意事項
-
CBLJENV集団項目の初期値は,CBLJINITIALIZEサービスルーチンが明示的または暗黙的に呼び出される前に設定してください。CBLJINITIALIZEサービスルーチンが呼び出されたあとで変更しないでください。
(2) 名前型集団項目
Javaのクラス名,メソッド名,およびフィールド名を引数として渡す場合に,動的長基本項目の代わりに名前型集団項目を使用できます。名前型集団項目は,最後の領域がNULL終端文字となるLOW-VALUEとなるように定義します。
名前型集団項目の例を次に示します。
01 名前. 02 NAMESTR PIC X(16) VALUE '名前の文字列'. *> ※1 02 FILLER PIC X VALUE LOW-VALUE. *> ※2 |
- 注※1
-
項目の名前はNAMESTR以外を設定できます。参照しない場合は,FILLERを設定できます。
- 注※2
-
NULL終端文字を示します。
名前の文字列にパッケージ付きのクラス名やインタフェース名を記述する場合は,ピリオドの代わりにスラントを使って区切ります。
- 例)
java/lang/String
NAMESTR項目のサイズは,名前の文字列のサイズより大きく宣言してもよく,名前のあとに連続する空白文字が挿入されていてもかまいません。ただし,Javaプログラム呼び出し機能のサービスルーチンに渡した場合,末尾の連続する空白文字はLOW-VALUE文字に置き換えられます。
(3) パラメタ型集団項目
Javaのメソッドやフィールドとデータの受け渡しをするデータ項目は次のように記述されている必要があります。
- 基本データ型の場合
-
01 データ項目名. 02 DATA-TYPE PIC X. *> ※1 02 FILLER PIC X(7) VALUE ALL LOW-VALUE. *> ※2 02 DATA-AREA 受け渡し領域のデータ項目のデータ記述項. *> ※3
- オブジェクト系の型(クラスオブジェクト,オブジェクト,および配列オブジェクト)の場合
-
01 データ項目名. 02 DATA-TYPE PIC X(m). *> ※1 02 DATA-AREA 受け渡し領域のデータ項目のデータ記述項. *> ※3
- 注※1
-
DATA-TYPE項目には,Javaの型を表す文字列(シグニチャ)を指定します。
基本データ型の場合は,1文字の英数字項目を指定します。
オブジェクト系の型の場合は,CBLJENV集団項目のCBLJSTRMAXLENに指定したサイズの英数字項目を指定します。CBLJENV集団項目のCBLJSTRMAXLENに指定したサイズ以外で定義すると,アクセス違反などの不正な動作となります。
- 注※2
-
この値は必ずLOW-VALUEとなるように定義してください。
- 注※3
-
DATA-AREA項目には,Javaの型に対応するCOBOLのデータ項目を指定します。
Javaの型,Javaの型を表す文字列(シグニチャ),Javaの型に対応するCOBOLのデータ項目の関係を次の表に示します。
項番 |
Javaの型 |
Javaの型を表す文字列(シグニチャ) |
Javaの型に対応するCOBOLの型 |
|
---|---|---|---|---|
1 |
void |
V |
該当しない(DATA-TYPE項目の宣言だけでよい) |
|
2 |
byte |
B |
英数字項目(1けた) |
PIC X |
符号付き2進項目(1バイト)※1 |
PIC S9(1) USAGE COMP 〜 PIC S9(2) USAGE COMP |
|||
3 |
char |
C |
日本語項目(1けた) |
PIC N |
符号なし2進項目(2バイト)※2 |
PIC 9(1) USAGE COMP 〜 PIC 9(4) USAGE COMP PIC 9(3) USAGE COMP-X 〜 PIC 9(4) USAGE COMP-X |
|||
4 |
short |
S |
符号付き2進項目(2バイト)※2 |
PIC S9(1) USAGE COMP 〜 PIC S9(4) USAGE COMP |
5 |
int |
I |
符号付き2進項目(4バイト) |
PIC S9(5) USAGE COMP 〜 PIC S9(9) USAGE COMP |
6 |
long |
J |
符号付き2進項目(8バイト) |
PIC S9(10) USAGE COMP 〜 PIC S9(18) USAGE COMP |
7 |
float |
F |
単精度内部浮動小数点項目 |
USAGE COMP-1 |
8 |
double |
D |
倍精度内部浮動小数点項目 |
USAGE COMP-2 |
9 |
boolean |
Z |
英数字項目(1けた) |
PIC X |
符号なし2進項目(1バイト) |
PIC 9(1) USAGE COMP-X 〜 PIC 9(2) USAGE COMP-X |
|||
10 |
クラスオブジェクト |
Tクラス完全修飾名; |
ポインタ項目 |
USAGE POINTER |
11 |
オブジェクト |
Lクラス完全修飾名; |
ポインタ項目 |
USAGE POINTER |
12 |
配列オブジェクト |
[要素の型の文字列 |
ポインタ項目 |
USAGE POINTER |
COBOLプログラムでのパラメタ型集団項目の記述例を次に示します。
- (例1)int型の場合
-
01 ARG. 02 DATA-TYPE PIC X(1) VALUE 'I'. 02 FILLER PIC X(7) VALUE ALL LOW-VALUE. 02 DATA-AREA PIC S9(9) USAGE COMP.
- (例2)String型のオブジェクトの場合
-
01 ARG. 02 DATA-TYPE PIC X(256) VALUE 'Ljava/lang/String;'. 02 DATA-AREA USAGE POINTER.
- (例3)String型の配列オブジェクトの場合
-
01 ARG. 02 DATA-TYPE PIC X(256) VALUE '[Ljava/lang/String;'. 02 DATA-AREA USAGE POINTER.
基本データ型では,DATA-AREA項目のデータ型を判定しないで,Javaの型に対応するバイナリデータをそのまま受け渡します。対応するCOBOLのデータ型は,その用途によって適切な型を選択してください。
-
Javaのchar型に対応するDATA-AREA項目を日本語項目(PIC N)で定義したときも内容をそのまま受け渡します。COBOLで取り扱う文字コードとの変換はしません。
-
boolean型と英数字項目の値の対応を次の表に示します。
表6‒4 boolean型と英数字項目の値 booleanの値
英数字項目の値
true
X'01'
false
X'00'
(4) 引数リスト型集団項目
Javaのメソッドを呼び出す場合は,メソッドに渡す引数を引数リスト型集団項目で指定します。
引数リスト型集団項目は,パラメタ型集団項目を示すポインタ項目の繰り返し項目です。
終端の要素にはNULL値を設定する必要があります。このため,実際の引数の個数+1以上の繰り返し要素数を記述してください。
引数リスト型集団項目の例を次に示します。
- 引数なしのメソッドを呼び出す場合
-
*> *> 引数リスト型(引数なし)の宣言 *> 01 NO-ARG. 02 FILLER USAGE POINTER VALUE NULL. CALL 'CBLJSTATICINVOKE' USING CBLJENV CLSREF sample NO-ARG RTN-1.
- 引数の個数が3のメソッドを呼び出す場合
-
*> *> 引数リスト型(引数の個数が3)の宣言 *> 01 ARG-LIST. 02 ARGPTR USAGE POINTER OCCURS 4 TIMES. *> 個数+1 *> *> 引数の宣言 *> 01 ARG-1. 02 DATA-TYPE-1 PIC X(1) VALUE 'I'. 02 FILLER PIC X(7) VALUE ALL LOW-VALUE. 02 DATA-AREA-1 PIC S9(9) USAGE COMP. 01 ARG-2. 02 DATA-TYPE-2 PIC X(256) VALUE 'LString;'. 02 DATA-AREA-2 USAGE POINTER. 01 ARG-3. 02 DATA-TYPE-3 PIC X(1) VALUE 'Z'. 02 FILLER PIC X(7) VALUE ALL LOW-VALUE. 02 DATA-AREA-3 PIC X. COMPUTE ARGPTR(1) = FUNCTION ADDR( ARG-1 ). COMPUTE ARGPTR(2) = FUNCTION ADDR( ARG-2 ). COMPUTE ARGPTR(3) = FUNCTION ADDR( ARG-3 ). COMPUTE ARGPTR(4) = ZERO. *> 引数リスト型の終端 CALL 'CBLJSTATICINVOKE' USING CBLJENV CLSREF sample ARG-LIST RTN-1.