7.2.2 Javaクラス利用サンプルの生成
プログラム作成支援ツールの-TypeオプションにSampleを指定すると,Javaプログラム呼び出し機能によってJavaのフィールドやメソッドを利用するCOBOLコードのサンプル(以降,Javaクラス利用サンプルと表記します)を作成します。
cbl2kjgen -Type Sample 〔オプション〕 Javaプログラム指定オプション |
- Javaプログラム指定オプションは,次の2種類の組み合わせで指定します。
-
-
-Class Javaクラス名
-
-Jar Javaアーカイブファイル名
-Classオプションに指定したJavaクラスをJava実行ファイル(.class)またはJavaアーカイブファイル(.jar)から検索して解析対象とします。-Jarオプションだけを指定すると,アーカイブファイルの中からプログラム作成支援ツールが解析対象とするすべてのクラスを解析します。
-Classオプションおよび-Jarオプションについては,「7.2 プログラム作成支援ツールの機能」および「7.2.1 プログラム作成支援ツールの機能範囲」の「(5) 使用するファイルとファイルの入出力」を参照してください。
-
Javaクラス利用サンプルの生成の概要を次の図に示します。
作成したJavaクラス利用サンプルには,Javaプログラムに含まれるフィールドやメソッドを,Javaプログラム呼び出し機能を使用して呼び出すCOBOLプログラムが記述されます。
Javaクラス利用サンプルを使用する場合は,作成されたプログラムを編集し,必要な定義や処理を選択して,Javaクラスを利用するCOBOLプログラムを完成させます。
- 注意事項
-
プログラム作成支援ツールで生成したJavaクラス利用サンプルは,未修正のままCOBOL2002コンパイラでコンパイルするとコンパイルエラーとなります。プログラム名やJavaのフィールド値などを設定してください。
(1) Javaクラス利用サンプルの構造
Javaクラス利用サンプルの構造を次の図に示します。
Javaクラス利用サンプルとして,COBOLソースファイルがJavaクラス単位に一つずつ作成されます。
Javaクラス利用サンプルにはプログラムが一つあり,その中にJavaプログラム呼び出し機能を使用するための処理が作成されます。また,各処理で使用するデータ項目の定義も自動生成されます。
不要な処理を削除したり,データ名を変更したりするなど,生成されたプログラムを編集して,目的のプログラムを完成させてください。
図中の(a)〜(f)の処理について説明します。なお,(d)〜(f)の処理は一つの処理につき,次に示す内容を生成します。
-
処理の概要(コメント)
-
Javaプログラム呼び出し機能による処理
(a) プログラムの概要(コメント)
プログラムの概要を先頭のコメントとして記載します。記載する内容を次に示します。
項番 |
項目 |
内容(引用符(")で囲んだ文字列は固定) |
---|---|---|
1 |
タイトル |
次の内容を記載します。 "COBOL2002 Javaプログラム呼び出し機能 クラス利用サンプルソース" |
2 |
利用クラス |
対象のクラス名を記載します。 |
3 |
cbl2kjgenのバージョン |
cbl2kjgenのバージョンを記載します。 例:"03-02" |
4 |
オプション |
cbl2kjgenに指定されたオプションを記載します。1行につき1オプションを記載します。 |
5 |
生成日時 |
Javaクラス利用サンプルの生成日時を記載します。 形式はYYYY/mm/dd HH:MM:SSです。 |
(d) データ部
作業場所節に次に示す順番でデータ項目を定義します。ただし,Javaクラス利用サンプル中で使用しないデータ項目は定義しません。
-
CBLJENV集団項目
-
クラス参照とオブジェクト参照
-
クラス名,フィールド名,およびメソッド名
-
パラメタ
-
引数リスト
-
String⇔英数字項目変換領域
-
配列オブジェクト⇔可変長繰り返し項目変換領域
各データ項目について説明します。
-
CBLJENV集団項目
CBLJENV集団項目を定義します。CBLJOPTION-1には初期値として'Java VMオプション文字列'が設定されています。この値をJava VMに渡すオプション文字列(例:'-Djava.class.path=java')に変更する必要があります。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。
-
クラス参照とオブジェクト参照
クラス参照とオブジェクト参照を定義します。クラス参照とオブジェクト参照は1クラスにつき一つずつ定義します。
-
クラス名,フィールド名,およびメソッド名
クラス名,フィールド名,およびメソッド名を設定する英数字の動的長基本項目を定義します。初期値には該当するクラス名,フィールド名またはメソッド名を設定します。
-
パラメタ
次に示す値を設定するデータ項目を定義します。
-
フィールド※
-
コンストラクタおよびメソッドに渡す各引数
-
メソッドの戻り値
- 注※
-
対象となるフィールドについては,「7.2.1 プログラム作成支援ツールの機能範囲」の「(1) Javaプログラムの解析」の「(a) プログラム作成支援ツールの解析対象」を参照してください。
-
-
引数リスト
Javaプログラム呼び出し機能のサービスルーチンに渡す引数リストを定義します。
コンストラクタおよびメソッドに引数が一つ以上ある場合は,ARG-LISTを使用します。ARGPTRはクラス内のコンストラクタおよびメソッドが持つ引数の最大個数+1個を定義します。
コンストラクタおよびメソッドに引数がない場合はNO-ARGを使用します。
-
String⇔英数字項目変換領域
Javaプログラム呼び出し機能のサービスルーチンでStringと英数字項目の変換を行う際,変換結果を受け取るための領域として使用します。
-
配列オブジェクト⇔可変長繰り返し項目変換領域
Javaプログラム呼び出し機能のサービスルーチンで配列オブジェクトと可変長繰り返し項目の変換を行う際,変換結果を受け取るための領域として使用します。
(e) 手続き部
手続き部の内容について説明します。
- Javaプログラム呼び出し機能の初期化処理
-
CBLJENV集団項目を初期化する処理です。
- クラス参照とオブジェクト参照の取得
-
クラスおよびそのインスタンス(オブジェクト参照)を取得する処理です。
- メソッド操作用の処理
-
クラスメソッドおよびインスタンスメソッドを呼び出す処理です。対象となるメソッドについては,「7.2.1 プログラム作成支援ツールの機能範囲」の「(1) Javaプログラムの解析」の「(a) プログラム作成支援ツールの解析対象」を参照してください。
- フィールド操作用の処理
-
クラスフィールドおよびインスタンスフィールドにアクセス(取得・設定)する処理です。対象となるフィールドについては,「7.2.1 プログラム作成支援ツールの機能範囲」の「(1) Javaプログラムの解析」の「(a) プログラム作成支援ツールの解析対象」を参照してください。
- オブジェクト参照の解放処理
-
「クラス参照とオブジェクト参照の取得」で取得したオブジェクト参照(インスタンス)を解放する処理です。
- Javaプログラム呼び出し機能の終了処理
-
Javaプログラム呼び出し機能の実行環境の終了処理です。手続きEND-PROCの中に含みます。
(f) プログラムの終了
プログラムを終了します。
- 注意
-
"*SAMPLE*"はCOBOLで使用できないプログラム名です。見出し部で指定したプログラム名に変更してください。見出し部については,「(b) 見出し部」を参照してください。
(2) データ項目のマッピング
Javaクラス利用サンプル中に各データ項目を定義する際に使用するルールを示します。
- JNIに関するデータ項目
-
JNIに関するデータ項目を次に示します。
用途
データ項目※
Java VMに渡すオプションを1個定義するCBLJENV集団項目を定義する。
01 CBLJENV GLOBAL. 02 CBLJENVCORE USAGE POINTER VALUE NULL. 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 STRMAXLEN. 02 CBLJVMOPTIONS. 03 CBLJOPTCOUNT PIC S9(9) USAGE COMP VALUE 1. 03 CBLJOPTION-1 PIC X(STRMAXLEN) VALUE 'VMOPT-1'.
- 注※
-
-
"STRMAXLEN"の既定値は256です。この値はプログラム作成支援ツールの-StrMaxLenオプションで変更できます。
-
"VMOPT-1"には文字列'Java VMオプション文字列'が入ります。
-
- クラスやオブジェクトに関するデータ項目
-
クラスやオブジェクトに関するデータ項目を次に示します。
項番
用途
データ項目※
1
クラス名を設定する。
01 classname PIC X DYNAMIC C-STRING VALUE 'classnameOrg'.
2
クラス参照のアドレスを設定する。
01 CLASSREF USAGE POINTER.
3
オブジェクト参照のアドレスを設定する。
01 OBJREF USAGE POINTER.
- 注※
-
-
"classname"はクラス名または-Classオプションで指定した内部名を示します。クラス名または-Classオプションについては,「7.2.1 プログラム作成支援ツールの機能範囲」の「(2) データ項目のマッピング(共通)」を参照してください。
-
"classnameOrg"はクラス名を示します。クラス名に含まれるピリオドはスラントに置換します。
-
- メソッド(コンストラクタ,クラスメソッド,インスタンスメソッド)に関するデータ項目
-
メソッド(コンストラクタ,クラスメソッド,インスタンスメソッド)に関するデータ項目を次に示します。
項番
用途
データ項目※
1
メソッド名を設定する。
01 methodname PIC X DYNAMIC C-STRING VALUE 'methodname'.
2
n番目のメソッドの第m引数を設定するための集団項目を定義する。
(基本型の場合)
01 ARGn-m. 02 ARGn-m-TYPE PIC X(1) VALUE 'SIGNATURE'. 02 FILLER PIC X(7) VALUE ALL LOW-VALUE. 02 ARGn-m-AREA TYPE-DEF.
(基本型以外の場合)
01 ARGn-m. 02 ARGn-m-TYPE PIC X(STRMAXLEN) VALUE 'SIGNATURE'. 02 ARGn-m-AREA TYPE-DEF.
3
n番目のメソッドの第m引数が配列オブジェクトの場合,配列の全要素とCOBOLの繰り返し項目をマッピングするための集団項目およびサイズを定義する。
01 ARGn-m-1-MAP-LEN PIC S9(9) USAGE COMP VALUE ARRAYMAXLEN. : 01 ARGn-m-k-MAP-LEN PIC S9(9) USAGE COMP VALUE ARRAYMAXLEN. 01 ARGn-m-MAP. 02 ARGn-m-1 OCCURS ARRAYMAXLEN TIMES DEPENDING ON ARGn-m-1- MAP-LEN. : 08 ARGn-m-k OCCURS ARRAYMAXLEN TIMES DEPENDING ON ARGn-m-k-MAP-LEN. 09 ARGn-m-ELEM TYPE-DEF.
4
n番目のメソッドの第m引数が配列オブジェクトの場合,配列の最下層の要素とCOBOLの繰り返し項目をマッピングするための作業用集団項目およびサイズを定義する。
01 ARGn-m-TEMP-MAP-LEN PIC S9(9) USAGE COMP VALUE ARRAYMAXLEN. 01 ARGn-m-TEMP-MAP ADDRESSED BY ARGn-m-TEMP-MAP-P. 02 ARGn-m-TEMP-MAP-ELEM TYPE-DEF OCCURS ARRAYMAXLEN TIMES DEPENDING ON ARGn-m-TEMP-MAP-LEN.
5
n番目のメソッドの戻り値を設定するための集団項目を定義する。
(基本型の場合)
01 RTNn. 02 RTNn-TYPE PIC X(1) VALUE 'SIGNATURE'. 02 FILLER PIC X(7) VALUE ALL LOW-VALUE. 02 RTNn-AREA TYPE-DEF.
(基本型以外の場合)
01 RTNn. 02 RTNn-TYPE PIC X(STRMAXLEN) VALUE 'SIGNATURE'. 02 RTNn-AREA TYPE-DEF.
6
n番目のメソッドの戻り値が配列オブジェクトの場合,配列の全要素とCOBOLの繰り返し項目をマッピングするための集団項目およびサイズを定義する。
01 RTNn-1-MAP-LEN PIC S9(9) USAGE COMP VALUE ARRAYMAXLEN. : 01 RTNn-k-MAP-LEN PIC S9(9) USAGE COMP VALUE ARRAYMAXLEN. 01 RTNn-MAP. 02 RTNn-1 OCCURS ARRAYMAXLEN TIMES DEPENDING ON RTNn-1-MAP-LEN. : 08 RTNn-k OCCURS ARRAYMAXLEN TIMES DEPENDING ON RTNn-k-MAP-LEN. 09 RTNn-ELEM TYPE-DEF.
7
n番目のメソッドの戻り値が配列オブジェクトの場合,配列の最下層の要素とCOBOLの繰り返し項目をマッピングするための作業用集団項目およびサイズを定義する。
01 RTNn-TEMP-MAP-LEN PIC S9(9) USAGE COMP VALUE ARRAYMAXLEN. 01 RTNn-TEMP-MAP ADDRESSED BY RTNn-TEMP-MAP-P. 02 RTNn-TEMP-MAP-ELEM TYPE-DEF OCCURS ARRAYMAXLEN TIMES DEPENDING ON RTNn-TEMP-MAP-LEN.
- 注※
-
-
"n"はクラス名およびメソッド名を設定するデータ項目を定義する順番と一致します。
-
"m"はメソッドの引数の順番と一致します。
-
"k"は配列オブジェクトの次元数を示します。
-
"methodname"はメソッド名を示します。メソッド名については,「7.2.1 プログラム作成支援ツールの機能範囲」の「(2) データ項目のマッピング(共通)」を参照してください。
-
"SIGNATURE"はJavaの型を表す文字列を示します。ただし,引数の型がClassインスタンスの場合,型にはjava/lang/Classではなく,実体のクラス名となるように修正してください。指定したJavaの型と実体のクラス名が一致しない場合,実行時エラーとなることがあります。Javaの型を表す文字列については,「6.1.1 サービスルーチンで使用する引数」の「(3) パラメタ型集団項目」を参照してください。
-
"TYPE-DEF"はJavaの型に対応するCOBOLの型を示します。Javaの型に対応するCOBOLの型については,「6.1.1 サービスルーチンで使用する引数」の「(3) パラメタ型集団項目」を参照してください。
-
"STRMAXLEN"の既定値は256です。この値はプログラム作成支援ツールの-StrMaxLenオプションで変更できます。
-
- フィールド(クラスフィールド,インスタンスフィールド)に関するデータ項目
-
フィールド(クラスフィールド,インスタンスフィールド)に関するデータ項目を次に示します。
項番
用途
データ項目※
1
フィールド名を設定する。
01 fieldname PIC X DYNAMIC C-STRING VALUE 'fieldname'.
2
n番目のフィールドの値を設定するための集団項目を定義する。
(基本型の場合)
01 FIELDn. 02 FIELDn-TYPE PIC X(1) VALUE 'SIGNATURE'. 02 FILLER PIC X(7) VALUE ALL LOW-VALUE. 02 FIELDn-AREA TYPE-DEF.
(基本型以外の場合)
01 FIELDn. 02 FIELDn-TYPE PIC X(STRMAXLEN) VALUE 'SIGNATURE'. 02 FIELDn-AREA TYPE-DEF.
3
n番目のフィールドが配列オブジェクトの場合,配列の全要素とCOBOLの繰り返し項目をマッピングするための集団項目およびサイズを定義する。
01 FIELDn-1-MAP-LEN PIC S9(9) USAGE COMP VALUE ARRAYMAXLEN. : 01 FIELDn-m-MAP-LEN PIC S9(9) USAGE COMP VALUE ARRAYMAXLEN. 01 FIELDn-MAP. 02 FIELDn-1 OCCURS ARRAYMAXLEN TIMES DEPENDING ON FIELDn-1-MAP-LEN. : 08 FIELDn-m OCCURS ARRAYMAXLEN TIMES DEPENDING ON FIELDn-m-MAP-LEN. 09 FIELDn-ELEM TYPE-DEF.
4
n番目のフィールドが配列オブジェクトの場合,配列の最下層の要素とCOBOLの繰り返し項目をマッピングするための作業用集団項目およびサイズを定義する。
01 FIELDn-TEMP-MAP-LEN PIC S9(9) USAGE COMP VALUE ARRAYMAXLEN. 01 FIELDn-TEMP-MAP ADDRESSED BY FIELDn-TEMP-MAP-P. 02 FIELDn-TEMP-MAP-ELEM TYPE-DEF OCCURS ARRAYMAXLEN TIMES DEPENDING ON FIELDn-TEMP-MAP-LEN.
- 注※
-
-
"n"はフィールド名を設定するデータ項目を定義する順番と一致します。
-
"m"は配列オブジェクトの次元数を示します。
-
"fieldname"はフィールド名を示します。フィールド名については,「7.2.1 プログラム作成支援ツールの機能範囲」の「(2) データ項目のマッピング(共通)」を参照してください。
-
"SIGNATURE"はJavaの型を表す文字列を示します。ただし,引数の型がClassインスタンスの場合,型にはjava/lang/Classではなく,実体のクラス名となるように修正してください。指定したJavaの型と実体のクラス名が一致しない場合,実行時エラーとなることがあります。Javaの型を表す文字列については,「6.1.1 サービスルーチンで使用する引数」の「(3) パラメタ型集団項目」を参照してください。
-
"TYPE-DEF"はJavaの型に対応するCOBOLの型を示します。Javaの型に対応するCOBOLの型については,「6.1.1 サービスルーチンで使用する引数」の「(3) パラメタ型集団項目」を参照してください。
-
"STRMAXLEN"の既定値は256です。この値はプログラム作成支援ツールの-StrMaxLenオプションで変更できます。
-
"ARRAYMAXLEN"の既定値は256です。この値はプログラム作成支援ツールの-MaxArrayLengthオプションで変更できます。
-
(3) 生成後の使用方法
作成したJavaクラス利用サンプルは,そのままコンパイルして使用できません。少なくとも次の項目を修正する必要があります。
-
プログラム名(*SAMPLE*)の変更
-
任意の定数やデータ項目を記述する必要がある個所(???…?)の変更
-
不要な処理(フィールド操作,メソッド呼び出しなど)の選択と削除
Javaクラス利用サンプルの例を次に示します。
- コマンド
-
cbl2kjgen -Type Sample -StrMaxLen 256 -Class mylib.sample.SampleClass
- mylib¥sample¥SampleClass.javaの内容
- mylib.sample.SampleClass.cblの内容