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


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クラス利用サンプルの生成の概要を次の図に示します。

図7‒5 Javaクラス利用サンプルの生成の概要

[図データ]

作成したJavaクラス利用サンプルには,Javaプログラムに含まれるフィールドやメソッドを,Javaプログラム呼び出し機能を使用して呼び出すCOBOLプログラムが記述されます。

Javaクラス利用サンプルを使用する場合は,作成されたプログラムを編集し,必要な定義や処理を選択して,Javaクラスを利用するCOBOLプログラムを完成させます。

注意事項

プログラム作成支援ツールで生成したJavaクラス利用サンプルは,未修正のままCOBOL2002コンパイラでコンパイルするとコンパイルエラーとなります。プログラム名やJavaのフィールド値などを設定してください。

〈この項の構成〉

(1) Javaクラス利用サンプルの構造

Javaクラス利用サンプルの構造を次の図に示します。

図7‒6 Javaクラス利用サンプルの構造

[図データ]

Javaクラス利用サンプルとして,COBOLソースファイルがJavaクラス単位に一つずつ作成されます。

Javaクラス利用サンプルにはプログラムが一つあり,その中にJavaプログラム呼び出し機能を使用するための処理が作成されます。また,各処理で使用するデータ項目の定義も自動生成されます。

不要な処理を削除したり,データ名を変更したりするなど,生成されたプログラムを編集して,目的のプログラムを完成させてください。

図中の(a)〜(f)の処理について説明します。なお,(d)〜(f)の処理は一つの処理につき,次に示す内容を生成します。

(a) プログラムの概要(コメント)

プログラムの概要を先頭のコメントとして記載します。記載する内容を次に示します。

項番

項目

内容(引用符(")で囲んだ文字列は固定)

1

タイトル

次の内容を記載します。

"COBOL2002 Javaプログラム呼び出し機能 クラス利用サンプルソース"

2

利用クラス

対象のクラス名を記載します。

3

cbl2kjgenのバージョン

cbl2kjgenのバージョンを記載します。

例:"03-02"

4

オプション

cbl2kjgenに指定されたオプションを記載します。1行につき1オプションを記載します。

5

生成日時

Javaクラス利用サンプルの生成日時を記載します。

形式はYYYY/mm/dd HH:MM:SSです。

(b) 見出し部

プログラム名に"*SAMPLE*"を指定します。

注※

"*SAMPLE*"はCOBOLで使用できないプログラム名です。コンパイルするために,プログラム名を変更してください。

(c) 環境部

動的長基本項目を使用するため,次に示すように構成節を記載します。

[図データ]

(d) データ部

作業場所節に次に示す順番でデータ項目を定義します。ただし,Javaクラス利用サンプル中で使用しないデータ項目は定義しません。

  1. CBLJENV集団項目

  2. クラス参照とオブジェクト参照

  3. クラス名,フィールド名,およびメソッド名

  4. パラメタ

  5. 引数リスト

  6. String⇔英数字項目変換領域

  7. 配列オブジェクト⇔可変長繰り返し項目変換領域

各データ項目について説明します。

  1. CBLJENV集団項目

    CBLJENV集団項目を定義します。CBLJOPTION-1には初期値として'Java VMオプション文字列'が設定されています。この値をJava VMに渡すオプション文字列(例:'-Djava.class.path=java')に変更する必要があります。CBLJENV集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(1) CBLJENV集団項目」を参照してください。

    [図データ]

  2. クラス参照とオブジェクト参照

    クラス参照とオブジェクト参照を定義します。クラス参照とオブジェクト参照は1クラスにつき一つずつ定義します。

    [図データ]

  3. クラス名,フィールド名,およびメソッド名

    クラス名,フィールド名,およびメソッド名を設定する英数字の動的長基本項目を定義します。初期値には該当するクラス名,フィールド名またはメソッド名を設定します。

    [図データ]

  4. パラメタ

    次に示す値を設定するデータ項目を定義します。

    • フィールド

    • コンストラクタおよびメソッドに渡す各引数

    • メソッドの戻り値

    注※

    対象となるフィールドについては,「7.2.1 プログラム作成支援ツールの機能範囲」の「(1) Javaプログラムの解析」の「(a) プログラム作成支援ツールの解析対象」を参照してください。

    [図データ]

  5. 引数リスト

    Javaプログラム呼び出し機能のサービスルーチンに渡す引数リストを定義します。

    [図データ]

    コンストラクタおよびメソッドに引数が一つ以上ある場合は,ARG-LISTを使用します。ARGPTRはクラス内のコンストラクタおよびメソッドが持つ引数の最大個数+1個を定義します。

    コンストラクタおよびメソッドに引数がない場合はNO-ARGを使用します。

  6. String⇔英数字項目変換領域

    Javaプログラム呼び出し機能のサービスルーチンでStringと英数字項目の変換を行う際,変換結果を受け取るための領域として使用します。

    [図データ]

  7. 配列オブジェクト⇔可変長繰り返し項目変換領域

    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.
注※
メソッド(コンストラクタ,クラスメソッド,インスタンスメソッド)に関するデータ項目

メソッド(コンストラクタ,クラスメソッド,インスタンスメソッド)に関するデータ項目を次に示します。

項番

用途

データ項目

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.
注※
フィールド(クラスフィールド,インスタンスフィールド)に関するデータ項目

フィールド(クラスフィールド,インスタンスフィールド)に関するデータ項目を次に示します。

項番

用途

データ項目

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クラス利用サンプルは,そのままコンパイルして使用できません。少なくとも次の項目を修正する必要があります。

Javaクラス利用サンプルの例を次に示します。

コマンド
cbl2kjgen -Type Sample -StrMaxLen 256 -Class mylib.sample.SampleClass
mylib¥sample¥SampleClass.javaの内容

[図データ]

mylib.sample.SampleClass.cblの内容

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]