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

手引・操作書

4010-1J-807

前書き

対象製品

P-2636-2354 COBOL2002 Net Developer 05-00（適用OS：Windows 10(x64)，Windows 11，Windows Server 2019，Windows Server 2022）

P-2436-5354 COBOL2002 Net Server Runtime 05-00（適用OS：Windows Server 2019，Windows Server 2022）

P-2636-3354 COBOL2002 Net Client Runtime 05-00（適用OS：Windows 10(x64)，Windows 11）

P-2436-6354 COBOL2002 Net Server Suite 05-00（適用OS：Windows Server 2019，Windows Server 2022）

P-2636-4354 COBOL2002 Net Client Suite 05-00（適用OS：Windows 10(x64)，Windows 11）

P-2936-2354 COBOL2002 Net Developer(64) 05-00（適用OS：Windows 10(x64)，Windows 11，Windows Server 2019，Windows Server 2022）

P-2936-5354 COBOL2002 Net Server Runtime(64) 05-00（適用OS：Windows Server 2019，Windows Server 2022）

P-2936-6354 COBOL2002 Net Server Suite(64) 05-00（適用OS：Windows Server 2019，Windows Server 2022）

P-2636-7354 COBOL2002 Developer Professional 05-00（適用OS：Windows 10(x64)，Windows 11，Windows Server 2019，Windows Server 2022）

P-2936-7354 COBOL2002 Developer Professional(64) 05-00（適用OS：Windows 10(x64)，Windows 11，Windows Server 2019，Windows Server 2022）

これらのプログラムプロダクトのほかにもこのマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。

輸出時の注意

本製品を輸出される場合には、外国為替及び外国貿易法の規制並びに米国輸出管理規則など外国の輸出関連法規をご確認の上、必要な手続きをお取りください。

なお、不明な場合は、弊社担当営業にお問い合わせください。

商標類

記載の会社名，製品名などは，それぞれの会社の商標もしくは登録商標です。

発行

2025年2月　4010-1J-807

著作権

All Rights Reserved. Copyright (C) 2025, Hitachi, Ltd.

はじめに

このマニュアルは，次のプログラムプロダクトの機能，およびプログラムの作成方法について説明したものです。

P-2636-2354 COBOL2002 Net Developer

P-2436-5354 COBOL2002 Net Server Runtime

P-2636-3354 COBOL2002 Net Client Runtime

P-2436-6354 COBOL2002 Net Server Suite

P-2636-4354 COBOL2002 Net Client Suite

P-2936-2354 COBOL2002 Net Developer(64)

P-2936-5354 COBOL2002 Net Server Runtime(64)

P-2936-6354 COBOL2002 Net Server Suite(64)

P-2636-7354 COBOL2002 Developer Professional

P-2936-7354 COBOL2002 Developer Professional(64)

前提ソフトウェアの詳細については，「リリースノート」を参照してください。

対象読者

Java言語とCOBOL言語について基本的な知識を持っていて，両言語の通信を簡単に実現したい方を対象としています。

このマニュアルで使用する記号

このマニュアルで使用する記号を次に示します。

記号

意味

｛　｝

この記号で囲まれている複数の項目のうちから一つを選択することを意味する。項目が縦に複数行にわたって記述されている場合は，そのうちの1行分を選択する。

｛　｝＋

この記号で囲まれている複数の項目のうちから一つ以上を選択することを意味する。複数指定でき，同じ要素の繰り返しでも指定できる。例えば，｛A｜B｜C｝＋と表記されている場合は，A・B・Cをすべて選択できる。

〔　〕

この記号で囲まれている項目は省略してもよいことを意味する。

複数の項目が縦または横に並べて記述されている場合には，すべてを省略するか，記号｛　｝と同じく，どれか一つを選択する。

…

記述が省略されていることを意味する。

この記号の直前に示された項目を繰り返して複数個指定できる。

下線

括弧で囲まれた複数の項目のうち1項目に対して使用され，括弧内のすべてを省略したときにシステムがとる標準値を意味する。

｜

横に並べられた複数の項目に対して項目間の区切りを示し，「または」を意味する。

斜体文字

ユーザが値を指定することを意味する。

斜体文字と下線

Javaプログラム呼び出し機能のプログラム作成支援ツールが決定する値を意味する。

1　Javaプログラム呼び出し機能の概要

この章では，COBOLで作成したユーザアプリケーションプログラム（以降，UAPと表記します）からJavaプログラムを使用する場合のJavaプログラム呼び出し機能の特長と構成について説明します。

1.1　Javaプログラム呼び出し機能とは

Javaプログラム呼び出し機能では，JNI（Java Native Interface）を使って，同一プロセスでJavaのオブジェクトのフィールド（変数）にアクセスしたり，Javaのメソッドを呼び出したりするためのCOBOLプログラム向けのサービスルーチンを提供します。

Javaプログラム呼び出し機能のサービスルーチンの特長を次に示します。

CALL文でのJavaプログラムの呼び出しができます。

JavaクラスおよびJavaインスタンスオブジェクトを使用または操作するためのサービスルーチンを提供します。

Javaの高速な実行が期待できます。

COBOLプログラムと同一プロセス内でのJavaクラスの使用または操作を実装します。

COBOLプログラムで使用する文字列とJavaのStringクラスのデータ変換を容易にします。

また，Javaプログラム呼び出し機能を使用するCOBOLプログラムの作成を容易にするツール（プログラム作成支援ツール）を提供します。プログラム作成支援ツールはCOBOL2002 Developer Professionalでだけ使用できます。

32bit版 COBOL2002で作成したCOBOLプログラムからは32bit Javaプログラムだけを，64bit版 COBOL2002で作成したCOBOLプログラムからは64bit Javaプログラムだけを呼び出せます。

注意事項

Javaプログラム呼び出し機能を使用して呼び出したJavaプログラムから，同じスレッド内でCOBOLプログラムを呼び出すことはできません。COBOLプログラムを別プロセスで呼び出すなどの対処をしてください。

1.2　Javaプログラム呼び出し機能の使用例

Javaプログラム呼び出し機能の使用例を説明します。

1.2.1　Java標準ライブラリやJavaインタフェースのパッケージをプログラム部品として使用する

Javaプログラム呼び出し機能を使用すると，Java標準ライブラリやJavaインタフェースのパッケージをプログラム部品として使用できます。

COBOLプログラムから豊富なJavaの部品を使用できます。また，Javaで開発したプログラムをCOBOLプログラムから呼び出すこともできます。

Javaのパッケージをプログラム部品として使用する例を次の図に示します。

図1‒1　Javaのパッケージをプログラム部品として使用する例

1.2.2　Webサービスなどと通信するJavaクライアント部品を呼び出す

Javaプログラム呼び出し機能を使用すると，Webサービスなどと通信するJavaクライアント部品を呼び出すことができます。

COBOLで作成したバッチアプリケーションなどから，Javaで作成されたWebサービスを使用できます。

Webサービスなどと通信するJavaクライアント部品を呼び出す例を次の図に示します。

図1‒2　Webサービスなどと通信するJavaクライアント部品を呼び出す例

1.2.3　Cosminexus連携機能から呼び出したCOBOLプログラムからJavaプログラム部品を呼び出す

Cosminexus連携機能を使用して，JavaプログラムからCOBOLプログラムを呼び出すことができます。さらに，Javaプログラム呼び出し機能を使用して，Javaプログラムから呼び出されたCOBOLプログラムからJavaプログラム部品を呼び出せます。

Cosminexus連携機能から呼び出したCOBOLプログラムからJavaプログラム部品を呼び出す例を次の図に示します。

図1‒3　Cosminexus連携機能から呼び出したCOBOLプログラムからJavaプログラム部品を呼び出す例

2　環境設定

この章では，Javaプログラム呼び出し機能を使用するための環境設定について説明します。

2.1　前提ソフトウェア

Javaプログラム呼び出し機能を使用するには，次に示すソフトウェアで提供されるJDKが必要です。

Cosminexus

Oracle Java SE

注意事項

Cosminexusの実行環境製品で提供されるJDKをCosminexus環境下のアプリケーションとは別プロセスで使用する場合は，Cosminexusのオプション製品であるuCosminexus スタンドアロンプログラム実行機能を購入してください。

Javaプログラム呼び出し機能は，CosminexusおよびOracle社JavaのJDKに対応しています。CosminexusまたはOracle社JavaのJDKを使用するように，Javaの環境を設定してください。

このマニュアルでは，特に記載しないかぎり，Cosminexusで提供されるJDKを前提として説明します。

2.2　JNIの使用を制限しているときの注意事項

COBOLプログラムを呼び出すソフトウェアや使用するライブラリで，JNIの使用を制限している場合，Javaプログラム呼び出し機能を使用できません。

使用するソフトウェアおよびライブラリで，JNIの使用を制限していないことを確認してください。

2.3　実行時に設定が必要な環境変数

Javaプログラム呼び出し機能を使用する場合に，あらかじめ設定を検討する必要がある環境変数を次に示します。

CBLJRTERR

実行時エラー情報ファイルの出力有無，および実行時エラー情報の出力先フォルダのパス名を指定します。

実行時エラー情報ファイルについては，「5.3　実行時エラー情報の出力」を参照してください。

環境変数CBLJRTERRについては，「6.2.2　実行時環境変数の詳細」の「(4)　CBLJRTERR」を参照してください。

CBLJRTVMDEFAULTOPTIONS

デフォルトのJava VM起動オプションを指定します。

Java VM起動オプションについては，「4.2.2　Java VM起動オプション」を参照してください。

環境変数CBLJRTVMDEFAULTOPTIONSについては，「6.2.2　実行時環境変数の詳細」の「(5)　CBLJRTVMDEFAULTOPTIONS」を参照してください。

CBLJRTVMOPTLOG

Java VM起動オプション情報の出力先を変更する場合に，出力先フォルダのパス名を指定します。

Java VM起動オプション情報については，「5.4　Java VM起動オプション情報の収集」を参照してください。

環境変数CBLJRTVMOPTLOGについては，「6.2.2　実行時環境変数の詳細」の「(7)　CBLJRTVMOPTLOG」を参照してください。

CBLJRTVMOPTLOG_MAXSIZE

Java VM起動オプション情報の出力先ファイルの最大サイズを指定します。

Java VM起動オプション情報については，「5.4　Java VM起動オプション情報の収集」を参照してください。

環境変数CBLJRTVMOPTLOG_MAXSIZEについては，「6.2.2　実行時環境変数の詳細」の「(8)　CBLJRTVMOPTLOG_MAXSIZE」を参照してください。

上記以外の実行時環境変数については，「6.2　実行時環境変数」を参照してください。

COBOL2002の実行時環境変数については，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

2.4　日立以外のJava VMを使用する場合の起動オプション

Javaプログラム呼び出し機能を使用する場合，プロセス単位にJava VMを起動する必要があります。

プロセス実行時にJava VMが起動していない場合，Javaプログラム呼び出し機能がJava VMを起動します。デフォルトの起動オプションは，Cosminexus製品に含まれる日立製Java VM固有の拡張オプションです。そのため，日立製以外のJava VMを使用する場合は，環境変数CBLJRTVMDEFAULTOPTIONSを使用してデフォルトの起動オプションを取り消す必要があります。

環境変数CBLJRTVMDEFAULTOPTIONSについては，「6.2.2　実行時環境変数の詳細」の「(5)　CBLJRTVMDEFAULTOPTIONS」を参照してください。

なお，Java VMの起動オプションには，障害発生時の調査のために，使用するJava VMが提供する詳細情報取得用のオプションを指定することをお勧めします。

Java VM起動オプションについては，「4.2.2　Java VM起動オプション」を参照してください。

3　Javaプログラムを使用するCOBOLプログラムの開発

この章では，Javaプログラム呼び出し機能を使用してCOBOLのUAPを開発する手順について説明します。

3.1　処理の流れ

Javaプログラム呼び出し機能を使用するCOBOLプログラムの処理の流れを次の図に示します。

図3‒1　Javaプログラム呼び出し機能を使用するCOBOLプログラムの処理の流れ

Javaプログラム呼び出し機能の実行環境の初期化については，「クラス参照の取得」で自動的に行われるため，明示的な初期化は不要です。

Javaプログラム呼び出し機能の実行環境の終了処理については，すべてのJavaクラスの操作が終わったあとで実行してください。

3.2　プログラムの作成

ここでは，Javaプログラム呼び出し機能を使用したCOBOLプログラムの各処理のコーディングや，コーディング時の注意事項について説明します。

3.2.1　Javaクラス操作のコーディング

ここでは，次に示すJavaプログラムを操作するCOBOLプログラムについて説明します。

Javaプログラムのソースファイル例

public class SampleClass {
   public static String SampleStaticField;
   public           int SampleField;
   public static   void SampleStaticMethod( int a, double b ) { ... }
   public           int SampleMethod( String a ) { ... }
}

COBOLプログラムのソースファイル例

       IDENTIFICATION        DIVISION.
       PROGRAM-ID.           MAIN.
       ENVIRONMENT           DIVISION.
       CONFIGURATION         SECTION.
       SPECIAL-NAMES.
       DYNAMIC LENGTH STRUCTURE C-STRING IS C-STATIC-STRUCTURE.
       DATA                  DIVISION.
       WORKING-STORAGE       SECTION.
      *>---------------------------------------------------------------
      *> CBLJENV集団項目の定義
      *>---------------------------------------------------------------
       01  CBLJENV.
         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 256.
         02  CBLJVMOPTIONS.
           03  CBLJOPTCOUNT  PIC S9(9) USAGE COMP VALUE 1.
           03  CBLJOPTION-1  PIC X(256) VALUE '-Djava.class.path=java'.
      *>---------------------------------------------------------------
      *> クラス名，フィールド名，メソッド名の定義
      *>---------------------------------------------------------------
       01  SampleClass        PIC X DYNAMIC C-STRING
                              VALUE 'SampleClass'.
       01  SampleStaticField  PIC X DYNAMIC C-STRING
                              VALUE 'SampleStaticField'.
       01  SampleField        PIC X DYNAMIC C-STRING
                              VALUE 'SampleField'.
       01  SampleStaticMethod PIC X DYNAMIC C-STRING
                              VALUE 'SampleStaticMethod'.
       01  SampleMethod       PIC X DYNAMIC C-STRING
                              VALUE 'SampleMethod'.
      *>---------------------------------------------------------------
      *> クラス参照・オブジェクト参照の定義
      *>---------------------------------------------------------------
       01  CLASSREF          USAGE POINTER.
       01  OBJREF            USAGE POINTER.
      *>---------------------------------------------------------------
      *> 引数リストの定義 (NO-ARGは引数なしメソッド用の引数リスト)
      *>---------------------------------------------------------------
       01  NO-ARG.
         02  FILLER          USAGE POINTER VALUE NULL.
       01  ARG-LIST.
         02  ARGPTR          USAGE POINTER OCCURS 3 TIMES.
      *>---------------------------------------------------------------
      *> パラメタ領域の定義(RTN-VOIDはvoid型メソッド用の返却項目指定)
      *>---------------------------------------------------------------
       01  ARG-INT.
         02  ARG-INT-TYPE    PIC X(1) VALUE 'I'.
         02  FILLER          PIC X(7) VALUE ALL LOW-VALUE.
         02  ARG-INT-AREA    PIC S9(9) USAGE COMP.
       01  ARG-DOUBLE.
         02  ARG-DBL-TYPE    PIC X(1) VALUE 'D'.
         02  FILLER          PIC X(7) VALUE ALL LOW-VALUE.
         02  ARG-DBL-AREA    USAGE COMP-2.
       01  ARG-STRING.
         02  ARG-STR-TYPE    PIC X(256) VALUE 'Ljava/lang/String;'.
         02  ARG-STR-AREA    USAGE POINTER.
       01  RTN-VOID.
         02  RTN-TYPE        PIC X(1) VALUE 'V'.
       01  RTN-INT.
         02  RTN-INT-TYPE    PIC X(1) VALUE 'I'.
         02  FILLER          PIC X(7) VALUE ALL LOW-VALUE.
         02  RTN-INT-AREA    PIC S9(9) USAGE COMP.
       01  RTN-STRING.
         02  RTN-STR-TYPE    PIC X(256) VALUE 'Ljava/lang/String;'.
         02  RTN-STR-AREA    USAGE POINTER.
      *>---------------------------------------------------------------
      *> 作業領域
      *>---------------------------------------------------------------
       01  WK-STRING-LEN     PIC S9(9) USAGE COMP VALUE 256.
       01  WK-STRING         PIC X(256).

       PROCEDURE DIVISION.

      *> JavaのSampleClassクラスのクラス参照を取得する

           CALL 'CBLJGETCLASS' USING CBLJENV SampleClass CLASSREF.

      *> Javaのクラスフィールド(SampleStaticField)に値を設定する

           MOVE  'HITACHI' TO WK-STRING.
           CALL 'CBLJXTOSTRING' USING CBLJENV
                   WK-STRING  WK-STRING-LEN  ARG-STR-AREA.

           CALL 'CBLJSETSTATICFIELD' USING CBLJENV
                   CLASSREF SampleStaticField ARG-STRING.

      *> Javaのクラスフィールド(SampleStaticField)から値を取り出す

           CALL 'CBLJGETSTATICFIELD' USING CBLJENV
                   CLASSREF SampleStaticField RTN-STRING.

      *> Javaのクラスメソッド(SampleStaticMethod)を呼び出す

           COMPUTE ARG-INT-AREA = 10.
           COMPUTE ARG-DBL-AREA = 3.14.
           COMPUTE ARGPTR(1) = FUNCTION ADDR( ARG-INT ).
           COMPUTE ARGPTR(2) = FUNCTION ADDR( ARG-DOUBLE ).
           COMPUTE ARGPTR(3) = ZERO.
           CALL 'CBLJSTATICINVOKE' USING CBLJENV
                   CLASSREF SampleStaticMethod ARG-LIST  RTN-VOID.

      *> Javaのインスタンスを生成する

           CALL 'CBLJNEW' USING CBLJENV CLASSREF NO-ARG  OBJREF.

      *> Javaのインスタンスフィールド(SampleField)に値を設定する

           MOVE  100 TO ARG-INT-AREA.
           CALL 'CBLJSETFIELD' USING CBLJENV
                   OBJREF SampleField  ARG-INT.

      *> Javaのインスタンスフィールド(SampleField)から値を取り出す

           CALL 'CBLJGETFIELD' USING CBLJENV
                   OBJREF SampleField  RTN-INT.

      *> Javaのインスタンスメソッド(SampleMethod)を呼び出す

           COMPUTE ARG-STR-AREA = RTN-STR-AREA.
           COMPUTE ARGPTR(1) = FUNCTION ADDR( ARG-STRING ).
           COMPUTE ARGPTR(2) = ZERO.
           CALL 'CBLJINVOKE' USING CBLJENV
                   OBJREF SampleMethod ARG-LIST  RTN-INT.

      *> Javaのインスタンスを解放する

           CALL 'CBLJRELEASE'  USING CBLJENV OBJREF.

      *> Javaの実行環境を削除する

           CALL 'CBLJFINALIZE' USING CBLJENV.

       END PROGRAM MAIN.

(1)　パラメタ領域の定義

Javaプログラム呼び出し機能のサービスルーチンを使用するには，受け渡しで使用するパラメタ領域を定義する必要があります。

(a)　CBLJENV集団項目

CBLJENV集団項目には，Javaの実行環境を保持させるための領域を記述します。

Java VM起動時のパラメタは，CBLJENV集団項目に指定します。ただし，ほかのスレッドのプログラムですでにJava VMが起動されている場合は，CBLJENV集団項目のCBLJVMOPTIONS項目に指定したオプションは適用されません。また，環境変数CBLJVMOPTIONSが指定されているときは，CBLJVMOPTIONS項目の指定は無効となります。

CBLJENV集団項目のCBLJSTRMAXLEN項目には，Javaプログラム呼び出し機能のサービスルーチンに渡す固定長英数字項目の長さを指定します。CBLJVMOPTIONSやパラメタ型集団項目のDATA-TYPE項目では，CBLJSTRMAXLEN項目に指定した長さの英数字項目を指定してください。

CBLJENV集団項目の例を次に示します。

      *>---------------------------------------------------------------
      *> CBLJENV集団項目の定義
      *>---------------------------------------------------------------
       01  CBLJENV.
         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 256.
         02  CBLJVMOPTIONS.
           03  CBLJOPTCOUNT  PIC S9(9) USAGE COMP VALUE 1.
           03  CBLJOPTION-1  PIC X(256) VALUE '-Djava.class.path=java'.

（凡例）

-Djava.class.path：.classファイルの検索パスをソースプログラム中で指定する場合のオプションです。

CBLJENV集団項目は，CBLJINITIALIZEサービスルーチンが明示的または暗黙的に呼び出される前に値を設定します。CBLJINITIALIZEサービスルーチンが呼び出されたあとは変更しないでください。

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

パラメタ型集団項目については，「6.1.1　サービスルーチンで使用する引数」の「(3)　パラメタ型集団項目」を参照してください。

(b)　クラス名，フィールド名，およびメソッド名

使用するJava名称（クラス名，フィールド名，およびメソッド名）について，動的長基本項目を使用して次のように記述します。

      *>---------------------------------------------------------------
      *> クラス名，フィールド名，メソッド名の定義
      *>---------------------------------------------------------------
       01  SampleClass        PIC X DYNAMIC C-STRING VALUE 'SampleClass'.
       01  SampleStaticField  PIC X DYNAMIC C-STRING
                              VALUE 'SampleStaticField'.
       01  SampleField        PIC X DYNAMIC C-STRING
                              VALUE 'SampleField'.
       01  SampleStaticMethod PIC X DYNAMIC C-STRING
                              VALUE 'SampleStaticMethod'.
       01  SampleMethod       PIC X DYNAMIC C-STRING
                              VALUE 'SampleMethod'.

パッケージ名付きのクラス名を記述する場合は，ピリオドではなく，スラントを使って区切ります。

例）

  java/lang/String

項目名をJava名称と同じにすると，読みやすいプログラムになります。

また，動的長基本項目を使用しない従来の構文を使用した名前型集団項目を使用して定義することもできます。名前型集団項目については，「6.1.1　サービスルーチンで使用する引数」の「(2)　名前型集団項目」を参照してください。

注意事項

LIMIT句を指定しない動的長基本項目は，プログラム中で値を変更できません。

一つのデータ項目に対して，プログラム中で名称を転記して使用したい場合には，LIMIT句を指定した動的長基本項目か，名前型集団項目を定義して使用します。このとき，データ項目は使用する名称の最大長で定義する必要があります。

LIMIT句を指定した動的長基本項目を使用する場合

　　　 01　MethodName　　　　PIC X DYNAMIC C-STRING LIMIT 256.

　　　　　 MOVE 'SampleStaticMethod'　　TO MethodName.
　　　　　 CALL 'CBLJSTATICINVOKE' USING CBLJENV
　　　　　　　　　 CLASSREF MethodName ARG-LIST  RTN-VOID.

名前型集団項目を使用する場合

　　　 01  MethodName
　　　　 02　NAMESTR　　　　 PIC X(256).
　　　　 02　FILLER　　　　　PIC X　　 VALUE LOW-VALUE.

　　　　　 MOVE 'SampleStaticMethod'　　TO NAMESTR OF MethodName.
　　　　　 CALL 'CBLJSTATICINVOKE' USING CBLJENV
　　　　　　　　　 CLASSREF MethodName ARG-LIST　RTN-VOID.

(c)　引数リストおよびパラメタ領域

Javaのメソッドの呼び出しやJavaのフィールドの出し入れで使用する領域を記述します。

引数リストおよびパラメタ領域の例を次に示します。

      *>---------------------------------------------------------------
      *> 引数リストの定義 (NO-ARGは引数なしメソッド用の引数リスト)
      *>---------------------------------------------------------------
       01  NO-ARG.
         02  FILLER          USAGE POINTER VALUE NULL.
       01  ARG-LIST.
         02  ARGPTR          USAGE POINTER OCCURS 3 TIMES.
      *>---------------------------------------------------------------
      *> パラメタ領域の定義(RTN-VOIDはvoid型メソッド用の返却項目指定)
      *>---------------------------------------------------------------
       01  ARG-INT.
         02  ARG-INT-TYPE    PIC X(1) VALUE 'I'.
         02  FILLER          PIC X(7) VALUE ALL LOW-VALUE.
         02  ARG-INT-AREA    PIC S9(9) USAGE COMP.
       01  ARG-DOUBLE.
         02  ARG-DBL-TYPE    PIC X(1) VALUE 'D'.
         02  FILLER          PIC X(7) VALUE ALL LOW-VALUE.
         02  ARG-DBL-AREA    USAGE COMP-2.
       01  ARG-STRING.
         02  ARG-STR-TYPE    PIC X(256) VALUE 'Ljava/lang/String;'.
         02  ARG-STR-AREA    USAGE POINTER.
       01  RTN-VOID.
         02  RTN-TYPE        PIC X(1) VALUE 'V'.
       01  RTN-INT.
         02  RTN-INT-TYPE    PIC X(1) VALUE 'I'.
         02  FILLER          PIC X(7) VALUE ALL LOW-VALUE.
         02  RTN-INT-AREA    PIC S9(9) USAGE COMP.
       01  RTN-STRING.
         02  RTN-STR-TYPE    PIC X(256) VALUE 'Ljava/lang/String;'.
         02  RTN-STR-AREA    USAGE POINTER.

引数リスト型集団項目については，「6.1.1　サービスルーチンで使用する引数」の「(4)　引数リスト型集団項目」を参照してください。

パラメタ型集団項目については，「6.1.1　サービスルーチンで使用する引数」の「(3)　パラメタ型集団項目」を参照してください。

注意事項

引数の最大個数は16個です。

オブジェクト型を扱うARG-STR-TYPEやRTN-STR-TYPEの英数字項目のけた数は，CBLJENV集団項目のCBLJSTRMAXLEN項目に指定した値と同じにしてください。

(2)　Javaプログラム呼び出し機能の初期化

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

CBLJINITIALIZEサービスルーチンを呼び出す例を次に示します。

           CALL 'CBLJINITIALIZE' USING CBLJENV.

この例では，最初のCBLJGETCLASSサービスルーチンの呼び出し時に，このサービスルーチンが自動で呼び出されるため，明示的に呼び出していません。

CBLJINITIALIZEサービスルーチンについては，「6.1.2　基本操作」の「(1)　CBLJINITIALIZE」を参照してください。

(3)　クラス参照の取得

CBLJGETCLASSサービスルーチンを呼び出して，使用するJavaクラスを初期化し，クラス参照を取得します。

CBLJGETCLASSサービスルーチンを呼び出して，JavaのSampleClassクラスのクラス参照を取得する例を次に示します。

      *> JavaのSampleClassクラスのクラス参照を取得する

           CALL 'CBLJGETCLASS' USING CBLJENV SampleClass CLASSREF.

取得したクラス参照は次の操作で使用します。

クラスメソッドの呼び出し

クラスフィールドのアクセス

クラスのインスタンスの生成

インスタンスオブジェクトのクラスの判定

CBLJGETCLASSサービスルーチンについては，「6.1.2　基本操作」の「(2)　CBLJGETCLASS」を参照してください。

(4)　クラスフィールドのアクセス

CBLJSETSTATICFIELDサービスルーチン（設定用）またはCBLJGETSTATICFIELDサービスルーチン（取り出し用）を呼び出して，クラス参照とクラスフィールド名を使ってアクセスします。データの受け渡しの領域には，パラメタ型集団項目として定義したデータ項目を指定します。

クラスフィールドにアクセスする例を次に示します。

      *> Javaのクラスフィールド(SampleStaticField)に値を設定する

           MOVE  'HITACHI' TO WK-STRING.
           CALL 'CBLJXTOSTRING' USING CBLJENV
                   WK-STRING  WK-STRING-LEN  ARG-STR-AREA.

           CALL 'CBLJSETSTATICFIELD' USING CBLJENV
                   CLASSREF SampleStaticField  ARG-STRING.

      *> Javaのクラスフィールド(SampleStaticField)から値を取り出す

           CALL 'CBLJGETSTATICFIELD' USING CBLJENV
                   CLASSREF SampleStaticField
                   RTN-STRING.

CBLJSETSTATICFIELDサービスルーチンについては，「6.1.2　基本操作」の「(3)　CBLJSETSTATICFIELD」を参照してください。

CBLJGETSTATICFIELDサービスルーチンについては，「6.1.2　基本操作」の「(4)　CBLJGETSTATICFIELD」を参照してください。

(5)　クラスメソッドの呼び出し

CBLJSTATICINVOKEサービスルーチンを呼び出して，クラス参照とクラスメソッド名を使って呼び出します。

メソッド呼び出しの引数には引数リストを，返却値にはパラメタ型集団項目として定義したデータ項目を指定します。

クラスメソッドを呼び出す例を次に示します。

      *> Javaのクラスメソッド(SampleStaticMethod)を呼び出す

           COMPUTE ARG-INT-AREA = 10.
           COMPUTE ARG-DBL-AREA = 3.14.
           COMPUTE ARGPTR(1) = FUNCTION ADDR( ARG-INT ).
           COMPUTE ARGPTR(2) = FUNCTION ADDR( ARG-DOUBLE ).
           COMPUTE ARGPTR(3) = ZERO.
           CALL 'CBLJSTATICINVOKE' USING CBLJENV
                   CLASSREF SampleStaticMethod ARG-LIST  RTN-VOID.

注意事項

引数なしのメソッドを呼び出す場合も引数なし用の引数リスト（NO-ARG）が必要です。

void型メソッドを呼び出す場合もvoid型用パラメタ型集団項目（RTN-VOID）が必要です。

CBLJSTATICINVOKEサービスルーチンについては，「6.1.2　基本操作」の「(5)　CBLJSTATICINVOKE」を参照してください。

(6)　インスタンスの生成

CBLJNEWサービスルーチンを呼び出して，クラス参照を使ってコンストラクタでクラスインスタンスを生成し，オブジェクト参照を取得します。

コンストラクタの引数には引数リストを指定します。

インスタンスを生成する例を次に示します。

      *> Javaのインスタンスを生成する

           CALL 'CBLJNEW' USING CBLJENV CLASSREF NO-ARG  OBJREF.

注意事項

引数なしコンストラクタを呼び出す場合も引数なし用の引数リスト（NO-ARG）が必要です。

CBLJNEWサービスルーチンについては，「6.1.2　基本操作」の「(6)　CBLJNEW」を参照してください。

(7)　インスタンスフィールドのアクセス

CBLJSETFIELDサービスルーチン（設定用）またはCBLJGETFIELDサービスルーチン（取り出し用）で，オブジェクト参照およびインスタンスフィールド名を使ってアクセスします。

データの受け渡しの領域には，パラメタ型集団項目として定義したデータ項目を指定します。

インスタンスフィールドにアクセスする例を次に示します。

      *> Javaのインスタンスフィールド(SampleField)に値を設定する

           MOVE  100 TO ARG-INT-AREA.
           CALL 'CBLJSETFIELD' USING CBLJENV
                   OBJREF SampleField  ARG-INT.

      *> Javaのインスタンスフィールド(SampleField)から値を取り出す

           CALL 'CBLJGETFIELD' USING CBLJENV
                   OBJREF SampleField  RTN-INT.

CBLJSETFIELDサービスルーチンについては，「6.1.2　基本操作」の「(7)　CBLJSETFIELD」を参照してください。

(8)　インスタンスメソッドの呼び出し

CBLJINVOKEサービスルーチンで，オブジェクト参照およびインスタンスメソッド名を使って呼び出します。メソッド呼び出しの引数には引数リストを，返却値はパラメタ型集団項目として定義したデータ項目を指定します。

インスタンスメソッドを呼び出す例を次に示します。

      *> Javaのインスタンスメソッド(SampleMethod)を呼び出す

           COMPUTE ARG-STR-AREA = RTN-STR-AREA.
           COMPUTE ARGPTR(1) = FUNCTION ADDR( ARG-STRING ).
           COMPUTE ARGPTR(2) = ZERO.
           CALL 'CBLJINVOKE' USING CBLJENV
                   OBJREF SampleMethod ARG-LIST  RTN-INT.

注意事項

引数なしのメソッドを呼び出す場合も引数なし用の引数リスト（NO-ARG）が必要です。

void型メソッドを呼び出す場合もvoid型用パラメタ型集団項目（RTN-VOID）が必要です。

CBLJINVOKEサービスルーチンについては，「6.1.2　基本操作」の「(9)　CBLJINVOKE」を参照してください。

(9)　インスタンスの解放

CBLJRELEASEサービスルーチンまたはCBLJSETNULLサービスルーチンを使ってインスタンスを解放します。

不要になったインスタンスは削除しないとメモリ圧迫の原因になります。

インスタンスを解放する例を次に示します。

例1）

      *> Javaのインスタンスを解放する

           CALL 'CBLJRELEASE'  USING CBLJENV OBJREF.

例2）

      *> Javaのインスタンスを解放する

           CALL 'CBLJSETNULL'  USING CBLJENV OBJREF.

CBLJRELEASEサービスルーチンについては，「6.1.2　基本操作」の「(10)　CBLJRELEASE」を参照してください。

CBLJSETNULLサービスルーチンについては，「6.1.4　オブジェクト操作」の「(6)　CBLJSETNULL」を参照してください。

(10)　Javaプログラム呼び出し機能の実行環境の終了処理

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

Javaの実行環境は多くのシステムリソースを必要としますので，不要になったら削除する必要があります。

Javaプログラム呼び出し機能の実行環境の終了例を次に示します。

      *> Javaの実行環境を削除する

           CALL 'CBLJFINALIZE' USING CBLJENV.

CBLJFINALIZEサービスルーチンについては，「6.1.2　基本操作」の「(11)　CBLJFINALIZE」を参照してください。

3.2.2　文字列操作のコーディング

COBOLプログラムとJavaプログラムでは，文字列データとして内部的に処理する文字コードが異なります。また，Javaプログラムの引数に直接COBOLの英数字項目や日本語項目を指定することはできません。これらの文字列操作のために次の機能が用意されています。

英数字項目／日本語項目からJavaに渡すStringオブジェクト※を生成する機能

Javaから受け取ったStringオブジェクト※を英数字項目／日本語項目の値に変換する機能

注※

java.lang.Stringクラスのオブジェクトです。内部的な文字コードはUTF-16です。

(1)　Javaプログラム呼び出し機能で使用する文字コード

Javaプログラム呼び出し機能を使用する場合，COBOLプログラムで使用できる文字コードは，COBOL2002で使用する文字コードと同じです。Unicode機能を使用してCOBOLが扱うデータをUnicodeとして扱うこともできます。取り扱う文字コードとUnicode機能については，マニュアル「COBOL2002　ユーザーズガイド」のUnicode機能の説明を参照してください。

Unicode機能と同時に使用する場合，UCS-4の範囲（UCS-2の範囲を含む）のUnicode文字を使用できます。

(2)　英数字項目／日本語項目からJavaに渡すStringオブジェクトを生成する機能

次に示すサービスルーチンが用意されています。

CBLJXTOSTRINGサービスルーチン

英数字項目の値からStringオブジェクトを生成する。

CBLJNTOSTRINGサービスルーチン

日本語項目の値からStringオブジェクトを生成する。

英数字項目／日本語項目からStringオブジェクトを生成する例を次に示します。

       01 X-ITEM     PIC X(256).
       01 X-ITEM-LEN PIC S9(9) USAGE COMP VALUE 256.
       01 N-ITEM     PIC N(256).
       01 N-ITEM-LEN PIC S9(9) USAGE COMP VALUE 256.
       01 X-STROBJ   USAGE POINTER.
       01 N-STROBJ   USAGE POINTER.

      *> 英数字項目からStringオブジェクトを生成する。
           MOVE '日立製作所' TO X-ITEM.
           CALL 'CBLJXTOSTRING' USING CBLJENV
                                      X-ITEM X-ITEM-LEN X-STROBJ.

      *> 日本語項目からStringオブジェクトを生成する。
           MOVE N'日立製作所' TO N-ITEM.
           CALL 'CBLJNTOSTRING' USING CBLJENV
                                      N-ITEM N-ITEM-LEN N-STROBJ.

CBLJXTOSTRINGサービスルーチンについては，「6.1.5　文字列オブジェクト操作」の「(1)　CBLJXTOSTRING」を参照してください。

CBLJNTOSTRINGサービスルーチンについては，「6.1.5　文字列オブジェクト操作」の「(2)　CBLJNTOSTRING」を参照してください。

(3)　Javaから受け取ったStringオブジェクトを英数字項目／日本語項目の値に変換する機能

次に示すサービスルーチンが用意されています。

CBLJSTRINGTOXサービスルーチン

Stringオブジェクトの文字列をCOBOLで使用する文字コードに変換して，英数字項目に格納する。

CBLJSTRINGTONサービスルーチン

Stringオブジェクトの文字列をCOBOLで使用する文字コードに変換して，日本語項目に格納する（Unicode機能と同時に使用する場合は，データを変換しない）。

注意事項

CBLJSTRINGTONサービスルーチンを呼び出してStringオブジェクトの文字列を変換するとき，変換後に1バイトになる文字が含まれないようにしてください。1バイトになる文字が含まれている場合の動作は保証されません。

Stringオブジェクトを英数字項目／日本語項目の値に変換して格納する例を次に示します。

       01 X-STROBJ   USAGE POINTER.
       01 X-ITEM     PIC X(256).
       01 X-ITEM-LEN PIC S9(9) USAGE COMP VALUE 256.
       01 N-STROBJ   USAGE POINTER.
       01 N-ITEM     PIC N(256).
       01 N-ITEM-LEN PIC S9(9) USAGE COMP VALUE 256.

      *> Stringオブジェクトの文字列を英数字項目に格納する。
           CALL 'CBLJSTRINGTOX' USING CBLJENV STROBJ X-ITEM X-ITEM-LEN.

      *> Stringオブジェクトの文字列を日本語項目に格納する。
           CALL 'CBLJSTRINGTON' USING CBLJENV STROBJ N-ITEM N-ITEM-LEN.

Stringオブジェクトは，CBLJINVOKEサービスルーチンを使ってStringオブジェクトのメソッドを呼び出すことで，直接操作することもできます。

CBLJSTRINGTOXサービスルーチンについては，「6.1.5　文字列オブジェクト操作」の「(3)　CBLJSTRINGTOX」を参照してください。

CBLJSTRINGTONサービスルーチンについては，「6.1.5　文字列オブジェクト操作」の「(4)　CBLJSTRINGTON」を参照してください。

3.2.3　配列操作のコーディング

Javaコンポーネントの配列オブジェクトを操作する手順を説明します。

(1)　配列オブジェクトの構成と生成のコーディング

Javaの配列オブジェクトの持つ配列は1次元配列だけです。多次元配列は，オブジェクト型の配列オブジェクトと，基本型またはオブジェクト型の配列オブジェクトとの組み合わせで表現されます。多次元配列については，「(4)　多次元配列を構成する配列オブジェクトの生成と操作のコーディング」を参照してください。

1次元配列について次に示します。

配列オブジェクトを生成する例を次に示します。

       01 INT-ARRAY-TYPE  PIC X(256) VALUE '[I'.
       01 INT-ARRAY-LEN   PIC S9(9) USAGE COMP VALUE 10.
       01 INT-ARRAYOBJ    USAGE POINTER.
       01 STR-ARRAY-TYPE  PIC X(256) VALUE '[Ljava/lang/String;'.
       01 STR-ARRAY-LEN   PIC S9(9) USAGE COMP VALUE 20.
       01 STR-ARRAYOBJ    USAGE POINTER.

      *> int型の配列オブジェクトを生成する。
           CALL 'CBLJNEWARRAY' USING CBLJENV INT-ARRAY-TYPE
                                             INT-ARRAY-LEN
                                             INT-ARRAYOBJ.

      *> String型の配列オブジェクトを生成する。
           CALL 'CBLJNEWARRAY' USING CBLJENV STR-ARRAY-TYPE
                                             STR-ARRAY-LEN
                                             STR-ARRAYOBJ.

(2)　基本型の配列オブジェクト操作のコーディング

基本型の配列オブジェクトを操作する場合，いったん配列を配列オブジェクトから取り出して操作し，操作終了後に配列オブジェクトに戻す手順になります。

配列オブジェクトから配列を出し入れするために，CBLJGETARRAYADDRサービスルーチンとCBLJRELEASEARRAYサービスルーチンが用意されています。

基本型の配列オブジェクトを操作する例を次に示します。

       01 ARRAYOBJ USAGE POINTER.
       01 ARRAYLEN PIC S9(9)  USAGE COMP.
       01 ARRAYADR USAGE POINTER.
       01 INTARRAY ADDRESSED BY P.
         02 ELEMENTS PIC S9(9) USAGE COMP
                     OCCURS m TIMES DEPENDING ON ARRAYLEN.

      *> 配列オブジェクトから配列アドレスを取り出し，
      *> 反復項目にマッピングする
           CALL 'CBLJGETARRAYADDR' USING CBLJENV ARRAYOBJ ARRAYADR.
           CALL 'CBLJARRAYLENGTH'  USING CBLJENV ARRAYOBJ ARRAYLEN.
           COMPUTE P = ARRAYADR.
      *> 配列の3番目の要素の参照
           DISPLAY ELEMENTS(3).
      *> 配列の3番目の要素の更新
           MOVE 100 TO ELEMENTS(3).
      *> 配列要素の配列オブジェクトへの書き戻し
           CALL 'CBLJRELEASEARRAY' USING CBLJENV ARRAYOBJ ARRAYADR.

反復回数（m）には想定される配列要素数の上限を指定してください。

注意事項

INTARRAYによる集団項目操作はしないでください。OCCURS句で指定した反復回数が配列オブジェクトの要素数を超える場合，不当領域参照の要因になります。

Javaの配列オブジェクトでは要素の添字が0から始まりますが，COBOLの繰り返し項目では要素の添字は1から指定します。添字nで参照する基本型配列オブジェクトの要素を，COBOLの繰り返し項目で参照する場合は添字n＋1で参照します。

CBLJGETARRAYADDRサービスルーチンについては，「6.1.6　配列オブジェクト操作」の「(5)　CBLJGETARRAYADDR」を参照してください。

CBLJRELEASEARRAYサービスルーチンについては，「6.1.6　配列オブジェクト操作」の「(6)　CBLJRELEASEARRAY」を参照してください。

(3)　オブジェクト型の配列オブジェクト操作のコーディング

オブジェクト型の配列オブジェクトの場合，CBLJSETOBJARRAYサービスルーチン（格納用）とCBLJGETOBJARRAYサービスルーチン（取出用）を使って要素のオブジェクトの出し入れをします。

オブジェクト型の配列オブジェクトを操作する例を次に示します。

      *> 配列オブジェクトのJavaオブジェクト参照
       01 ARRAYOBJ USAGE POINTER.
      *> 要素のJavaオブジェクト参照
       01 ELEMENT  USAGE POINTER.
      *> 要素の添字
       01 IDX      PIC S9(9) USAGE COMP.

      *> オブジェクト型の配列オブジェクトから3番目の要素（オブジェクト）を取り出す。
           MOVE 2 TO IDX.
           CALL 'CBLJGETOBJARRAY' USING CBLJENV ARRAYOBJ IDX ELEMENT.

      *> オブジェクト型の配列オブジェクトに3番目の要素（オブジェクト）を格納する。
           MOVE 2 TO IDX.
           CALL 'CBLJSETOBJARRAY' USING CBLJENV ARRAYOBJ IDX ELEMENT.

注意事項

Javaの配列オブジェクトでは要素の添字が0から始まります。

CBLJSETOBJARRAYサービスルーチンについては，「6.1.6　配列オブジェクト操作」の「(3)　CBLJSETOBJARRAY」を参照してください。

CBLJGETOBJARRAYサービスルーチンについては，「6.1.6　配列オブジェクト操作」の「(4)　CBLJGETOBJARRAY」を参照してください。

(4)　多次元配列を構成する配列オブジェクトの生成と操作のコーディング

多次元配列は，オブジェクト型の配列オブジェクトと，基本型またはオブジェクト型の配列オブジェクト（最下位次元だけ）との組み合わせで表現されます。

基本型の2次元配列について次に示します。

int型の3×4の2次元配列を生成する例を次に示します。

       01 D1-ARRAY-TYPE  PIC X(256) VALUE '[[I'.
       01 D1-ARRAYOBJ    USAGE POINTER.
       01 D1-ARRAYLEN    PIC S9(9)  USAGE COMP VALUE 3.
       01 D2-ARRAY-TYPE  PIC X(256) VALUE '[I'.
       01 D2-ARRAYOBJ    USAGE POINTER.
       01 D2-ARRAYLEN    PIC S9(9)  USAGE COMP VALUE 4.
       01 I              PIC S9(9)  USAGE COMP.
      *> 1次元の配列オブジェクトを生成する。
           CALL 'CBLJNEWARRAY' USING CBLJENV D1-ARRAY-TYPE D1-ARRAYLEN
                                             D1-ARRAYOBJ.
           PERFORM VARYING I FROM 0 BY 1 UNTIL I > D1-ARRAYLEN - 1
      *> 2次元の配列オブジェクトを生成する。
             CALL 'CBLJNEWARRAY'    USING CBLJENV D2-ARRAY-TYPE
                                                  D2-ARRAYLEN
                                                  D2-ARRAYOBJ
             CALL 'CBLJSETOBJARRAY' USING CBLJENV D1-ARRAYOBJ
                                                  I
                                                  D2-ARRAYOBJ
           END-PERFORM.

int型の2×3×4の3次元配列の要素の値を合計する例を次に示します。

      *> 1次元目の配列オブジェクト参照用ワーク
       01 D1-ARRAYOBJ    USAGE POINTER.
       01 LEN-1          PIC S9(9) USAGE COMP.
      *> 2次元目の配列オブジェクト参照用ワーク
       01 D2-ARRAYOBJ    USAGE POINTER.
       01 LEN-2          PIC S9(9) USAGE COMP.
      *> 3次元目の配列オブジェクト参照用ワーク
       01 D3-ARRAYOBJ    USAGE POINTER.
       01 LEN-3          PIC S9(9) USAGE COMP.
      *> 配列オブジェクト参照用ワーク
       01 ARRAYADDR      USAGE POINTER.
       01 ARRAYLEN       PIC S9(9)  USAGE COMP.
       01 INTARRAY       ADDRESSED BY P.
         02 ELEMENTS     PIC S9(9) USAGE COMP
                         OCCURS 24 TIMES DEPENDING ON ARRAYLEN.
       01 I              PIC S9(9) USAGE COMP.
       01 J              PIC S9(9) USAGE COMP.
       01 K              PIC S9(9) USAGE COMP.
       01 TOTAL          PIC S9(9) USAGE COMP.

           MOVE 0 TO TOTAL.
           CALL 'CBLJARRAYLENGTH'  USING CBLJENV D1-ARRAYOBJ LEN-1

           PERFORM VARYING I FROM 0 BY 1 UNTIL I > LEN-1 - 1

      *> 1次元の配列オブジェクトから2次元の配列オブジェクトを取り出す。
             CALL 'CBLJGETOBJARRAY'  USING CBLJENV
                                        D1-ARRAYOBJ I D2-ARRAYOBJ
             CALL 'CBLJARRAYLENGTH'  USING CBLJENV D2-ARRAYOBJ LEN-2

             PERFORM VARYING J FROM 0 BY 1 UNTIL J > LEN-2 - 1

      *> 2次元の配列オブジェクトから3次元の配列オブジェクトを取り出す。
               CALL 'CBLJGETOBJARRAY'  USING CBLJENV
                                          D2-ARRAYOBJ J D3-ARRAYOBJ
               CALL 'CBLJARRAYLENGTH'  USING CBLJENV D3-ARRAYOBJ LEN-3

      *> 3次元の配列オブジェクトから基本型の配列を取り出す。
               CALL 'CBLJGETARRAYADDR' USING CBLJENV
                                           D3-ARRAYOBJ ARRAYADDR
      *> 基本型の配列をCOBOLの反復項目にマッピングする。
               COMPUTE P = ARRAYADDR

      *> 基本型の配列の要素の値を加算する。（COBOLでの添字は1から）
               PERFORM VARYING K FROM 1 BY 1 UNTIL K > LEN-3
                 COMPUTE TOTAL = TOTAL + ELEMENTS(K)
               END-PERFORM

      *> 基本型の配列をオブジェクト参照に反映させて解放する。
               CALL 'CBLJRELEASEARRAY' USING CBLJENV
                                          D3-ARRAYOBJ ARRAYADDR

      *> 取り出した3次元の配列オブジェクトのオブジェクト参照を解放する。
               CALL 'CBLJRELEASE'      USING CBLJENV D3-ARRAYOBJ

             END-PERFORM

      *> 取り出した2次元の配列オブジェクトのオブジェクト参照を解放する。
             CALL 'CBLJRELEASE'      USING CBLJENV D2-ARRAYOBJ

           END-PERFORM.

      *> 結果を表示する。
           DISPLAY 'TOTAL=' TOTAL.

注意事項

Javaの配列オブジェクトでは要素の添字が0から始まりますが，COBOLの繰り返し項目では要素の添字は1から指定します。添字nで参照する基本型配列オブジェクトの要素を，COBOLの繰り返し項目で参照する場合は添字n＋1で参照します。

配列オブジェクトから取り出した配列オブジェクトのオブジェクト参照は必ず解放する必要があります。ただし，CBLJGETOBJARRAYサービスルーチン呼び出しの受け取り項目に指定されている場合，格納されていた配列オブジェクトのオブジェクト参照は自動的に解放されます。

3.2.4　例外処理のコーディング

ここでは，サービスルーチンで検知するJava例外とサービスルーチンで検知しないJava例外について説明します。

(1)　サービスルーチンで検知するJava例外の処理

次のサービスルーチンでは，Javaプログラムから例外がスローされたことで，サービスルーチンの呼び出しが失敗で終了することがあります。

CBLJSTATICINVOKEサービスルーチン

CBLJNEWサービスルーチン

CBLJINVOKEサービスルーチン

Javaプログラムから例外がスローされた場合，CBLJENV集団項目のCBLJEXCEPTION項目にスローされた例外オブジェクトを設定し，RETURN-CODE特殊レジスタに1を返します。

RETURN-CODE特殊レジスタが0でない場合は，CBLJEXCEPTION項目の例外オブジェクトを使って例外処理をしてください。

インスタンスメソッドを呼び出す例について説明します。

           COMPUTE ARGPTR(1) = FUNCTION ADDR( ARG-STRING ).
           COMPUTE ARGPTR(2) = ZERO.

           CALL 'CBLJINVOKE' USING CBLJENV
                   OBJREF SampleMethod ARG-LIST  RTN-INT.

           IF RETURN-CODE NOT = 0

     *>        CBLJEXCEPTIONを使った例外処理をここに記述する。

               CALL 'CBLJFINALIZE' USING CBLJENV                       *> ※1
               MOVE  nnnn TO ABN-CODE
               CALL 'CBLABN' USING ABN-CODE                            *> ※2
           END-IF.

注※1

Javaプログラム呼び出し機能の実行環境の終了処理の呼び出しを示します。

注※2

COBOLプログラムを異常終了（終了コードはnnnn）させるサービスルーチンの呼び出しを示します。

CBLJEXCEPTIONを使った例外処理では，CBLJEXCEPTION項目を使って例外オブジェクトの種別判定や例外オブジェクトのメソッド呼び出しまたはフィールドアクセスを実行します。

この例では※1，※2の呼び出しによってCOBOLプログラムを終了していますが，続行できる例外ならば続行させてもかまいません。

なお，例外処理中にメソッドを呼び出す場合は，CBLJCOPYサービスルーチンを使って，CBLJEXCEPTION項目の例外オブジェクトのオブジェクト参照を退避してください。メソッド呼び出しのサービスルーチンは，CBLJEXCEPTION項目を更新します。

       01 EXP-OBJ           USAGE POINTER.
       01 EXP-CLS           USAGE POINTER VALUE NULL.
       01 EXP-TOSTRING      PIC X DYNAMIC C-STRING VALUE 'toString'.
       01 EXP-STRING.
         02  EXP-STR-TYPE    PIC X(256) VALUE 'Ljava/lang/String;'.
         02  EXP-STR-AREA    USAGE POINTER.

      *>      例外オブジェクトのメソッドtoString()を呼び出して
      *>      情報を取得する
              CALL 'CBLJCOPY'   USING CBLJENV
                                      CBLJEXCEPTION EXP-OBJ EXP-CLS.
              CALL 'CBLJINVOKE' USING CBLJENV EXP-OBJ
                                      EXP-TOSTRING NO-ARG EXP-STRING.

CBLJEXCEPTION項目を使って発生した例外オブジェクトの種別を判定する例を次に示します。

発生した例外が，ある特定のクラスまたはそのサブクラスであるかの判定

       01  MyException       PIC X DYNAMIC C-STRING
                             VALUE 'MyException'.
       01 MY-EXCEPTION       USAGE POINTER.

          CALL 'CBLJGETCLASS'   USING CBLJENV MyException   MY-EXCEPTION
          CALL 'CBLJINSTANCEOF' USING CBLJENV CBLJEXCEPTION MY-EXCEPTION
          IF RETURN-CODE NOT = 0

     *>         MyException例外の処理をここに記述する。

          END-IF

発生した例外が，ある特定のクラスであるかの判定

       01  EXCEPTNAME-LEN PIC 9(9) USAGE COMP VALUE 256.
       01  EXCEPTNAME     PIC X(256).

           CALL 'CBLJCLASSNAME' USING CBLJENV CBLJEXCEPTION
                                      EXCEPTNAME EXCEPTNAME-LEN
           EVALUATE EXCEPTNAME
             WHEN '例外クラス名1'

    *>           例外クラス名1の処理をここに記述する。

             WHEN '例外クラス名2'

    *>           例外クラス名2の処理をここに記述する。

             WHEN '例外クラス名3'

    *>           例外クラス名3の処理をここに記述する。

             WHEN OTHER

    *>           その他の例外の処理をここに記述する。

           END-EVALUATE

注意事項

CBLJCLASSNAMEサービスルーチンが返す名前は，Javaプログラム呼び出し機能のクラス名（パッケージとクラス名をスラントで区切る）ではなく，Javaのクラス名（パッケージとクラス名をピリオドで区切る）です。

例）

　　java.lang.Exception

(2)　サービスルーチンで検知しないJava例外

サービスルーチンで検知しないJava例外の場合，Javaプログラムで例外が発生したとき，COBOLプログラムのスレッドまたはプロセスが終了します。

この場合の対処については，「5.　プログラムのデバッグとトラブルシュート」を参照してください。

3.2.5　Javaオブジェクト参照の使用ガイドライン

Javaプログラム呼び出し機能のサービスルーチンから取得したJavaオブジェクト参照は，必ず解放する必要があります。

解放しない場合，Java VMのガーベジコレクションでオブジェクトを解放できないため，メモリリークの原因になります。

COBOLプログラムでJavaオブジェクト参照を扱う場合は，次のガイドラインに従ってください。

Javaオブジェクト参照用の領域はポインタ項目(USAGE POINTER)として記述します。

パラメタ型集団項目の中に記述する場合を除いて，できるだけ01レベルの項目（01または77）としてください。

従属項目として記述された場合，上位の集団項目の操作でポインタ項目に不当な値が設定され，不正な動作となることがあります。

一つのJavaオブジェクト参照は必ず一つのポインタ項目に格納してください。

Javaオブジェクト参照を別のポインタ項目に転記したい場合は，COMPUTE文やSET文を使って転記しないで，必ずCBLJCOPYサービスルーチンで複製を作成して転記してください。そして，不要になったら必ず両方のJavaオブジェクト参照を解放してください。

COMPUTE文やSET文を使って転記すると，多重解放の原因になります。

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

なお，次のJavaオブジェクト参照は，これらのサービスルーチンを使用しなくても自動的に解放されます。ただし，解放漏れを防止するために，これらのサービスルーチンで明示的に解放することをお勧めします。

次のサービスルーチン呼び出しの受け取りのポインタ項目に格納されているJavaオブジェクト参照

・CBLJGETSTATICFIELDサービスルーチン

・CBLJSTATICINVOKEサービスルーチン

・CBLJNEWサービスルーチン

・CBLJGETFIELDサービスルーチン

・CBLJINVOKEサービスルーチン

・CBLJXTOSTRINGサービスルーチン

・CBLJNTOSTRINGサービスルーチン

・CBLJNEWARRAYサービスルーチン

・CBLJGETOBJARRAYサービスルーチン

CBLJFINALIZEサービスルーチンを呼び出した場合の未解放のすべてのJavaオブジェクト参照

手続き部でJavaオブジェクト参照用のポインタ項目をNULLで初期化する場合は，SET文またはINITIALIZE文を使用しないで，必ずCBLJSETNULLサービスルーチンを使用してください。

SET文またはINITIALIZE文を使用した場合，格納されていたJavaオブジェクト参照を解放できなくなります。

CBLJSETNULLサービスルーチンは，ポインタ項目にJavaオブジェクト参照が入っていれば，解放してからNULLを設定します。

Javaオブジェクト参照用のポインタ項目を引数に指定する場合は，BY CONTENTやBY VALUEではなく，必ずBY REFERENCEにしてください。

Javaオブジェクト参照用のポインタ項目は，RETURNING指定には指定しないでください。

Javaオブジェクト参照は，C言語などの他言語プログラムには渡さないでください。

Javaオブジェクト参照用のポインタ項目を，局所場所節または初期化プログラムやCANCEL文でキャンセルされるプログラムの作業場所節に指定した場合は，そのプログラムがリターンするまでに必ず解放してください。

CBLJFINALIZEサービスルーチンを呼び出すと，未解放のすべてのJavaオブジェクト参照は解放されます。

CBLJFINALIZEサービスルーチンを呼び出したあとは，Javaオブジェクト参照用のポインタ項目のアドレスは解放されたJavaオブジェクト参照の領域を指しています。このため，これを使ってサービスルーチンを呼び出さないでください。アクセス違反や実行時エラーとなります。

3.2.6　コーディング時の注意事項

コーディング時の注意事項を次に示します。

引数なしのメソッド，コンストラクタ，およびvoid型のメソッドを呼び出す場合は，次の項目を必ず指定してください。指定がない場合は，アプリケーションエラー（アクセス違反）の原因となります。

引数なしを示す引数リスト(NO-ARG)

NO-ARGの使用例については，「3.2.1　Javaクラス操作のコーディング」の「(6)　インスタンスの生成」を参照してください。

void型を示すパラメタ型集団項目(RTN-VOID)

RTN-VOIDの使用例については，「3.2.1　Javaクラス操作のコーディング」の「(5)　クラスメソッドの呼び出し」を参照してください。

Javaオブジェクト参照の取り扱いは，Javaオブジェクト参照の使用ガイドラインに従ってください。ガイドラインに従わない場合は，メモリリークの原因になります。Javaオブジェクト参照の使用ガイドラインについては，「3.2.5　Javaオブジェクト参照の使用ガイドライン」を参照してください。

次のようなケースは，それぞれのJavaコンポーネントを個別に呼び出すと，Javaプログラム呼び出し機能が使用するJNI呼び出しのオーバヘッドが影響するため，Javaから呼び出した場合に比べて実行性能が大幅に遅くなるおそれがあります。ロジックをJavaのクラスメソッドとして実装し，COBOLからはそのクラスメソッドを呼び出すだけにすることをお勧めします。

オブジェクト間のリンクが複雑なオブジェクトを扱うロジック

多くのメソッド呼び出しやフィールド呼び出しを必要とするロジックで，かつクリティカルな性能が要求されているケース

4　プログラムのコンパイルと実行

この章では，Javaプログラム呼び出し機能を使用したCOBOLのUAPのコンパイルと実行について説明します。

4.1　プログラムのコンパイル

Javaプログラムを使用するCOBOLプログラムのコンパイルでは，Javaプログラム呼び出し機能の実行時ライブラリ（インポートライブラリcbl2kjrt.lib）を指定してリンクさせます。

実行時ライブラリの指定例を次に示します。

ccbl2002 -Main,System COBOLプログラム.cbl cbl2kjrt.lib

COBOL2002のコンパイルの方法や注意事項については，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

4.1.1　COBOL2002のコンパイラオプションを指定するときの注意事項

Javaプログラム呼び出し機能を使用するCOBOLプログラムのコンパイル時に，コンパイラオプションを指定する場合の注意事項について説明します。

COBOL2002のコンパイラオプションについては，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

(1)　-BigEndianコンパイラオプション（バイナリデータをビッグエンディアン形式で取り扱う）

-BigEndianコンパイラオプション※を指定してコンパイルすると，COBOLプログラムの2進形式の数字項目および内部浮動小数点項目をビッグエンディアン形式で取り扱うことができます。

注※

-BigEndianコンパイラオプションは，システムのエンディアンがリトルエンディアン形式の場合に有効です。

Javaプログラム呼び出し機能を使用するプログラムで，-BigEndianコンパイラオプションを指定するときの注意事項を次に示します。

サービスルーチンの引数

-BigEndian,Binコンパイラオプションを指定したとき，サービスルーチンの引数に直接指定するJavaのデータと対応しない4バイト2進形式の数字項目の定義では，USAGE句にCOMPではなく，COMP-5を指定してください。

対象の数字項目については，各サービスルーチンの注意事項を確認してください。

なお，USAGE句にCOMP-5を指定する場合は，-Comp5コンパイラオプションを指定する必要があります。

Javaの型がchar型のとき，対応するCOBOLデータ項目を日本語項目1文字（PIC N）として定義した場合も，データの内容はビッグエンディアン形式となります。

実行時に指定する環境変数

-BigEndianコンパイラオプションの指定に従って，環境変数CBLJRTBIGENDIANを指定してください。指定しない場合，システムのエンディアンの形式で扱われます。

環境変数CBLJRTBIGENDIANについては，「6.2.2　実行時環境変数の詳細」の「(1)　CBLJRTBIGENDIAN」を参照してください。

(2)　-DynamicLinkコンパイラオプション（動的なリンクを使用する）

-DynamicLink,Callコンパイラオプションを指定してコンパイルすることで，定数指定のCALL文の呼び出し先を動的にリンクできます。

Javaプログラム呼び出し機能のサービスルーチンを呼び出すCOBOLプログラムに-DynamicLink,Callコンパイラオプションを指定してコンパイルしたとき，Javaプログラム呼び出し機能の実行時ライブラリを，動的にロードするライブラリの検索対象に指定する必要があります。

COBOL2002の実行時環境変数の指定例を次に示します。

CBLLDLL=cbl2kjrt.dll

(3)　-JPNコンパイラオプション（日本語項目の扱いを指定する）

-JPN,Alnumまたは-JPN,V3JPNコンパイラオプションを指定してコンパイルすると，COBOLプログラムの日本語項目の空白の扱いを指定できます。

Javaプログラム呼び出し機能の文字列操作では，英数字項目と日本語項目とでは，残りの領域を補う空白の扱いが異なります。Javaプログラム呼び出し機能での空白の扱いを次の表に示します。

表4‒1　Javaプログラム呼び出し機能での空白の扱い

サービスルーチンの引数

領域を補う空白の扱い

英数字項目として扱う場合

半角空白(X'20')

日本語項目として扱う場合

全角空白(X'8140')

-JPNコンパイラオプションを指定する場合の注意事項を次に示します。

日本語項目からJavaに渡すStringオブジェクトを生成する場合

-JPN,Alnumまたは-JPN,V3JPNコンパイラオプションを指定するときは，CBLJXTOSTRINGサービスルーチンを呼び出してStringオブジェクトを生成してください。このとき，長さを指定する引数には，日本語項目の文字数ではなく，英数字項目として扱ったときの長さ（バイト数）を指定してください。

-JPN,V3JPNSpaceコンパイラオプションを指定するときは，CBLJNTOSTRINGサービスルーチンを呼び出してStringオブジェクトを生成してください。

Stringオブジェクトを日本語項目の値に変換する場合

-JPN,Alnumまたは-JPN,V3JPNコンパイラオプションを指定するときは，CBLJSTRINGTOXサービスルーチンを呼び出して値を変換してください。このとき，長さを指定する引数には，日本語項目の文字数ではなく，英数字項目として扱ったときの長さ（バイト数）を指定してください。

-JPN,V3JPNSpaceコンパイラオプションを指定するときは，CBLJSTRINGTONサービスルーチンを呼び出して値を変換してください。

4.2　プログラムの実行

Javaプログラム，およびCOBOLプログラムのための環境設定をしたあとに，プログラムを実行します。

COBOL2002の実行時の環境設定については，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

Javaプログラム呼び出し機能の環境変数については，「6.2　実行時環境変数」を参照してください。

4.2.1　プログラム実行時の注意事項

Javaプログラム呼び出し機能のサービスルーチンを呼び出すCOBOLプログラムのコンパイルで-DynamicLink,Callコンパイラオプションを指定する場合，動的なリンクの設定が必要です。

動的なリンクの設定については，「4.1.1　COBOL2002のコンパイラオプションを指定するときの注意事項」の「(2)　-DynamicLinkコンパイラオプション（動的なリンクを使用する）」を参照してください。

4.2.2　Java VM起動オプション

Javaプログラム呼び出し機能を使用する場合，プロセス単位にJava VMを起動する必要があります。ただし，CBLJINITIALIZEサービスルーチンが呼び出される前にJava VMを起動していないとき，Javaプログラム呼び出し機能がJava VMを起動します。ここでは，Javaプログラム呼び出し機能がJava VMを起動する場合の起動オプションについて説明します。

なお，Javaプログラム呼び出し機能がJava VMを起動する場合，Java VM起動オプション情報を収集します。Java VM起動オプション情報については，「5.4　Java VM起動オプション情報の収集」を参照してください。

(1)　プロセス単位の起動オプション

プロセス単位の起動オプションは，環境変数CBLJRTVMOPTIONSまたはCBLJENV集団項目のCBLJVMOPTIONS項目で指定します。プロセス単位の起動オプションは，Javaプログラム呼び出し機能がJava VMを起動するときだけ有効です。

プロセス単位の起動オプションの優先順位を次に示します。

環境変数CBLJRTVMOPTIONSに指定したファイルに登録した内容

CBLJINITIALIZEサービスルーチンの引数に指定したCBLJENV集団項目のCBLJVMOPTIONS項目の内容

環境変数CBLJRTVMOPTIONSの指定方法については，「6.2.2　実行時環境変数の詳細」の「(6)　CBLJRTVMOPTIONS」を参照してください。

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

(2)　デフォルトの起動オプション

Javaプログラム呼び出し機能がJava VMを起動するとき，プロセス単位の起動オプションに加えて，調査用資料の採取のための起動オプションを指定します。これらのオプションは，主にJava VMでの障害発生時の調査に役立つ資料を採取するために指定します。

デフォルトの起動オプションを次に示します。

調査用の資料採取と出力先を指定する起動オプション

-XX:-HitachiThreadDumpToStdout
-XX:+HitachiOutputMilliTime
-XX:+HitachiVerboseGC
-XX:+HitachiOutOfMemoryStackTrace
-XX:+HitachiJavaClassLibTrace
-XX:+HitachiLocalsInStackTrace
-XX:+HitachiLocalsSimpleFormat
-XX:+HitachiTrueTypeInLocals

-XX:HitachiJavaLog:<出力先フォルダ>/CBLJRTJAVALOG
-XX:HitachiJavaLogFileSize=256k
-XX:HitachiJavaLogNumberOfFile=4

<出力先フォルダ>は次の優先順位で決定します。

環境変数TEMPに指定したフォルダ

環境変数TMPに指定したフォルダ

カレントフォルダ

その他の目的で指定する起動オプション

-XX:+HitachiOutOfMemoryAbort

このオプションを指定すると，JavaがOutOfMemory例外を検知したときに，ダンプを出力して強制終了します。メモリ不足のままプロセスが動作し続けることを防止します。

デフォルトの起動オプションは，環境変数CBLJRTVMDEFAULTOPTIONSで指定を変更できます。

環境変数CBLJRTVMDEFAULTOPTIONSの指定方法については，「6.2.2　実行時環境変数の詳細」の「(5)　CBLJRTVMDEFAULTOPTIONS」を参照してください。

注意事項

Javaプログラム呼び出し機能のデフォルトの起動オプションは，Cosminexus製品に含まれる日立製Java VM固有の拡張オプションです。オプションについては，Cosminexus製品のマニュアルを参照してください。

日立製以外のJava VMを使用する場合は，環境変数CBLJRTVMDEFAULTOPTIONSを使用してデフォルトの起動オプションを取り消してください。このとき，障害発生時の調査のために，使用するJava VMが提供する詳細情報取得用のオプションを指定しておくことをお勧めします。

Cosminexus環境下のアプリケーションとは別のプロセスで日立製Java VMを使用する場合，環境変数CBLJRTVMDEFAULTOPTIONSを使用して指定を変更するとき，調査用の資料採取と出力先を指定する起動オプションを指定することをお勧めします。この起動オプションを指定しない場合は，Java VMでの障害発生時に調査が困難になるときがあります。

5　プログラムのデバッグとトラブルシュート

この章では，Javaプログラムを呼び出すCOBOLのUAPのデバッグとトラブルシュートについて説明します。

5.1　Javaプログラム呼び出し機能のデバッグとトラブルシュートの概要

Javaプログラム呼び出し機能のサービスルーチンの引数が不正（引数不足や構造不正）の場合，アプリケーションエラー（アクセス違反）となることがあります。これらが発生した場合は，引数が正しいかを確認してください。

また，プログラムの実行中に次に示す要因でJavaプログラム呼び出し機能の実行が失敗した場合，実行時エラーが出力され，スレッドまたはプロセスが終了します。

Java VMやJNIの環境の起動に失敗した。

OS，Java VMまたはJNIの環境がリソース不足などで不安定な状態になっている。

サービスルーチンに不正な引数が渡された。

Java VMやJNIで例外が発生した。

出力されるCOBOL実行時メッセージには，Javaプログラム呼び出し機能が管理する詳細メッセージ番号と詳細メッセージが出力されます。これらを基に対処することができます。

実行時メッセージの出力例を次に示します。

出力されるメッセージ，要因および対処については，「付録B　Javaプログラム呼び出し機能の詳細メッセージ」を参照してください。

Javaプログラム呼び出し機能のデバッグとトラブルシュートのために，次の機能を使用できます。

デバッグ情報出力機能

Javaプログラム呼び出し機能を使用したCOBOLプログラムの実行時のデバッグ情報を出力します。

実行時エラー情報出力機能

Javaプログラム呼び出し機能で実行時エラーが発生したとき，デバッグ情報出力機能を使用していなくても，エラーの詳細情報を取得できます。

Cosminexus環境下のアプリケーションとは別のプロセスでJavaプログラム呼び出し機能を使用する場合は，Java VMでの障害調査用の資料を採取する設定にすることをお勧めします。Java VM起動オプションについては，「4.2.2　Java VM起動オプション」の「(2)　デフォルトの起動オプション」を参照してください。

Java VM起動オプション情報収集

Java VMを起動するときに指定した起動オプションの情報を収集します。

COBOLプログラムのデバッグについては，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

5.2　デバッグ情報の出力

Javaプログラム呼び出し機能では，Javaプログラム呼び出し機能を使用したCOBOLプログラムのテスト時やエラー発生時に，指定したファイル（デバッグ情報ファイル）に調査のためのデバッグ情報を出力できます。

出力されたデバッグ情報を確認することで，Javaプログラム呼び出し機能のサービスルーチンの呼び出し順序，引数の内容やエラーの詳細情報などを確認できます。

デバッグ情報ファイルに出力される情報は次のとおりです。

Javaプログラム呼び出し機能のサービスルーチンで使用する情報

オブジェクト解放漏れやエラー発生時の異常状態の情報

この節で説明するCBLJENV集団項目などのJavaプログラム呼び出し機能で使用するデータ項目については，「6.1.1　サービスルーチンで使用する引数」を参照してください。

5.2.1　デバッグ情報出力の指定方法

デバッグ情報を出力するには，Javaプログラム呼び出し機能を使用するCOBOLプログラムの実行時に，次に示す環境変数を指定します。

CBLJRTDUMP：デバッグ情報ファイルのパス名を指定します。

CBLJRTDUMP_MAXSIZE：デバッグ情報ファイルの最大サイズを指定します。

環境変数CBLJRTDUMPについては，「6.2.2　実行時環境変数の詳細」の「(2)　CBLJRTDUMP」を参照してください。

環境変数CBLJRTDUMP_MAXSIZEについては，「6.2.2　実行時環境変数の詳細」の「(3)　CBLJRTDUMP_MAXSIZE」を参照してください。

5.2.2　デバッグ情報の種類と出力フォーマット

Javaプログラム呼び出し機能で出力するデバッグ情報の種類と出力フォーマットについて説明します。

ここでは，出力フォーマットに次の表記を使用します。

△：半角空白（X'20'）

▽：タブ文字（X'09'）

(1)　デバッグ情報ファイルの出力例

デバッグ情報ファイルには，出力日時とデバッグ情報を1レコードとするデバッグ情報レコードが出力されます。

Javaプログラムを呼び出すCOBOLプログラムとデバッグ情報ファイルの出力例を次に示します。

Javaプログラムを呼び出すCOBOLプログラムの例

      *>  Javaのsampleクラスのクラス参照を取得する ---------------------

           CALL 'CBLJGETCLASS' USING CBLJENV sample CLASSREF.

      *>  Javaのsampleクラスのインスタンスを生成する -------------------

           CALL 'CBLJNEW' USING CBLJENV CLASSREF NO-ARG OBJREF.

      *>  SampleFieldに値を設定する ------------------------------------

           MOVE 333  TO ARG1-01-AREA.

           CALL 'CBLJSETFIELD' USING CBLJENV
                               OBJREF SampleField ARG1-01.

      *>  SampleMethodメソッドを呼び出す -------------------------------

           MOVE 4    TO ARG1-01-AREA.

           MOVE 'サンプル' TO WORK.
           CALL 'CBLJXTOSTRING' USING CBLJENV WORK WORK-L ARG1-02-AREA.

           COMPUTE ARGPTR(1) = FUNCTION ADDR( ARG1-01 ).
           COMPUTE ARGPTR(2) = FUNCTION ADDR( ARG1-02 ).
           COMPUTE ARGPTR(3) = ZERO.

           CALL 'CBLJINVOKE' USING CBLJENV
                             OBJREF SampleMethod ARG-LIST RTN1.

           CALL 'CBLJDISPLAY' USING CBLJENV RTN1-AREA.

      *>  Javaのインスタンスを解放する ---------------------------------

           CALL 'CBLJRELEASE'  USING CBLJENV OBJREF.

      *>  Javaの実行環境を削除する -------------------------------------

           CALL 'CBLJFINALIZE' USING CBLJENV.

デバッグ情報ファイルの出力例

(2)　デバッグ情報の種類と出力フォーマット

ここでは，デバッグ情報ファイルに出力されるデバッグ情報の種類と出力フォーマットについて説明します。

デバッグ情報ファイルには，デバッグ情報がデバッグ情報レコードとして出力されます。

出力されるデバッグ情報を次の表に示します。

表5‒1　出力されるデバッグ情報

項番

デバッグ情報

出力情報

1

サービスルーチン呼び出し情報

サービスルーチンを呼び出したCOBOLプログラムの情報と指定した引数の内容が出力されます。

2

サービスルーチン返却値情報

サービスルーチンの戻り値と更新した引数の内容が出力されます。

3

オブジェクト参照解放漏れ情報

オブジェクト参照の解放漏れが通知されます。

4

Java例外情報

Java例外発生時の詳細情報が出力されます。

5

実行時エラー情報

実行時エラー発生時の詳細情報が出力されます。

6

ユーザデバッグ情報（文字列）

プログラムで指定したデバッグ情報（文字列）が出力されます。

7

ユーザデバッグ情報（メモリ）

プログラムで指定したデバッグ情報（メモリ領域の内容）が出力されます。

8

実行環境情報

Javaプログラム呼び出し機能の実行環境情報が出力されます。

デバッグ情報レコードのフォーマットを次の図に示します。

図5‒1　デバッグ情報レコードのフォーマット

デバッグ情報レコードヘッダとして出力される情報を次に示します。

レコード出力日時：「YYYY-MM-DD△hh:mm:ss.sss」の形式のレコード出力日時が出力されます。

プロセスID：プログラムを実行しているプロセスIDが出力されます。

スレッドID：プログラムを実行しているスレッドIDが出力されます。

サービスルーチン名：処理中のJavaプログラム呼び出し機能のサービスルーチン名が出力されます。

それぞれのデバッグ情報で出力される情報について説明します。

各項に示すフォーマットは，デバッグ情報レコードのデバッグ情報部分だけを示します。一つのデバッグ情報で2レコード以上のレコードが出力される場合があります。この場合，それぞれの行にデバッグ情報レコードヘッダが出力されます。

また，デバッグ情報にはメモリ領域の内容が領域のダンプリストのフォーマットで出力されることがあります。出力フォーマットについては，「(3)　データの種類と出力フォーマット」の「(l)　領域のダンプリストの出力フォーマット」を参照してください。

(a)　サービスルーチン呼び出し情報

サービスルーチンが呼び出されたとき，サービスルーチンを呼び出したCOBOLプログラムの情報と指定した引数の内容が出力されます。

フォーマット

#△COBOLプログラム名△(行番号/カラム位置)
argument-1(引数1のデータ型):△引数1の内容
　　：
argument-n(引数nのデータ型):△引数nの内容

COBOLプログラム名

サービスルーチンを呼び出したCOBOLプログラム名が出力されます。

行番号/カラム位置

サービスルーチンを呼び出したCALL文の行番号とカラム位置が出力されます。-DebugInfコンパイラオプションを指定してコンパイルしたプログラムの場合，行番号は6けたの数値，カラム位置は2けたの数値で出力されます（指定していない場合は，'******/**'が出力されます）。

引数nのデータ型/内容

n番目の引数のデータ型を示す文字列と内容が出力されます。内容の表示形式はデータ型によって異なります。表示形式については，「(3)　データの種類と出力フォーマット」を参照してください。

領域のダンプリストなど，引数nの内容が複数レコードになる場合は，「:」のあとで改行され，次のレコードから引数nの内容が出力されます。

出力例

注意事項

引数のCBLJENV集団項目の指定が誤っている場合など，サービスルーチンの処理が継続できないときは，この情報は出力されないことがあります。

(b)　サービスルーチン返却値情報

サービスルーチンの処理が終了するとき，サービスルーチンの戻り値とサービスルーチンが更新した引数の内容が出力されます。

フォーマット

#△return(戻り値)
argument-x(引数xのデータ型):△引数xの内容
　　：

戻り値

サービスルーチンの戻り値が出力されます。

引数xのデータ型と引数xの内容

サービスルーチンが更新したx番目の引数のデータ型を示す文字列と内容が出力されます。内容の表示形式はデータ型によって異なります。表示形式については，「(3)　データの種類と出力フォーマット」を参照してください。サービスルーチンが更新する引数がない場合は出力されません。

領域のダンプリストなど，引数xの内容が複数レコードになる場合は，「:」のあとで改行され，次のレコードから引数xの内容が出力されます。

出力例

(c)　オブジェクト参照解放漏れ情報

CBLJFINALIZEサービスルーチン実行時，オブジェクト参照の解放漏れがある場合，解放されていないオブジェクト参照のアドレスが通知されます。解放漏れの個数だけレコードが出力されます。

フォーマット

Unreleased△object△reference△アドレス

アドレス

解放されていないオブジェクト参照のアドレス（16進形式）が出力されます。

出力例

(d)　Java例外情報

Java例外発生時の詳細情報が出力されます。

フォーマット

Handled△Java△Exception: CBLJEXCEPTION=例外オブジェクトのアドレス
Java例外の説明
JNI関数名(引数情報)

例外オブジェクトのアドレス

CBLJENV集団項目のCBLJEXCEPTION項目に設定する例外オブジェクトのアドレス（16進形式）が出力されます。Javaプログラムから例外がスローされた場合に設定されます。デバッグ情報出力機能では，JNIの例外でCBLJEXCEPTION項目を更新しない場合は，このレコードは出力されません。例外処理については，「3.2.4　例外処理のコーディング」を参照してください。

Java例外の説明

JNI関数の例外およびスタックのバックトレースが出力されます。

JNI関数名

最後に呼び出したJNI関数名が出力されます。

引数情報

JNI関数に渡した引数の値の並びが出力されます。引数が複数ある場合は，コンマ（,）で区切って出力されます。

出力例

(e)　実行時エラー情報

実行時エラー発生時の詳細情報が出力されます。

フォーマット

KCCCnnnnR-x△詳細メッセージ

KCCCnnnnR-x

実行時のメッセージIDが出力されます。

詳細メッセージ

実行時のメッセージのエラー情報に出力される詳細メッセージが出力されます。

出力例

(f)　ユーザデバッグ情報（文字列）

CBLJDEBUGSTRINGサービスルーチンを呼び出したとき，ユーザデバッグ情報として，指定された文字列がデバッグ情報ファイルに出力されます。

フォーマット

#△COBOLプログラム名△(行番号/カラム位置)
ユーザデバッグ情報

COBOLプログラム名

CBLJDEBUGSTRINGサービスルーチンを呼び出したCOBOLプログラム名が出力されます。

行番号/カラム位置

CBLJDEBUGSTRINGサービスルーチンを呼び出したCALL文の行番号とカラム位置が出力されます。-DebugInfコンパイラオプションを指定してコンパイルしたプログラムの場合，行番号は6けたの数値，カラム位置は2けたの数値で出力されます（指定していない場合は，'******/**'が出力されます）。

ユーザデバッグ情報

CBLJDEBUGSTRINGサービスルーチンの引数2に指定した英数字項目の値が出力されます。引数3に指定した長さだけ出力されます。

注意事項

ユーザデバッグ情報に，NULL終端文字（X'00'）が含まれる場合は，それ以降の文字列は出力されません。

(g)　ユーザデバッグ情報（メモリ）

CBLJMEMDUMPサービスルーチンを呼び出したとき，指定されたメモリ領域のダンプリストがデバッグ情報ファイルに出力されます。

フォーマット

#△COBOLプログラム名△(行番号/カラム位置)
領域のダンプリスト

COBOLプログラム名

CBLJMEMDUMPサービスルーチンを呼び出したCOBOLプログラム名が出力されます。

行番号/カラム位置

CBLJMEMDUMPサービスルーチンを呼び出したCALL文の行番号とカラム位置が出力されます。-DebugInfコンパイラオプションを指定してコンパイルしたプログラムの場合，行番号は6けたの数値，カラム位置は2けたの数値で出力されます（指定していない場合は，'******/**'が出力されます）。

領域のダンプリスト

CBLJMEMDUMPサービスルーチンの引数2に指定したポインタ項目が指すメモリ領域のダンプリスト（16進形式）が出力されます。引数3に指定した長さだけ出力されます。

(h)　実行環境情報

Javaプログラム呼び出し機能の実行環境情報が出力されます。CBLJINITIALIZEサービスルーチンで実行環境が構築されたあとに出力されます。

フォーマット

Environment:△環境変数名=環境変数の値
　　：

環境変数名

Javaプログラム呼び出し機能で使用する環境変数の名称が出力されます。実行時環境変数が指定されているとき，このレコードは繰り返して出力されます。実行時環境変数については，「6.2　実行時環境変数」を参照してください。

環境変数の値

環境変数に指定された値が出力されます。ただし，値の長さが2,048バイトを超えるとき，先頭から2,048バイトまでが出力されます。

出力例

(3)　データの種類と出力フォーマット

ここでは，デバッグ情報で出力される引数などのデータの種類の出力フォーマットについて説明します。

(a)　引数の内容の出力フォーマット

データの内容は，出力されるデータの種類（データ型）によって出力フォーマットが異なります。

デバッグ情報に出力されるデータの種類を次の表に示します。

表5‒2　デバッグ情報に出力されるデータの種類

項番

データの種類（データ型）

「データ型」として出力される文字列

1

CBLJENV集団項目

CBLJENV

2

動的長基本項目／名前型集団項目

CBLJNAME

3

パラメタ型集団項目

CBLJPARAM

4

引数リスト型集団項目

CBLJLIST

5

クラス参照

CLASSREF

6

オブジェクト参照

OBJECTREF

7

英数字項目

ALNUM

8

日本語項目

JPN

9

数字項目（4バイト2進形式）

BIN4

10

Java型名

JAVATYPE

11

ポインタ項目（配列アドレス）

ADDR

(b)　CBLJENV集団項目

CBLJENV集団項目は次のフォーマットで出力されます。

フォーマット

領域のダンプリスト
▽option-1:△Java VM起動オプション1
　　：
▽option-n:△Java VM起動オプションn

領域のダンプリスト

CBLJENV集団項目領域のダンプリスト（16進形式）が出力されます。

Java VM起動オプションn

n番目に指定したJava VM起動オプション文字列が出力されます。出力長はCBLJENV集団項目中のCBLJSTRMAXLENに指定した値です。

この情報は，CBLJINITIALIZEサービスルーチンでのデバッグ情報出力時だけ出力されます。

(c)　動的長基本項目／名前型集団項目

名前型集団項目は次のフォーマットで出力されます。

フォーマット

'名前文字列'

名前文字列

名前型集団項目に指定した文字列が出力されます。NULL終端文字（X'00'）までが出力されます。

(d)　パラメタ型集団項目

パラメタ型集団項目は，パラメタ型集団項目中のJavaの型を表す文字に従ってデータの内容が出力されます。

フォーマット

Javaの型:△データの内容

Javaの型

パラメタ型集団項目中のJavaの型を表す文字列が出力されます。パラメタ型集団項目については，「6.1.1　サービスルーチンで使用する引数」の「(3)　パラメタ型集団項目」を参照してください。

パラメタ型集団項目が未構築の場合は，次に示す内容が出力されます。

Javaの型を表す文字列に該当しない値の場合は，次に示す内容が出力されます。

xx：パラメタ型集団項目中のJavaの型を表す文字列の先頭1バイトの値（16進形式）を示します。

データの内容

次の表に示す内容が出力されます。

表5‒3　パラメタ型集団項目中のJavaの型とデータの内容

項番

Javaの型を表す文字とJavaの型

「データの内容」に出力される内容

1

V (void)

(出力しない)

2

B (byte)

領域（1バイト）の内容（16進形式）△(値)

3

C (char)

領域（2バイト）の内容（16進形式）△(値)

4

S (short)

領域（2バイト）の内容（16進形式）△(値)

5

I (int)

領域（4バイト）の内容（16進形式）△(値)

6

J (long)

領域（8バイト）の内容（16進形式）△(値)

7

F (float)

領域（4バイト）の内容（16進形式）△(値)※

8

D (double)

領域（8バイト）の内容（16進形式）△(値)※

9

Z (boolean)

領域（1バイト）の内容（16進形式）△(値)

10

T (クラス参照)

「(f)　クラス参照のポインタ項目」を参照してください。

11

L (オブジェクト参照)

「(g)　オブジェクト参照のポインタ項目」を参照してください。

12

[ (配列オブジェクト)

注※

値の表示精度は，Javaプログラム呼び出し機能が使用しているCコンパイラの仕様に従うため，COBOLまたはJavaプログラムで設定した値と異なることがあります。

(e)　引数リスト型集団項目

引数リスト型集団項目は，パラメタ型集団項目を指すアドレス値の配列です。配列の終端まで出現順序で配列の要素（パラメタ型集団項目）のデータの内容が出力されます。

フォーマット

[出現順序]△パラメタ型集団項目で出力する内容

出現順序

パラメタ型集団項目を指すアドレス値の出現順序（1から昇順）が出力されます。

配列の要素がない（配列の先頭がNULL値）の場合は，次に示す内容が出力されます。

(f)　クラス参照のポインタ項目

クラス参照を示すポインタ項目は，アドレスとクラス名が出力されます。

フォーマット

アドレス[クラス名]

アドレス

ポインタ項目の値

クラス名

ポインタ項目が示すクラス参照に保持しているクラス名が出力されます。クラス参照が未構築の場合は「(null)」が出力されます。

(g)　オブジェクト参照のポインタ項目

オブジェクト参照を示すポインタ項目は，アドレスが出力されます。

フォーマット

アドレス[クラス名]

アドレス

ポインタ項目の値

クラス名

ポインタ項目が示すオブジェクト参照が指すクラス参照に保持しているクラス名が出力されます。オブジェクト参照が未構築，またはクラス参照のアドレスがNULL値の場合は「(null)」が出力されます。

(h)　英数字項目／日本語項目

英数字項目および日本語項目は，サービスルーチンに同時に指定した文字数（数字項目の値）分の領域のダンプリストが出力されます。

フォーマット

領域のダンプリスト

領域のダンプリスト

英数字項目または日本語項目の領域のダンプリストが出力されます。出力される領域サイズ（バイト数）を次に示します。

英数字項目の場合，指定した文字数

日本語項目の場合，指定した文字数×2

(i)　数字項目（2進形式）

数字項目（2進形式）は，指定した数字項目の値とメモリ領域の内容（16進形式）が出力されます。

フォーマット

領域の内容（16進形式）△(値)

領域の内容（16進形式）

数字項目のメモリ領域の内容（16進形式）が出力されます。数字項目に該当するバイト数だけ出力されます。

値

数字項目の値（10進形式）が出力されます。

(j)　Java型名

Java型名は，指定されたJava型名が出力されます。フォーマットについては，「(d)　パラメタ型集団項目」のJavaの型を参照してください。

(k)　ポインタ項目

ポインタ項目は，アドレス値が出力されます。

フォーマット

アドレス

アドレス

ポインタ項目に設定されているアドレス値が出力されます。

(l)　領域のダンプリストの出力フォーマット

領域のダンプリストを出力する場合，該当するデータが示すメモリ領域の内容が16進形式で出力されます。

フォーマット

△△アドレス:△メモリ領域の内容（16進形式）△'メモリの内容（文字列）'

アドレス

領域の先頭アドレスが出力されます。

メモリ領域の内容（16進形式）

領域の先頭アドレスから16バイト分のメモリ領域の内容（16進形式）が出力されます。

区切り文字として，4バイトごとに半角空白が出力されます。

a〜fは小文字で出力されます。

メモリ領域の内容（文字列）

領域の先頭アドレスから16バイト分のメモリ領域の内容を，1バイトずつ文字に変換した文字列が出力されます。ASCIIコードの制御コードおよび文字が割り当てられていないコードに該当する場合は，「.（ピリオド）」が出力されます。

メモリ領域の内容は1レコードに16バイトずつ出力されます。出力されるサイズが16バイトを超える領域の場合は，16バイトごとに複数のレコードが出力されます。

また，16バイトに満たない場合，メモリ領域の内容（16進形式）の残りの領域には半角空白が出力され，メモリ領域の内容（文字列）には領域の終端の位置に「'」が出力されます。

CBLJGETCLASSサービスルーチンの引数（CBLJENV集団項目）の出力例

5.2.3　ユーザデバッグ情報を出力するサービスルーチン

サービスルーチンを使用して，実行中のCOBOLプログラムからデバッグ情報ファイルにデバッグ情報を出力できます。

ユーザデバッグ情報を出力するためのサービスルーチンを次に示します。

CBLJDEBUGSTRING：ユーザデバッグ情報（文字列）を出力します。

CBLJMEMDUMP：ユーザデバッグ情報（メモリ領域の内容）を出力します。

ここでは，CBLJDEBUGSTRINGサービスルーチンとCBLJMEMDUMPサービスルーチンの使用方法について説明します。

サービスルーチンについては，「6.1.7　デバッグ操作」の「(1)　CBLJDEBUGSTRING」および「(2)　CBLJMEMDUMP」を参照してください。

(1)　ユーザデバッグ情報（文字列）の出力（CBLJDEBUGSTRINGサービスルーチン）

CBLJDEBUGSTRINGサービスルーチンを呼び出して，デバッグ情報ファイルに文字列情報を出力できます。

出力フォーマットについては，「5.2.2　デバッグ情報の種類と出力フォーマット」の「(2)　デバッグ情報の種類と出力フォーマット」の「(f)　ユーザデバッグ情報（文字列）」を参照してください。

使用方法と出力例

COBOLプログラム（ユーザデバッグ情報（メモリ）を出力する）

01 D-ALPH           PIC X(20)
                    VALUE 'Hallo COBOL2002.'.
01 D-ALPH-LEN       PIC S9(9) USAGE COMP VALUE 20.

  CALL 'CBLJDEBUGSTRING' USING CBLJENV D-ALPH D-ALPH-LEN.

デバッグ情報ファイル

(2)　ユーザデバッグ情報（メモリ領域の内容）の出力（CBLJMEMDUMPサービスルーチン）

CBLJMEMDUMPサービスルーチンを呼び出して，デバッグ情報ファイルにメモリ領域の内容を出力できます。

出力フォーマットについては，「5.2.2　デバッグ情報の種類と出力フォーマット」の「(2)　デバッグ情報の種類と出力フォーマット」の「(g)　ユーザデバッグ情報（メモリ）」を参照してください。

使用方法と出力例

COBOLプログラム（ユーザデバッグ情報（メモリ）を出力する）

01 D-ALPH           PIC X(20)
                    VALUE 'Hallo COBOL2002.'.
01 D-ALPH-LEN       PIC S9(9) USAGE COMP VALUE 20.
01 D-ALPH-PTR       USAGE POINTER.

  COMPUTE D-ALPH-PTR = FUNCTION ADDR(D-ALPH).
  CALL 'CBLJMEMDUMP' USING CBLJENV D-ALPH-PTR D-ALPH-LEN.

デバッグ情報ファイル

5.3　実行時エラー情報の出力

Javaプログラム呼び出し機能では，Javaプログラム呼び出し機能を使用したCOBOLプログラムで実行時エラーが発生したときの状態をファイル（実行時エラー情報ファイル）に出力できます。

特別な設定をしなくても実行時エラー発生時に常に情報が出力されるため，運用時の障害調査などに使用できます。

5.3.1　実行時エラー情報ファイルに出力される情報

実行時エラー情報ファイルに出力される情報は次のとおりです。

実行時エラー情報

実行時エラー発生時の詳細情報です。

実行時エラー番号と詳細メッセージ

Javaプログラム呼び出し機能の管理領域のダンプリスト（16進形式）

サービスルーチン呼び出し情報

最後に呼び出したサービスルーチンの呼び出し情報です。

呼び出したCOBOLプログラムの情報

指定した引数の内容とメモリ領域のダンプリスト（16進形式）

Java例外情報

Java例外発生時の詳細情報です（ただし，JNI関数または使用するJavaプログラムで例外が発生したときだけ出力されます）。

Java例外情報とバックトレース

最後に呼び出したJNI関数と引数情報

Javaプログラム呼び出し機能の管理領域のダンプリスト（16進形式）

実行環境情報

Javaプログラム呼び出し機能の実行環境情報です。

出力されるフォーマットは，デバッグ情報の出力フォーマットと同じです。

なお，デバッグ情報で出力されるデータのほかに，当社保守員が調査するときに使用するデータが追加で出力されます。

出力例を次に示します。

出力例

5.3.2　実行時エラー情報の出力先

実行時エラー情報ファイルは，次に示すファイル名で出力されます。

CBLJRTERR_YYYYMMDD_hhmmss_ppppp_ttttt

YYYYMMDD_hhmmss

実行時エラー情報出力時のタイムスタンプが出力されます。

ppppp

プロセスID（10進形式）が出力されます。

ttttt

スレッドID（10進形式）が出力されます。

実行時エラー情報ファイルの出力先フォルダの優先順位を次に示します。

環境変数CBLJRTERRに指定したフォルダ

環境変数TEMPに指定したフォルダ

環境変数TMPに指定したフォルダ

カレントフォルダ

注意事項

実行時エラー情報ファイルを出力するときに，ファイルの出力先フォルダは作成しません。出力先はあらかじめ存在している必要があります。環境変数に存在しないフォルダのパスを指定している場合は，優先順位は次の順位に移動します。

ファイルの書き込みでエラーが発生した場合，実行時エラー情報ファイルは出力されません。実行時エラー情報ファイルが出力されない場合の要因を次に示します。確認して対処してください。

・ファイルの出力先フォルダまたは指定したファイルに書き込み権限がない。

・出力するファイル名を加えたパス名の長さがシステムの制限を超える。

・ディスク容量が不足している。

環境変数CBLJRTERRについては，「6.2.2　実行時環境変数の詳細」の「(4)　CBLJRTERR」を参照してください。

5.3.3　実行時エラー情報の出力時の注意事項

実行時エラー情報の出力時の注意事項を次に示します。

Javaプログラム呼び出し機能では，実行時エラー情報ファイルを削除しません。ディスク容量不足の要因となることがあるため，定期的に不要なファイルを削除してください。

障害発生時の調査情報として有効のため，運用時には環境変数CBLJRTERRに"<SUPPRESS>"を指定しないでください。

5.4　Java VM起動オプション情報の収集

起動オプション情報とは，Java VMで異常終了する場合など，Javaプログラム呼び出し機能でエラーの情報が取得できないときの調査に必要な情報です。

Javaプログラム呼び出し機能がJava VMを起動するとき，起動オプション情報を収集します。

5.4.1　起動オプション情報の収集

Javaプログラム呼び出し機能がJava VMを起動するとき，起動オプション情報が出力先ファイル（CBLJRTVMOPT.log）に追加書きで出力されます。起動オプションを複数指定している場合は，指定した数だけレコードが出力されます。

1レコードの出力フォーマットを次に示します。

ファイルの書き込みでエラーが発生した場合，標準エラー出力にデータが出力されます。

5.4.2　起動オプション情報の出力先

起動オプション情報は，CBLJRTVMOPT.logファイルに出力されます。

出力先フォルダは，次に示す優先順位で決定されます。

環境変数CBLJRTVMOPTLOGに指定したフォルダ

環境変数TEMPに指定したフォルダ

環境変数TMPに指定したフォルダ

カレントフォルダ

起動オプション情報の出力先フォルダは，環境変数CBLJRTVMOPTLOGで変更できます。

環境変数CBLJRTVMOPTLOGについては，「6.2.2　実行時環境変数の詳細」の「(7)　CBLJRTVMOPTLOG」を参照してください。

5.4.3　起動オプション情報の出力先の最大サイズ

起動オプション情報の出力先ファイルの既定の最大サイズは，2MBです。

最大サイズのチェックと出力処理を次に示します。

起動オプション情報の書き込みで出力先ファイルが最大サイズを超えない場合，起動オプション情報の出力先ファイルに追加書きします。

起動オプション情報の書き込みで出力先ファイルが最大サイズを超える場合，書き込み前の出力先ファイルをバックアップしたあと，出力先ファイルを新規で作成します。バックアップファイルの名称は，出力先ファイルのファイル名の後ろ1バイトをアンダーバー（_）に置き換えた名称です。すでに同じ名称のファイルが存在する場合は，上書きします。

出力先ファイルのバックアップが失敗したとき，最大サイズを超えて，出力先ファイルに追加書きします。出力時にすでに最大サイズを超えている場合も追加書きします。

環境変数CBLJRTVMOPTLOG_MAXSIZEを指定して最大サイズを変更できます。

環境変数CBLJRTVMOPTLOG_MAXSIZEについては，「6.2.2　実行時環境変数の詳細」の「(8)　CBLJRTVMOPTLOG_MAXSIZE」を参照してください。

6　APIリファレンス

この章では，Javaプログラム呼び出し機能が提供するサービスルーチン，および実行時環境変数について説明します。

6.1　サービスルーチン

ここでは，Javaプログラム呼び出し機能が提供するサービスルーチンについて，基本操作，クラス操作，オブジェクト操作，文字列オブジェクト操作，配列オブジェクト操作，デバッグ操作別に説明します。

Javaプログラム呼び出し機能が提供するサービスルーチンの一覧を次の表に示します。

表6‒1　サービスルーチンの一覧

項番

サービスルーチン

機能

基本操作

1

CBLJINITIALIZE

Javaプログラム呼び出し機能を初期化する。

2

CBLJGETCLASS

Javaクラス参照を返す。

3

CBLJSETSTATICFIELD

クラスフィールドに値を設定する。

4

CBLJGETSTATICFIELD

クラスフィールドの値を取り出す。

5

CBLJSTATICINVOKE

クラスメソッドを呼び出す。

6

CBLJNEW

Javaクラスのインスタンスを生成して，Javaオブジェクト参照を返す。

7

CBLJSETFIELD

インスタンスフィールドに値を設定する。

8

CBLJGETFIELD

インスタンスフィールドから値を取り出す。

9

CBLJINVOKE

インスタンスメソッドを呼び出す。

10

CBLJRELEASE

Javaオブジェクト参照を解放する。

11

CBLJFINALIZE

Javaプログラム呼び出し機能の実行環境を削除する。

クラス操作

12

CBLJGETOBJCLASS

インスタンスの属するJavaクラスのJavaクラス参照を返す。

13

CBLJGETNAME

Javaクラス参照の示すJavaクラスの名前を返す。

14

CBLJGETSUPERCLASS

Javaクラス参照の示すJavaクラスのスーパークラスのJavaクラス参照を返す。

オブジェクト操作

15

CBLJCLASSNAME

インスタンスの属するJavaクラスの名前を返す。

16

CBLJINSTANCEOF

インスタンスがJavaクラス参照で指定されたクラスのインスタンスまたはそのサブクラスのインスタンスかを判定する。

17

CBLJSAMEOBJECT

二つのJavaオブジェクト参照が同じJavaインスタンスを指すかどうかを判定する。

18

CBLJEQUAL

二つのJavaインスタンスが同じ値を持つかどうかを判定する。

19

CBLJCOPY

Javaオブジェクト参照の複製を作成して転記する。

20

CBLJSETNULL

Javaオブジェクト参照用のポインタ項目にNULLを設定する。

文字列オブジェクト操作

21

CBLJXTOSTRING

英数字項目からStringオブジェクトを生成する。

22

CBLJNTOSTRING

日本語項目からStringオブジェクトを生成する。

23

CBLJSTRINGTOX

Stringオブジェクトの文字列を英数字項目に格納する。

24

CBLJSTRINGTON

Stringオブジェクトの文字列を日本語項目に格納する。

25

CBLJSTRLENGTH

Stringオブジェクトの長さ（文字数）を返す。

26

CBLJDISPLAY

Stringオブジェクトの内容を標準出力に出力する。

配列オブジェクト操作

27

CBLJNEWARRAY

配列オブジェクトのインスタンスを生成する。

28

CBLJARRAYLENGTH

配列オブジェクトの要素数を返す。

29

CBLJSETOBJARRAY

オブジェクト型の配列オブジェクトのインデクスが示す要素にオブジェクトを格納する。

30

CBLJGETOBJARRAY

オブジェクト型の配列オブジェクトのインデクスの示す要素からオブジェクトを取り出す。

31

CBLJGETARRAYADDR

基本型の配列オブジェクトから基本型配列のアドレスを取得する。

32

CBLJRELEASEARRAY

基本型配列の内容変更を配列オブジェクトに反映させて，基本型配列の領域を解放する。

デバッグ操作

33

CBLJDEBUGSTRING

ユーザデバッグ情報として文字列情報をデバッグ情報ファイルに出力する。

34

CBLJMEMDUMP

ユーザデバッグ情報としてメモリ領域の内容をデバッグ情報ファイルに出力する。

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集団項目の内容を次の表に示します。

表6‒2　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の型を表す文字列（シグニチャ）を指定します。

基本データ型の場合は，１文字の英数字項目を指定します。

オブジェクト系の型の場合は，CBLJENV集団項目のCBLJSTRMAXLENに指定したサイズの英数字項目を指定します。CBLJENV集団項目のCBLJSTRMAXLENに指定したサイズ以外で定義すると，アクセス違反などの不正な動作となります。

注※2

この値は必ずLOW-VALUEとなるように定義してください。

注※3

DATA-AREA項目には，Javaの型に対応するCOBOLのデータ項目を指定します。

Javaの型，Javaの型を表す文字列（シグニチャ），Javaの型に対応するCOBOLのデータ項目の関係を次の表に示します。

表6‒3　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

注※1

1バイト2進機能（-Bin1Byteコンパイラオプションを指定）を使用する場合です。

注※2

1バイト2進機能を使用する場合，対応するCOBOLの数字項目のけた数の範囲がこの表で示す値と異なる個所があります。1バイト2進機能については，マニュアル「COBOL2002　言語　拡張仕様編」を参照してください。

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.

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オブジェクト参照を使って，ほかのサービスルーチンを呼び出さないでください。

6.1.3　クラス操作

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

(1)　CBLJGETOBJCLASS

CBLJGETOBJCLASSサービスルーチンは，Javaのインスタンスの属するJavaクラスのJavaクラス参照を返します。

形式

CALL 'CBLJGETOBJCLASS' USING  引数1  引数2  引数3.

引数

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

引数2には，Javaオブジェクト参照を持つポインタ項目を指定します。

引数3には，Javaクラス参照を受け取るポインタ項目を指定します。

戻り値

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

Javaクラス参照の取得に失敗した場合は実行時エラーとなります。

(2)　CBLJGETNAME

CBLJGETNAMEサービスルーチンは，java/lang/Class.getNameメソッドを呼び出して，Javaクラス参照の示すJavaクラスの名前（パッケージ名とクラス名の区切りはピリオド）を返します。

形式

CALL 'CBLJGETNAME' USING  引数1  引数2  引数3  引数4.

引数

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

引数2には，Javaクラス参照を持つポインタ項目を指定します。

引数3には，クラス名を受け取る英数字項目を指定します。

引数4には，クラス名を受け取る英数字項目のサイズ（文字数）を持つ，4バイト2進形式の数字項目を指定します。

戻り値

RETURN-CODE特殊レジスタに0（正常）または1（サイズが不足）を返します。

名前の取得に失敗した場合は実行時エラーとなります。

注意事項

RETURN-CODEが1の場合，引数3に指定した項目に，引数4に指定した長さまでのJavaクラスの名前を設定します。

(3)　CBLJGETSUPERCLASS

CBLJGETSUPERCLASSサービスルーチンは，Javaクラス参照の示すJavaクラスのスーパークラスのJavaクラス参照を返します。

形式

CALL 'CBLJGETSUPERCLASS' USING  引数1  引数2  引数3.

引数

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

引数2には，Javaクラス参照を持つポインタ項目を指定します。

引数3には，スーパークラスのJavaクラス参照を受け取るポインタ項目を指定します。

戻り値

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

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

6.1.4　オブジェクト操作

ここでは，Javaプログラム呼び出し機能が提供するオブジェクト操作のサービスルーチンについて説明します。

(1)　CBLJCLASSNAME

CBLJCLASSNAMEサービスルーチンは，Javaのインスタンスの属するJavaクラスの名前（パッケージ名とクラス名の区切りはピリオド）を返します。

形式

CALL 'CBLJCLASSNAME' USING  引数1  引数2  引数3  引数4.

引数

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

引数2には，Javaオブジェクト参照を持つポインタ項目を指定します。

引数3には，クラス名を受け取る英数字項目を指定します。

引数4には，クラス名を受け取る英数字項目のサイズ（文字数）を持つ，4バイト2進形式の数字項目を指定します。

戻り値

RETURN-CODE特殊レジスタに0（正常）または1（サイズが不足）を返します。

名前の取得に失敗した場合は実行時エラーとなります。

注意事項

RETURN-CODEが1の場合，引数3に指定した項目に，引数4に指定した長さまでのJavaクラスの名前を設定します。

(2)　CBLJINSTANCEOF

CBLJINSTANCEOFサービスルーチンは，JavaのインスタンスがJavaクラス参照で指定されたクラスのインスタンスまたはそのサブクラスのインスタンスである場合，1を返します。そうでない場合，0を返します。

形式

CALL 'CBLJINSTANCEOF' USING  引数1  引数2  引数3.

引数

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

引数2には，Javaオブジェクト参照を持つポインタ項目を指定します。

引数3には，Javaクラス参照を持つポインタ項目を指定します。

戻り値

RETURN-CODE特殊レジスタに1（真）または0（偽）を返します。

判定自体に失敗した場合は実行時エラーとなります。

(3)　CBLJSAMEOBJECT

CBLJSAMEOBJECTサービスルーチンは，二つのJavaオブジェクト参照が同じJavaインスタンスを指す場合，1を返します。そうでない場合，0を返します。

形式

CALL 'CBLJSAMEOBJECT' USING  引数1  引数2  引数3.

引数

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

引数2には，Javaオブジェクト参照を持つポインタ項目を指定します。

引数3には，Javaオブジェクト参照を持つポインタ項目を指定します。

戻り値

RETURN-CODE特殊レジスタに1（真）または0（偽）を返します。

判定自体に失敗した場合は実行時エラーとなります。

(4)　CBLJEQUAL

CBLJEQUALサービスルーチンは，二つのJavaオブジェクト参照の指すJavaインスタンスが同じ値を持つ場合，1を返します。そうでない場合，0を返します。

二つの文字列オブジェクトが同じ文字列を持つかをチェックする場合などで使用します。

形式

CALL 'CBLJEQUAL' USING  引数1  引数2  引数3.

引数

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

引数2には，Javaオブジェクト参照を持つポインタ項目を指定します。

引数3には，Javaオブジェクト参照を持つポインタ項目を指定します。

戻り値

RETURN-CODE特殊レジスタに1（真）または0（偽）を返します。

判定自体に失敗した場合は実行時エラーとなります。

注意事項

Javaインスタンスが同じ値を持つかどうかの判定は，Javaインスタンスのequalsメソッドの結果に従います。

(5)　CBLJCOPY

CBLJCOPYサービスルーチンは，引数2のJavaオブジェクト参照の複製を作成して，引数3に格納します。

その際，引数4がNULLポインタでなければ，引数2のインスタンスが引数4の型（クラスまたはインタフェース）にキャストできるかどうかをチェックします。キャストできない場合，複製は作成しないで，引数3にNULLポインタを設定します。

引数4がNULLポインタなら，無条件に引数2のJavaオブジェクト参照の複製を引数3に格納します。

引数3にJavaオブジェクト参照が格納されている場合は，解放してから格納します。

形式

CALL 'CBLJCOPY' USING  引数1  引数2  引数3  引数4.

引数

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

引数2には，Javaオブジェクト参照を持つポインタ項目を指定します。

引数3には，Javaオブジェクト参照を受け取るポインタ項目を指定します。

引数4には，Javaクラス参照を持つポインタ項目を指定します。引数3に格納可能なオブジェクトの型（クラスまたはインタフェース）をJavaクラス参照で指定します。

戻り値

RETURN-CODE特殊レジスタに0（コピー成功）または1（コピー失敗）を返します。

キャストできるかどうかのチェック自体ができなかった場合は，実行時エラーとなります。

注意事項

Javaオブジェクト参照は，COMPUTE文やSET文では転記しないで，必ずCBLJCOPYサービスルーチンで複製を作成して転記してください。

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

(6)　CBLJSETNULL

CBLJSETNULLサービスルーチンは，Javaオブジェクト参照用のポインタ項目にNULLを設定します。Javaオブジェクト参照が格納されている場合は，解放してからNULLを設定します。CBLJSETNULLサービスルーチンは，ポインタ項目にNULLや不正なJavaオブジェクト参照が入っていてもエラーとならないことを除けば，動作はCBLJRELEASEサービスルーチンと同じです。

形式

CALL 'CBLJSETNULL' USING  引数1  引数2.

引数

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

引数2には，NULLを設定するJavaオブジェクト参照用のポインタ項目を指定します。ポインタ項目にNULLが入っていてもかまいません。

戻り値

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

注意事項

手続き部でJavaオブジェクト参照用のポインタ項目にNULLを設定する場合は，COMPUTE文，SET文またはINITIALIZE文を使用しないで，必ずCBLJSETNULLサービスルーチンを使用してください。

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

6.1.5　文字列オブジェクト操作

ここでは，Javaプログラム呼び出し機能が提供する文字列オブジェクト操作のサービスルーチンについて説明します。

(1)　CBLJXTOSTRING

CBLJXTOSTRINGサービスルーチンは，英数字項目のデータを変換してStringオブジェクト（文字コードはUTF-16）を生成して，そのJavaオブジェクト参照を返します。

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

英数字項目のデータの文字コードは，COBOL2002で実行時に使用する文字コードに従います。Unicode機能と同時に使用する場合，英数字項目のデータの文字コードはUTF-8として扱います。COBOL2002の実行時環境変数CBLLANGの値と英数字項目のデータの文字コードの関係を次の表に示します。

表6‒5　環境変数CBLLANGの値と英数字項目のデータの文字コード

環境変数CBLLANGの値

英数字項目のデータの文字コード

指定なし，またはUNICODE以外

シフトJIS

UNICODE

UTF-8

COBOLで使用する文字集合については，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

形式

CALL 'CBLJXTOSTRING' USING  引数1  引数2  引数3  引数4.

引数

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

引数2には，英数字項目を指定します。

引数3には，英数字項目のサイズ（バイト数）を持つ4バイト2進形式の数字項目を指定します。

引数4には，Javaオブジェクト参照を受け取るポインタ項目を指定します。

戻り値

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

Stringオブジェクトの生成に失敗した場合は実行時エラーとなります。

規則

英数字データの終わりの連続した半角空白文字は無視されます。

英数字項目のデータの末尾が2バイト文字の1バイト目である場合は無視されます。

(2)　CBLJNTOSTRING

CBLJNTOSTRINGサービスルーチンは，日本語項目のデータを変換してStringオブジェクト（文字コードはUTF-16）を生成し，そのJavaオブジェクト参照を返します。

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

日本語項目のデータの文字コードは，COBOL2002で実行時に使用する文字コードに従います。Unicode機能と同時に使用する場合，日本語項目のデータの文字コードはUTF-16として扱います。COBOL2002の実行時環境変数CBLLANGの値と日本語項目のデータの文字コードの関係を次の表に示します。

表6‒6　環境変数CBLLANGの値と日本語項目のデータの文字コード

環境変数CBLLANGの値

日本語項目のデータの文字コード

指定なし，またはUNICODE以外

シフトJIS

UNICODE

UTF-16

COBOLで使用する文字集合については，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

形式

CALL 'CBLJNTOSTRING' USING  引数1  引数2  引数3  引数4.

引数

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

引数2には，日本語項目を指定します。

引数3には，日本語項目のサイズ（文字数）を持つ4バイト2進形式の数字項目を指定します。

引数4には，Javaオブジェクト参照を受け取るポインタ項目を指定します。

戻り値

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

Stringオブジェクトの生成に失敗した場合は実行時エラーとなります。

規則

日本語データの終わりの連続した全角空白文字は無視されます。

(3)　CBLJSTRINGTOX

CBLJSTRINGTOXサービスルーチンは，Stringオブジェクトの文字列（文字コードはUTF-16）を変換して英数字項目に格納します。

Stringオブジェクトの文字列は，COBOL2002で実行時に使用する文字コードに従って変換されます。Unicode機能と同時に使用する場合，英数字項目のデータの文字コードはUTF-8となります。COBOL2002の実行時環境変数CBLLANGの値と英数字項目のデータの文字コードの関係を次の表に示します。

表6‒7　環境変数CBLLANGの値と英数字項目のデータの文字コード

環境変数CBLLANGの値

英数字項目のデータの文字コード

指定なし，またはUNICODE以外

シフトJIS

UNICODE

UTF-8

COBOLで使用する文字集合については，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

形式

CALL 'CBLJSTRINGTOX' USING  引数1  引数2  引数3  引数4.

引数

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

引数2には，StringオブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。

引数3には，英数字データを受け取る英数字項目を指定します。

引数4には，英数字項目のサイズ（バイト数）を持つ4バイト2進形式の数字項目を指定します。

戻り値

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

データ変換に失敗した場合は実行時エラーとなります。

規則

英数字項目の余った部分には半角空白文字が挿入されます。

英数字項目の末尾の文字が2バイト文字の1バイト目になる場合は半角空白が設定されます。

(4)　CBLJSTRINGTON

CBLJSTRINGTONサービスルーチンは，Stringオブジェクトの文字列（文字コードはUTF-16）を変換して日本語項目に格納します。

Stringオブジェクトの文字列は，COBOL2002で実行時に使用する文字コードに従って変換されます。Unicode機能と同時に使用する場合，日本語項目のデータの文字コードはUTF-16となります。COBOL2002の実行時環境変数CBLLANGの値と日本語項目のデータの文字コードの関係を次の表に示します。

表6‒8　環境変数CBLLANGの値と日本語項目のデータの文字コード

環境変数CBLLANGの値

日本語項目のデータの文字コード

指定なし，またはUNICODE以外

シフトJIS

UNICODE

UTF-16

COBOLで使用する文字集合については，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

形式

CALL 'CBLJSTRINGTON' USING  引数1  引数2  引数3  引数4.

引数

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

引数2には，StringオブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。

引数3には，日本語データを受け取る日本語項目を指定します。

引数4には，日本語項目のサイズ（文字数）を持つ4バイト2進形式の数字項目を指定します。

戻り値

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

データ変換に失敗した場合は実行時エラーとなります。

規則

日本語項目の余った部分には全角空白文字が挿入されます。

注意事項

Unicode機能を使用していない場合，Javaプログラムから渡されたStringオブジェクトのデータの内容を変換したときに，1バイトとなる文字が含まれているときの動作は保証しません。

(5)　CBLJSTRLENGTH

CBLJSTRLENGTHサービスルーチンは，Stringオブジェクトの文字列の文字数を返します。

形式

CALL 'CBLJSTRLENGTH' USING  引数1  引数2  引数3.

引数

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

引数2には，StringオブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。

引数3には，文字数を受け取る4バイト2進形式の数字項目を指定します。

戻り値

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

長さの取得に失敗した場合は実行時エラーとなります。

(6)　CBLJDISPLAY

CBLJDISPLAYサービスルーチンは，Stringオブジェクトの内容をJavaプログラムの標準出力に出力します。

形式

CALL 'CBLJDISPLAY' USING  引数1  引数2.

引数

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

引数2には，StringオブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。

戻り値

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

内容の出力に失敗した場合は実行時エラーとなります。

注意事項

CBLJDISPLAYサービスルーチンは，System.out.printlnでJavaの標準出力にデータを出力します。COBOLプログラムの出力先にStringオブジェクトの内容を出力したい場合は，英数字項目または日本語項目にデータを取得したあと，DISPLAY文を使用して出力してください。

6.1.6　配列オブジェクト操作

ここでは，Javaプログラム呼び出し機能が提供する配列オブジェクト操作のサービスルーチンについて説明します。

(1)　CBLJNEWARRAY

CBLJNEWARRAYサービスルーチンは，配列オブジェクトのインスタンスを生成して，そのJavaオブジェクト参照を返します。

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

形式

CALL 'CBLJNEWARRAY' USING  引数1  引数2  引数3  引数4.

引数

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

引数2には，作成する配列の型を示す文字列を英数字項目で指定します。英数字項目のサイズは，CBLJENV集団項目のCBLJSTRMAXLEN項目に指定した値と同じ値を指定してください。

配列の型と配列の型を示す文字列を次の表に示します。

表6‒9　配列の型と配列の型を示す文字列

項番

配列の型

配列の型を示す文字列

1

byte配列

[B

2

char配列

[C

3

short配列

[S

4

int配列

[I

5

long配列

[J

6

float配列

[F

7

double配列

[D

8

boolean配列

[Z

9

オブジェクト配列

[Lクラス完全修飾名；

10

配列オブジェクトの配列

[配列の型の文字列

2次元文字列配列の指定例を次に示します。

例）

       [[Ljava/lang/String;

引数3には，作成する配列の要素数を持つ4バイト2進形式の数字項目を指定します。

引数4には，配列オブジェクトのJavaオブジェクト参照を受け取るポインタ項目を指定します。

戻り値

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

配列オブジェクトの生成に失敗した場合は実行時エラーとなります。

(2)　CBLJARRAYLENGTH

CBLJARRAYLENGTHサービスルーチンは，配列オブジェクトの要素数を返します。

形式

CALL 'CBLJARRAYLENGTH' USING  引数1  引数2  引数3.

引数

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

引数2には，配列オブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。

引数3には，要素数を受け取る4バイト2進形式の数字項目を指定します。

戻り値

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

長さの取得に失敗した場合は実行時エラーとなります。

(3)　CBLJSETOBJARRAY

CBLJSETOBJARRAYサービスルーチンは，オブジェクト型の配列オブジェクトのインデクスが示す要素に，オブジェクトを格納します。

形式

CALL 'CBLJSETOBJARRAY' USING  引数1  引数2  引数3  引数4.

引数

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

引数2には，配列オブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。

引数3には，インデクスを持つ4バイト2進形式の数字項目を指定します。

引数4には，格納するJavaオブジェクト参照を持つポインタ項目を指定します。

戻り値

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

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

注意事項

引数3には，Javaの要素のインデクス（0〜（配列の要素の数-1））を指定する必要があります。

(4)　CBLJGETOBJARRAY

CBLJGETOBJARRAYサービスルーチンは，オブジェクト型の配列オブジェクトのインデクスの示す要素からオブジェクトを取り出します。

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

形式

CALL 'CBLJGETOBJARRAY' USING  引数1  引数2  引数3  引数4.

引数

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

引数2には，配列オブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。

引数3には，インデクスを持つ4バイト2進形式の数字項目を指定します。

引数4には，Javaオブジェクト参照を受け取るポインタ項目を指定します。

戻り値

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

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

注意事項

引数3には，Javaの要素のインデクス（0〜（配列の要素の数-1））を指定する必要があります。

(5)　CBLJGETARRAYADDR

CBLJGETARRAYADDRサービスルーチンは，基本型の配列オブジェクトから基本型配列のアドレスを取得します。

操作が完了した基本型配列の内容はCBLJRELEASEARRAYサービスルーチンで配列オブジェクトに反映します。

形式

CALL 'CBLJGETARRAYADDR' USING  引数1  引数2  引数3.

引数

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

引数2には，配列オブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。

引数3には，基本型配列のアドレスを受け取るポインタ項目を指定します。

戻り値

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

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

注意事項

配列の値を変更しない場合も，取得した配列のアドレスが不要になったときにCBLJRELEASEARRAYサービスルーチンを呼び出してください。呼び出さない場合は，領域が解放されないでメモリ不足の要因となることがあります。

(6)　CBLJRELEASEARRAY

CBLJRELEASEARRAYサービスルーチンは，CBLJGETARRAYADDRで取得した基本型配列の内容変更を配列オブジェクトに反映させて，基本型配列の領域を解放します。

形式

CALL 'CBLJRELEASEARRAY' USING  引数1  引数2  引数3.

引数

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

引数2には，配列オブジェクトのJavaオブジェクト参照を持つポインタ項目を指定します。

引数3には，基本型配列のアドレスを持つポインタ項目を指定します。

戻り値

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

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

6.1.7　デバッグ操作

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

(1)　CBLJDEBUGSTRING

CBLJDEBUGSTRINGサービスルーチンは，ユーザデバッグ情報として，文字列情報をデバッグ情報ファイルに出力します。

形式

CALL 'CBLJDEBUGSTRING' USING  引数1  引数2  引数3.

引数

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

引数2には，英数字項目を指定します。

引数3には，引数2の英数字項目の長さを持つ4バイト2進形式の数字項目を指定します。

戻り値

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

規則

環境変数CBLJRTDUMPに指定したデバッグ情報ファイルに，引数2と引数3で指定した文字列を出力します。環境変数CBLJRTDUMPを指定していない場合は出力しません。デバッグ情報ファイルの指定については，「5.2.1　デバッグ情報出力の指定方法」を参照してください。

引数2に指定した英数字項目の値を，引数3の長さだけ出力します。ただし，引数2の値にNULL終端文字（X'00'）が含まれる場合は，それ以降の文字列を出力しません。

引数3に，引数2の英数字項目の長さを超えた値を指定した場合の動作は保証しません。

CBLJINITIALIZEサービスルーチンを呼び出す前に，CBLJDEBUGSTRINGサービスルーチンを呼び出す場合，引数1に指定するCBLJENV集団項目は初期化されている必要があります。

注意事項

CBLJDEBUGSTRINGサービスルーチンは，引数2と引数3で指定された値をそのまま出力します。値の末尾に不完全な多バイト文字が格納されていてもそのまま出力します。

(2)　CBLJMEMDUMP

CBLJMEMDUMPサービスルーチンは，ユーザデバッグ情報として，メモリ領域の内容をデバッグ情報ファイルに出力します。

形式

CALL 'CBLJMEMDUMP' USING 引数1  引数2  引数3.

引数

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

引数2には，領域の先頭アドレスを示すポインタ項目を指定します。

引数3には，出力する領域のサイズ（バイト数）を持つ4バイト2進形式の数字項目を指定します。

戻り値

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

規則

環境変数CBLJRTDUMPに指定したデバッグ情報ファイルに，引数2と引数3で指定したメモリ領域の内容を出力します。環境変数CBLJRTDUMPを指定していない場合は出力しません。デバッグ情報ファイルの指定については，「5.2.1　デバッグ情報出力の指定方法」を参照してください。

CBLJMEMDUMPサービスルーチンは，引数2に指定したアドレス位置から引数3に指定したサイズ（バイト数）だけ，16進形式の領域ダンプリストを出力します。領域ダンプリストの形式については，「5.2.2　デバッグ情報の種類と出力フォーマット」の「(3)　データの種類と出力フォーマット」の「(l)　領域のダンプリストの出力フォーマット」を参照してください。

CBLJINITIALIZEサービスルーチンを呼び出す前に，CBLJMEMDUMPサービスルーチンを呼び出す場合，引数1に指定するCBLJENV集団項目は初期化されている必要があります。

注意事項

引数2には，作業場所節のデータ項目など，実行中のCOBOLプログラムで参照できる領域の先頭アドレスとサイズを指定してください。サイズが不明な領域は指定しないでください。また，参照できるサイズより大きなサイズを指定すると，バッファオーバーランが発生します。参照できるサイズを指定してください。

CBLJENV集団項目の従属項目のポインタ項目やオブジェクト参照のポインタ項目など，Javaプログラム呼び出し機能が実行時に確保する領域のアドレスも指定できません。これらのポインタ項目を指定した場合の動作は保証しません。

6.2　実行時環境変数

ここでは，実行時環境変数について説明します。

環境変数は次に示す形式で説明します。

環境変数名=環境変数の値

環境変数の値に関する注意事項

環境変数の値が固定値の場合，大文字と小文字は等価とみなします。

空白を含むパス名など，環境変数の値の一部に空白を指定する場合，引用符（"）で囲まないでください。引用符を指定した場合，環境変数の値の一部として取り扱います。

実行時環境変数の一覧を次の表に示します。

表6‒10　実行時環境変数の一覧

項番

実行時環境変数

機能

1

CBLJRTBIGENDIAN

ビッグエンディアン形式で取り扱うバイナリデータの種類を指定する。

2

CBLJRTDUMP

デバッグ情報を出力するデバッグ情報ファイルのパス名を指定する。

3

CBLJRTDUMP_MAXSIZE

デバッグ情報を出力するデバッグ情報ファイルの最大サイズを指定する。

4

CBLJRTERR

実行時エラー情報ファイルの出力有無，および実行時エラー情報の出力先フォルダのパス名を指定する。

5

CBLJRTVMDEFAULTOPTIONS

デフォルトのJava VM起動オプションを指定する。

6

CBLJRTVMOPTIONS

プロセス単位のJava VM起動オプションを指定する。

7

CBLJRTVMOPTLOG

Java VM起動オプション情報の出力先を変更する場合に，出力先フォルダのパス名を指定する。

8

CBLJRTVMOPTLOG_MAXSIZE

Java VM起動オプション情報の出力先ファイルの最大サイズを指定する。

また，Javaプログラム呼び出し機能で使用するCOBOL2002実行時環境変数の一覧を次の表に示します。COBOL2002実行時環境変数については，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

表6‒11　 COBOL2002実行時環境変数の一覧

項番

環境変数名

指定する内容

1

CBLLANG

動作する言語環境（文字コード）を指定する。

2

CBLUNIENDIAN

用途がNATIONALの項目に対するUnicodeのバイトオーダを指定する。

6.2.1　実行時環境変数の設定

Javaプログラム呼び出し機能の実行時の環境を実行時環境変数で指定します。

なお，Javaプログラム呼び出し機能が実行時に使用する環境変数では，プロセス実行前に指定した環境変数だけが有効となります。実行支援およびCOBOLプログラムの環境変数へのアクセスで設定した環境変数は有効となりません。

COBOLプログラムの実行環境の設定方法については，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

Cosminexus環境下でCosminexus連携機能と併用する場合，Cosminexus連携機能の設定が必要です。Cosminexus連携機能については，マニュアル「COBOL2002　Cosminexus連携機能ガイド」を参照してください。

6.2.2　実行時環境変数の詳細

実行時環境変数について説明します。

(1)　CBLJRTBIGENDIAN

ビッグエンディアン形式で取り扱うバイナリデータの種類を指定します。指定しない場合，システムのエンディアンの形式で取り扱われます。

この環境変数は，システムのエンディアンがリトルエンディアン形式の場合に有効です。

形式

CBLJRTBIGENDIAN=データの種類

データの種類

BIN，FLOATのどちらか，または両方を指定します。両方指定する場合は，コロン（:）で区切ります。

例）

CBLJRTBIGENDIAN=BIN:FLOAT

規則

この環境変数を指定した場合，指定したデータの種類のJavaデータに対応するCOBOLデータ項目はビッグエンディアン形式として取り扱われます。

表6‒12　Javaデータ型との対応

指定値

Javaデータ型

BIN

char／short／int／long

FLOAT

float／double

注意事項

データの種類は，COBOLプログラムの-BigEndianコンパイラオプションの指定と合わせて指定する必要があります。-BigEndianコンパイラオプションの指定と矛盾している場合の動作は保証しません。

表6‒13　コンパイラオプションとの対応

指定値

コンパイラオプション

BIN

-BigEndian,Bin

FLOAT

-BigEndian,Float

(2)　CBLJRTDUMP

デバッグ情報を出力するデバッグ情報ファイルのパス名を指定します。

形式

CBLJRTDUMP=ファイルパス

ファイルパス

デバッグ情報ファイルのパス名を絶対パスで指定します。デバッグ情報ファイルのファイル名にプロセスIDを付けない場合は，最後にセミコロン（;）を付けて指定します。

規則

デバッグ情報は指定したファイルに追加されます。

実際に書き込むファイル名は，拡張子の直前にアンダーバーとプロセスID（_プロセスID）を付けた名称です。プロセスIDを付けたくない場合は，指定するファイルパス名の最後にセミコロン（;）を付けて指定してください。

デバッグ情報の出力ファイル名の例（プロセスIDが1000の場合）を次の表に示します。

表6‒14　デバッグ情報の出力ファイル名の例（プロセスIDが1000の場合）

項番

環境変数の値

出力するファイル名

1

C:¥tmp¥…¥sample.log

C:¥tmp¥…¥sample_1000.log

2

C:¥tmp¥…¥sample

C:¥tmp¥…¥sample_1000

3

C:¥tmp¥…¥sample.log;

C:¥tmp¥…¥sample.log

4

C:¥tmp¥…¥sample;

C:¥tmp¥…¥sample

注意事項

プロセスIDを付けない出力ファイル名を指定する場合，別のプロセスですでに同じファイルを使用しているとき，同時にファイルを開くことができないため，デバッグ情報を出力できません。この場合は，プロセスごとにローカライズされる環境変数の指定方法で，それぞれ異なるファイル名を使用するように出力ファイル名を指定してください。

ファイルの書き込みでエラーが発生した場合，デバッグ情報は出力されません。このとき，実行時エラーは発生しません。要因を確認して対処してください。

ファイルの書き込みでエラーが発生する要因を次に示します。

・ファイルの出力先フォルダがない。

・ファイルの出力先フォルダまたは指定したファイルに書き込み権限がない。

・別のプロセスで，すでに同じ名称のファイルが開かれている。

・ディスク容量が不足している。

ファイルの出力先フォルダは作成されません。存在しているフォルダを出力先フォルダとして指定してください。

デバッグ情報の出力については，「5.2　デバッグ情報の出力」を参照してください。

(3)　CBLJRTDUMP_MAXSIZE

デバッグ情報を出力するデバッグ情報ファイルの最大サイズを指定します。

形式

CBLJRTDUMP_MAXSIZE=最大サイズ

最大サイズ

デバッグ情報ファイルの最大サイズを示す数値を0〜2,000の範囲（MB単位）で指定します。

規則

環境変数CBLJRTDUMPを指定していない場合，この環境変数は無効です。

この環境変数を指定しない場合，または無効な値を指定している場合の既定値は，10です。

注意事項

この環境変数に0を指定した場合，ファイルの最大サイズのチェックをしないで，デバッグ情報をファイルへ書き込みます。0を指定する場合は，ディスクの残容量に注意してください。

この環境変数に0以外の値を指定した場合の動作を次に示します。

デバッグ情報の書き込みで指定した最大サイズを超えない場合，指定したデバッグ情報ファイルに追加書きします。

デバッグ情報の書き込みで，デバッグ情報ファイルが指定した最大サイズを超える場合，書き込み前のデバッグ情報ファイルをバックアップしたあと，デバッグ情報ファイルを新規作成します。バックアップファイルの名称は，デバッグ情報ファイルのファイル名の後ろ1バイトをアンダーバー（_）に置き換えた名称です。すでに同じ名称のファイルが存在する場合は，上書きします。

デバッグ情報ファイルのバックアップが失敗した場合，指定した最大サイズを超えて，指定したデバッグ情報ファイルに追加書きします。書き込み時にすでに指定した最大サイズを超えている場合も追加書きします。

デバッグ情報の出力については，「5.2　デバッグ情報の出力」を参照してください。

(4)　CBLJRTERR

実行時エラー情報ファイルの出力有無，および実行時エラー情報の出力先フォルダのパス名を指定します。

形式

CBLJRTERR=｛フォルダパス｜<SUPPRESS>｝

フォルダパス

実行時エラー情報の出力先フォルダのパス名を絶対パスで指定します。

<SUPPRESS>

実行時エラー情報ファイルを出力しません。

注意事項

ファイルの出力先フォルダは作成されません。存在しているフォルダを出力先フォルダとして指定してください。

ファイルの書き込みでエラーが発生した場合，実行時エラー情報ファイルは出力されません。実行時エラー情報ファイルが出力されない場合の要因を次に示します。確認して対処してください。

・ファイルの出力先フォルダまたは指定したファイルに書き込み権限がない。

・出力するファイル名を加えたパス名の長さがシステムの制限を超える。

・ディスク容量が不足している。

Javaプログラム呼び出し機能では，実行時エラー情報ファイルを削除しません。ディスク容量不足の要因となることがあるため，定期的に不要なファイルを削除してください。

障害発生時の調査情報として有効のため，運用時には環境変数CBLJRTERRに"<SUPPRESS>"を指定しないでください。

コマンドラインで環境変数の値に<SUPPRESS>を指定する場合，引用符で囲む必要があります。

実行時エラー情報の出力については，「5.3　実行時エラー情報の出力」を参照してください。

(5)　CBLJRTVMDEFAULTOPTIONS

デフォルトのJava VM起動オプションを指定します。この環境変数を指定した場合，Javaプログラム呼び出し機能がJava VMを起動するときに指定するデフォルトの起動オプションを変更します。

形式

CBLJRTVMDEFAULTOPTIONS=ファイルパス名

ファイルパス名

デフォルトのJava VM起動オプションを指定したファイルのパス名を絶対パスで指定します。

規則

この環境変数は，Javaプログラム呼び出し機能がJava VMを起動する場合にだけ有効です。CBLJINITIALIZEサービスルーチン呼び出し前に，すでに同じプロセスでJava VMが起動されている場合は有効になりません。

この環境変数を指定した場合，指定したファイルの内容は，Javaプログラム呼び出し機能が起動するすべてのJava VMに起動オプションとして引き渡されます。

ファイルの終端の行も改行で終わっている必要があります。改行コードがない場合は，終端の行に記述したオプションが正しくJava VMに引き渡されません。

注意事項

この環境変数の値に指定したパス名のファイルを読み込めない場合，環境変数を指定したと見なして，Javaプログラム呼び出し機能が保持しているデフォルトの起動オプションを取り消します。

ファイルの形式と規則

デフォルトのJava VM起動オプションを指定したファイルの形式，規則，および指定例を次に示します。

ファイルの形式

テキストファイル形式（使用する文字コードは，シフトJIS）のファイルを指定してください。

ファイルの規則

1行の長さは，0〜1,024バイトの範囲で指定してください。それ以上の長さを指定すると無視されます。

オプションは，1行ごとに一つのオプションを記述してください。1行に複数のオプションを記述した場合の動作は保証しません。

改行だけ，または空白文字（X'20'）だけの行（空白行），行の1バイト目が「#」（X'23'）の行（コメント行）を無視します。

ファイルの指定例

# Java 情報取得の設定
-XX:+PrintGCDetails
-XX:HeapDumpPath=javalogs
-XX:-HeapDumpOnOutOfMemoryError

# システムで使用するclasspath
-Djava.class.path=systemlibs

(6)　CBLJRTVMOPTIONS

プロセス単位のJava VM起動オプションを指定します。この環境変数を指定した場合，Java VMを起動するCOBOLプログラムで指定済みのCBLJENV集団項目のCBLJVMOPTIONS項目が無効になります。

形式

CBLJRTVMOPTIONS=ファイルパス名

ファイルパス名

Java VMの起動オプションを指定したファイルのパス名を絶対パスで指定します。

規則

この環境変数は，Javaプログラム呼び出し機能がJava VMを起動する場合にだけ有効です。CBLJINITIALIZEサービスルーチン呼び出し前に，すでに同じプロセスでJava VMが起動されているときは有効になりません。

この環境変数を指定した場合，Java VMを起動するCOBOLプログラムですでに設定しているCBLJENV集団項目のCBLJVMOPTIONS項目は無効になります。必要なオプションをすべて指定してください。

注意事項

この環境変数の値に指定したパス名のファイルを読み込めない場合，環境変数を指定したと見なして，CBLJENV集団項目のCBLJVMOPTIONS項目の指定を無効とします。CBLJENV集団項目のCBLJVMOPTIONS項目の指定を有効とするには，環境変数の登録を削除してください。

ファイルの形式と規則

ファイルの形式は，環境変数CBLJRTVMDEFAULTOPTIONSと同じです。ファイルの形式については，「(5)　CBLJRTVMDEFAULTOPTIONS」を参照してください。

(7)　CBLJRTVMOPTLOG

Java VM起動オプション情報の出力先を変更する場合に，出力先フォルダのパス名を指定します。

形式

CBLJRTVMOPTLOG=フォルダパス

フォルダパス

出力先フォルダのパス名を絶対パスで指定します。

規則

Java VM起動オプション情報は，CBLJRTVMOPT.logファイルに出力されます。

この環境変数を指定しない場合，または無効な値を指定した場合，既定の出力先フォルダにJava VM起動オプション情報が出力されます。既定の出力先フォルダは，次に示す優先順位で決定されます。

1.環境変数TEMPに指定したフォルダ

2.環境変数TMPに指定したフォルダ

3.カレントフォルダ

Java VM起動オプション情報については，「5.4　Java VM起動オプション情報の収集」を参照してください。

(8)　CBLJRTVMOPTLOG_MAXSIZE

Java VM起動オプション情報の出力先ファイルの最大サイズを指定します。

形式

CBLJRTVMOPTLOG_MAXSIZE=最大サイズ

最大サイズ

変更する最大サイズを示す数値を0〜2,000の範囲（MB単位）で指定します。

規則

この環境変数を指定しない場合，または無効な値を指定した場合の既定値は，2です。

注意事項

この環境変数に0を指定した場合，ファイルの最大サイズのチェックをしないで，起動オプション情報をファイルへ書き込みます。0を指定する場合は，ディスクの残容量に注意してください。

この環境変数に0以外の値を指定した場合の動作を次に示します。

起動オプション情報の書き込みで指定した最大サイズを超えない場合，指定した起動オプション情報の出力先ファイルに追加書きします。

起動オプション情報の書き込みで出力先ファイルが指定した最大サイズを超える場合，書き込み前の出力先ファイルをバックアップしたあと，出力先ファイルを新規で作成します。バックアップファイルの名称は，出力先ファイルのファイル名の後ろ1バイトをアンダーバー（_）に置き換えた名称です。すでに同じ名称のファイルが存在する場合は，上書きします。

出力先ファイルのバックアップが失敗した場合，指定した最大サイズを超えて，指定した出力先ファイルに追加書きします。書き込み時にすでに指定した最大サイズを超えている場合も追加書きします。

Java VM起動オプション情報については，「5.4　Java VM起動オプション情報の収集」を参照してください。

7　プログラム作成支援ツール

この章では，Javaプログラム呼び出し機能が提供するプログラム作成支援ツールについて説明します。

なお，プログラム作成支援ツールは，COBOL2002 Developer Professionalでだけ提供するツールです。

7.1　プログラム作成支援ツールの概要

プログラム作成支援ツールは，Javaプログラム呼び出し機能を使用するCOBOLコードを生成するツールです。このツールを使用することで，使用するJavaプログラムに合わせたCOBOLプログラムの作成が容易になります。

プログラム作成支援ツールの概要を次の図に示します。

図7‒1　プログラム作成支援ツールの概要

プログラム作成支援ツールは，Java実行ファイルまたはJavaアーカイブファイルで定義されているJavaの機能を使用するCOBOLプログラムを生成します。生成できるCOBOLプログラムは次に示す2種類です。

Javaクラス利用サンプル

使用するJavaプログラムから，Javaのフィールドやメソッドを利用するCOBOLコードのサンプルを生成します。

集団項目データ交換プログラム

使用するJavaプログラムから，Javaのフィールドに対応するデータ項目を含むCOBOL集団項目を定義した登録集原文と，一括でデータの取得や設定をするCOBOLプログラムを生成します。

生成したCOBOLプログラムは，編集後，COBOL2002コンパイラでコンパイルし，Javaプログラム呼び出し機能の実行時ライブラリを使用して実行します。

7.1.1　プログラム作成支援ツールの特長

プログラム作成支援ツールを使用すると，Javaプログラム呼び出し機能を使用してJavaプログラムを使用するCOBOLプログラムを自動で生成できます。生成されたCOBOLプログラムは編集できるため，必要な定義や処理を選択して使用することで，Javaプログラム呼び出し機能を使用する際のコーディング量を削減でき，Javaのフィールドやメソッドの使用が容易になります。

Javaプログラム呼び出し機能を使用してJavaプログラムを使用するには，少なくとも次に示すコードをCOBOLプログラムに記述する必要があります。

Javaプログラム呼び出し機能の初期化

オブジェクト参照およびクラス参照の生成

Javaのフィールドの参照，設定，およびメソッドの呼び出し

Javaプログラム呼び出し機能の終了

sample.javaのjavaMethodメソッドをJavaプログラム呼び出し機能で呼び出す場合のCOBOLプログラムの例を次に示します。

sample.java

javaMethodメソッドを呼び出すCOBOLプログラム

javaMethodメソッドを呼び出すCOBOLプログラムのように，一つのメソッドを呼ぶ場合でも次に示す課題があります。

1回のメソッド呼び出しや変数参照だけで10〜20ステップのコーディングが必要となる。

サービスルーチンに渡す引数リストの準備など，Javaプログラム呼び出し機能の作法的なコーディングに時間を取られる。

プログラム作成支援ツールを使用してCOBOLプログラムを自動で生成することで，これらの課題を解決できます。

7.1.2　プログラム作成支援ツールの前提条件

プログラム作成支援ツールは，32bit版COBOL2002 Developer Professionalと64bit版COBOL2002 Developer Professionalで使用できます。

このマニュアルの記述は，特に記載しないかぎり，32bit版COBOL2002 Developer Professionalと64bit版COBOL2002 Developer Professionalのプログラム作成支援ツールで共通です。

7.1.3　生成例で使用するJavaプログラム

プログラム作成支援ツールを使用したときの生成例の入力プログラムとして，次に示すJavaプログラムを使用して説明します。

ファイル名：SampleClass.java

7.2　プログラム作成支援ツールの機能

プログラム作成支援ツールはcbl2kjgenコマンドで実行します。

cbl2kjgenコマンドの形式を次に示します。

形式

cbl2kjgen -Type ｛Sample｜GroupMapper｝＋
         ｛-Jar Javaアーカイブファイル名｜-Class Javaクラス名〔:内部名〕〔,Javaクラス名〔:内部名〕〕…｝＋
         〔-ClassPath クラスパス〕
         〔-OutDir フォルダパス〕
         〔-StrMaxLen 最大長〕
         〔-MaxArrayLength 最大値〕
         〔-Format ｛fixed｜free｝〕

規則

オプション名とオプションに指定する選択値では，英大文字と英小文字を区別しません。

同じオプションを指定した場合，後ろに指定したオプションが有効となります。

ここで説明されていない文字列をcbl2kjgenコマンドに指定した場合，エラーメッセージを出力し，その指定を無視します。

オプション

cbl2kjgenコマンドに指定できるオプションについて説明します。

-Type ｛Sample｜GroupMapper｝＋

このオプションは省略できません。

このオプションで生成物の種別を指定します。-Typeオプションの値を次の表に示します。

表7‒1　cbl2kjgenコマンドの-Typeオプションの値

値

生成物の種別

Sample

Javaクラス利用サンプル

GroupMapper

集団項目データ交換プログラム

SampleとGroupMapperは同時に指定できます（順不同）。同時に指定する場合はコンマ（,）で区切ります。

SampleまたはGroupMapper以外を指定した場合，エラーメッセージを出力し，処理を中止します。

このオプションを省略した場合，エラーメッセージを出力し，処理を中止します。

-Jar Javaアーカイブファイル名

このオプションは省略できます。ただし，このオプションと-Classオプションをどちらも指定しない場合，エラーメッセージを出力し，処理を中止します。

指定したJavaアーカイブファイルを解析対象とします。

次に示す場合はエラーメッセージを出力し，処理を中止します。

・Javaアーカイブファイル名が指定されていない場合

・指定したJavaアーカイブファイルが存在しない場合

・指定したJavaアーカイブファイルの読み込みに失敗した場合

このオプションと-Classオプションの組み合わせによって，プログラム作成支援ツールが解析するファイルが異なります。オプションの組み合わせと解析ファイルの関係については，「7.2.1　プログラム作成支援ツールの機能範囲」の「(1)　Javaプログラムの解析」の「(b)　オプションの組み合わせによる解析ファイルの違い」を参照してください。

-Class Javaクラス名〔:内部名〕〔,Javaクラス名〔:内部名〕〕…

このオプションは省略できます。ただし，このオプションと-Jarオプションをどちらも指定しない場合，エラーメッセージを出力し，処理を中止します。

このオプションと-Jarオプションを同時に指定するかどうかで，プログラム作成支援ツールが解析するファイルが異なります。オプションの組み合わせと解析ファイルの関係については，「7.2.1　プログラム作成支援ツールの機能範囲」の「(1)　Javaプログラムの解析」の「(b)　オプションの組み合わせによる解析ファイルの違い」を参照してください。

Javaクラス名には対応する内部名を指定できます。-Classオプションの値を次の表に示します。

表7‒2　cbl2kjgenコマンドの-Classオプションの値

値

説明

Javaクラス名

プログラム作成支援ツールは，このオプションで指定したJavaクラスだけを解析対象とします。

Javaクラス名を指定しない場合，エラーメッセージを出力し，処理を中止します。

複数のJavaクラス名を指定する場合，コンマ（,）で区切ります。

指定したJavaクラスが解析対象のファイルに定義されていない場合，その旨を警告メッセージに出力し，処理を続行します。解析対象のファイルについては，「7.2.1　プログラム作成支援ツールの機能範囲」の「(1)　Javaプログラムの解析」の「(b)　オプションの組み合わせによる解析ファイルの違い」を参照してください。

内部名

内部名は省略できます。

Javaクラス名に内部名を指定すると，プログラム生成ツールが生成するCOBOLプログラムで，Javaクラスに対応するデータ項目名を変更します。

内部名は1〜31文字で指定します。この範囲で指定しない場合，エラーメッセージを出力し，処理を中止します。

-ClassPath クラスパス

このオプションは省略できます。

クラスパスが指定されていない場合，エラーメッセージを出力し，処理を中止します。

クラスパスに指定できるパスを次に示します。

・Java実行ファイルが格納されているフォルダのパス

・Javaアーカイブファイル（.jar）のパス

フォルダおよびJavaアーカイブファイル（.jar）以外のクラスパスは無視します。

クラスパスを複数指定する場合はセミコロン（;）で区切ります。複数指定した場合の検索順序については，「7.2.1　プログラム作成支援ツールの機能範囲」の「(5)　使用するファイルとファイルの入出力」の「(b)　ファイルの入力」を参照してください。

このオプションを指定した場合，環境変数CLASSPATHは使用しません。Java実行ファイルまたはJavaアーカイブファイルの検索パスについては，「7.2.1　プログラム作成支援ツールの機能範囲」の「(5)　使用するファイルとファイルの入出力」の「(b)　ファイルの入力」を参照してください。

-OutDir フォルダパス

このオプションは省略できます。

このオプションを指定した場合，プログラム作成支援ツールが生成するCOBOLプログラムの出力先を指定したフォルダパスに変更します。

次に示すどれかの条件に当てはまる場合，エラーメッセージを出力して処理を中止します。

・フォルダパスが指定されていない場合

・指定したフォルダが存在しない場合

・指定したフォルダへ書き込む権限がない場合

・指定したフォルダへの書き込みに失敗した場合

このオプションを省略した場合，プログラム作成支援ツールはカレントフォルダにCOBOLプログラムを生成します。

-StrMaxLen 最大長

このオプションは省略できます。

このオプションで指定した最大長は，プログラム作成支援ツールが生成するCOBOLプログラム中の次の値に使用されます。

・CBLJSTRMAXLEN項目の値

・JavaプログラムのString型データと対応づけるCOBOLプログラムの英数字項目の長さ

このオプションを省略した場合，上記の値に256が仮定されます。

最大長には1〜1,024の整数を指定できます。それ以外の値を指定した場合，または値を指定しなかった場合は，エラーメッセージを出力し，処理を中止します。

-MaxArrayLength 最大値

このオプションは省略できます。

このオプションで指定した最大値は，プログラム作成支援ツールが生成するCOBOLプログラム中の次の値に使用されます。

・配列オブジェクトと対応づけるCOBOLの可変長繰り返し項目の最大反復回数

このオプションを省略した場合，上記の値に256が仮定されます。

最大値には1〜16,777,215の整数を指定できます。それ以外の値を指定した場合，または値を指定しなかった場合は，エラーメッセージを出力し，処理を中止します。

-Format ｛fixed｜free｝

このオプションは省略できます。

このオプションで出力ファイル（COBOLプログラム）の正書法を指定できます。-Formatオプションの値を次の表に示します。

表7‒3　cbl2kjgenコマンドの-Formatオプションの値

値

正書法

fixed

固定形式正書法

free

自由形式正書法

このオプションに値を指定しなかった場合，エラーメッセージを出力し，処理を中止します。

fixedまたはfree以外の値を引数に指定した場合，エラーメッセージを出力し，処理を中止します。

このオプションを省略した場合，正書法として固定形式正書法が仮定されます。

戻り値

プログラム作成支援ツールの戻り値を次の表に示します。

表7‒4　プログラム作成支援ツールの戻り値

戻り値

内容

0

正常終了しました。

1

正常終了しました。

ただし，警告メッセージが出力されています。

2

エラーで処理を中止しました。

コマンドのヘルプ

オプションを指定しないでcbl2kjgenコマンドだけを入力した場合，または次に示すコマンドを指定した場合，cbl2kjgenコマンドのヘルプが出力されて，正常終了します。

形式

cbl2kjgen  {-Help|-?}

注意

-Helpまたは-?を指定した場合，ほかのオプションは無視されます。

7.2.1　プログラム作成支援ツールの機能範囲

プログラム作成支援ツールの機能範囲について説明します。

(1)　Javaプログラムの解析

プログラム作成支援ツールは，COBOLプログラムを作成する準備としてJava実行ファイルおよびJavaアーカイブファイルを解析し，クラス，メソッドおよびフィールドを抽出します。解析結果は，プログラム作成支援ツールが生成するCOBOLプログラムに反映されます。

Java実行ファイルおよびJavaアーカイブファイルの解析は，プログラム作成支援ツール専用の解析用Javaクラス（以降，解析用クラスと表記します）で行います。解析用クラスは，Javaアーカイブファイルとして提供します。

解析用Javaアーカイブファイル（以降，解析用Jarと表記します）および解析用クラスの概要を次の図に示します。解析用クラスへの解析依頼および解析結果の受け取りはJNI経由で行います。

図7‒2　Javaプログラムの解析の概要

プログラム作成支援ツールの解析対象は，解析するJavaクラスやメソッドなどの公開範囲のほか，プログラム作成支援ツールのコマンドオプションの指定によって変わります。また，解析するJavaクラスのほかに関連するJavaクラスが必要となる場合があります。解析対象の条件を次に示します。

(a)　プログラム作成支援ツールの解析対象

プログラム作成支援ツールの解析対象を次の表に示します。

表7‒5　プログラム作成支援ツールの解析対象

項番

対象

属性

public

protected

private

1

クラス

○

×

×

2

コンストラクタ

○

×

×

3

メソッド※1

○

×

×

4

フィールド※1※2

○

×

×

5

インタフェース

×

×

×

（凡例）

○：解析対象とする。

×：解析対象としない。

注※1

abstract修飾子が指定された抽象クラスの場合，インスタンスメソッドおよびインスタンスフィールドは対象としません。

注※2

先祖クラスから継承されているフィールドは，条件付きで解析対象とします。フィールドの条件については，「(3)　フィールドの設定と取得」を参照してください。

(b)　オプションの組み合わせによる解析ファイルの違い

-Jarオプションと-Classオプションの組み合わせで，解析するファイルが異なります。

-Jarオプションと-Classオプションの組み合わせと解析するファイルを次の表に示します。

表7‒6　-Jarオプションと-Classオプションの組み合わせと解析するファイル

-Jarオプション

-Classオプション

あり

なし

あり

-Jarオプションに指定したJavaアーカイブファイルの中から，-Classオプションで指定したクラスが定義されているJava実行ファイルが解析対象の候補となる。

-Jarオプションに指定したJavaアーカイブファイルに含まれるすべてのJava実行ファイルが解析対象の候補となる。

なし

検索パス※に含まれるすべてのJava実行ファイルおよびJavaアーカイブファイルの中から，-Classオプションで指定したクラスが定義されているファイルが解析対象の候補となる。

エラーメッセージを出力し，処理を中断する。

注※

Java実行ファイルおよびJavaアーカイブファイルの検索パスについては，「(5)　使用するファイルとファイルの入出力」の「(b)　ファイルの入力」を参照してください。

(c)　解析に必要となるクラス

プログラム作成支援ツールがJavaプログラムを解析するとき，すべてのフィールド，メソッド，およびコンストラクタの情報を抽出します。そのため，解析対象のクラス以外も参照できる必要があります。

参照できる必要があるクラスを次に示します。

解析対象のクラス

解析対象のクラスのスーパークラス

解析対象のクラスが実装しているインタフェース

解析対象のクラスがimportしているクラス

プログラム作成支援ツールがJavaプログラムを解析する流れを次に示します。

入力ファイル（Java実行ファイルまたはJavaアーカイブファイル）の各クラスからフィールド，メソッド，およびコンストラクタの情報を抽出する。

抽出した情報（フィールド，コンストラクタ・メソッドの引数，およびメソッドの戻り値）のデータ型を解析する。

注意事項

解析に必要なクラスをすべて参照できるように，クラスの検索パスを指定してください。

例えば，クラスAがクラスSを継承している場合，クラスAを解析するにはクラスSが参照できるように検索パスを設定する必要があります。

検索パスについては，「(5)　使用するファイルとファイルの入出力」の「(b)　ファイルの入力」を参照してください。

解析に必要なクラスが参照できない場合，エラーメッセージを出力し，次の解析対象を解析します。

(2)　データ項目のマッピング（共通）

Javaプログラム呼び出し機能でクラス，メソッドまたはフィールドを操作する場合，値を保持するためにCOBOL側でデータ項目を定義する必要があります。

Javaプログラム呼び出し機能で使用するために適切なデータ型で定義し，Javaのどのデータがどのデータ項目に設定されているかを一意に識別できる名前付けをします。

定義する必要があるデータ項目を次に示します。

クラス名，メソッド名，およびフィールド名

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

フィールド値

コンストラクタおよびメソッドの引数

メソッドの戻り値

Javaプログラム呼び出し機能のサービスルーチンの引数リスト

Stringと英数字項目の変換で使用する作業用領域

配列オブジェクトと可変長繰り返し項目の変換で使用する作業用領域

プログラム作成支援ツールは，これらのデータ項目の定義を自動生成します。プログラム作成支援ツールが自動生成するデータ項目名と定義を次に示します。

データ項目名

クラス名，メソッド名，フィールド名をCOBOLのデータ項目名に使用する場合，原則的にJavaプログラムに定義されている名前をそのまま使用します。ただし，パッケージ名はデータ項目名に反映しません。

また，-Classオプションでクラス名とともに内部名を指定した場合，データ項目名をクラス名ではなく内部名に置き換えます。

注意事項

クラス名，メソッド名，フィールド名をCOBOLのデータ項目名に使用する場合，データ項目名が31文字を超えるときは警告メッセージとして該当する内部名と行番号を出力します。このとき，生成物は出力されますが，31文字を超える語はCOBOL2002コンパイラでコンパイルエラーとなります。そのため，出力された警告メッセージを基に生成物を修正する必要があります。

-Classオプションで指定した内部名が1〜31文字でない場合，エラーメッセージを出力し，処理を中止します。

同じ名前が複数存在する場合，次に示すように二つ目以降の同じ名前のデータ項目（メソッド名やフィールド名を設定するデータ項目）の定義をコメントとして出力します。

データ項目の定義（共通）

プログラム作成支援ツールが定義するデータ項目を次の表に示します。

表7‒7　プログラム作成支援ツールが定義するデータ項目

項番

用途

データ項目※

1

引数がないコンストラクタおよびメソッドの引数リストを設定する。

01  NO-ARG.
  02  FILLER          USAGE POINTER VALUE NULL.

2

戻り値がないメソッドの型を設定する。

01  RTN-VOID.
  02  RTN-TYPE        PIC X(1) VALUE 'V'.

3

Stringと英数字項目の変換で使用する領域とサイズを設定する。

01  WK-ALNUM          PIC X(STRMAXLEN).
01  WK-ALNUM-LEN      PIC S9(9) USAGE COMP VALUE STRMAXLEN.

4

m次元のCOBOLの繰り返し項目の添字を設定する。

01  ARRAY-INDEX-m     PIC S9(9) USAGE COMP.

5

m次元の配列オブジェクトのポインタを設定する。

01  ARRAY-ADDR-m      USAGE POINTER.

6

m次元の配列オブジェクトの添字を設定する。

01  ARRAY-INDEX-J-m   PIC S9(9) USAGE COMP.

7

配列の最下層の要素を設定する可変長繰り返し項目のアドレスを設定する。

CBLJGETARRAYADDRサービスルーチンやCBLJRELEASEARRAYサービスルーチンの第3引数に指定する。

01  TEMP-ARRAY-ADDR   USAGE POINTER.

注※

"STRMAXLEN"の既定値は256です。この値はプログラム作成支援ツールの-StrMaxLenオプションで変更できます。

"m"は配列オブジェクトの次元数を示します。

Javaクラス利用サンプルの生成と集団項目データ交換プログラムの生成では，これらのデータ項目に加えて，それぞれの定義で必要なデータ項目を定義します。

Javaクラス利用サンプルの生成でのデータ項目のマッピングについては，「7.2.2　Javaクラス利用サンプルの生成」の「(2)　データ項目のマッピング」を参照してください。

集団項目データ交換プログラムの生成でのデータ項目のマッピングについては，「7.2.3　集団項目データ交換プログラムの生成」の「(3)　データ項目のマッピング」を参照してください。

(3)　フィールドの設定と取得

プログラム作成支援ツールは，Javaのフィールドのアクセスレベルに応じた取得・設定方法でCOBOLプログラムを定義します。

Javaのフィールドのアクセスレベルと取得・設定方法を次の図に示します。

図7‒3　Javaのフィールドのアクセスレベルと取得・設定方法

プログラム作成支援ツールが生成するCOBOLプログラムで取得・設定できるフィールドの条件を次に示します。条件のどちらかに当てはまる場合，取得・設定できます。ただし，対象のフィールドにfinal修飾子が付与されている場合，集団項目データ交換プログラム生成機能で生成するフィールドを一括設定するプログラムには，これらのフィールドに値を設定するコードを生成しません。

取得・設定できるフィールドの条件

フィールドのアクセスレベルがpublicであること。

メソッドを使用しないで，フィールドに直接アクセスして取得・設定します。getterメソッドまたはsetterメソッドが定義されていても，該当のフィールドを取得・設定するときに，それらのメソッドを使用しません。

フィールドのアクセスレベルがprivateまたはprotectedで，getterメソッドまたはsetterメソッドが定義されていること。

フィールドのアクセスレベルがprivateまたはprotectedの場合，getterメソッドまたはsetterメソッドを使用してフィールドを取得・設定します。getterメソッドまたはsetterメソッドが定義されていない場合，プログラム作成支援ツールが生成するCOBOLプログラムでは，privateまたはprotectedフィールドを取得・設定できません。

プログラム作成支援ツールが，getterメソッドまたはsetterメソッドが定義されているとみなす条件を次に示します。

getterメソッドまたはsetterメソッドが定義されているとみなす条件※

該当のフィールドと同じクラスに定義されていること。

メソッド名が次の命名規則にあてはまること。

・getterの命名規則："get"＋フィールド名（先頭は英大文字）

・setterの命名規則："set"＋フィールド名（先頭は英大文字）

（例：フィールド名がvariableIntの場合 → getVariableInt，setVariableInt）

メソッドのアクセスレベルがpublicであること。

（この条件はsetterメソッドだけ適用）引数が一つで，該当のフィールドと同じ型であること。

（この条件はsetterメソッドだけ適用）戻り値がないこと。

（この条件はgetterメソッドだけ適用）引数がないこと。

（この条件はgetterメソッドだけ適用）戻り値の型が該当のフィールドと同じであること。

（この条件はprivateフィールドだけ適用）対象のクラスでフィールドが定義されていること。

（この条件はprotectedフィールドだけ適用）対象のクラスおよび，その先祖クラスでフィールドが定義されていること。

注※

プログラム作成支援ツールは，これらの条件をすべて満たしている場合だけ，getterメソッドまたはsetterメソッドが定義されていると見なします。getterメソッドまたはsetterメソッドとして定義されているメソッドがある場合も，満たさない条件がある場合，getterメソッドまたはsetterメソッドが定義されているとは見なしません。

(4)　配列オブジェクトのマッピング

解析対象のクラスで，次に示す場所に配列が使用されている場合，プログラム作成支援ツールはJavaの配列とCOBOLの繰り返し項目をマッピングするプログラムを生成します。

フィールド（マッピングによって設定・取得が可能）※

publicコンストラクタまたはpublicメソッドの引数（マッピングによる設定だけ可能）

publicメソッドの戻り値（マッピングによる取得だけ可能）

注※

対象となるフィールドについては，「(3)　フィールドの設定と取得」を参照してください。

注意事項

プログラム作成支援ツールがCOBOLのデータ項目にマッピングできる配列オブジェクトの次元数の上限は7次元です。7次元を超える次元の配列要素は展開しないで，ポインタ項目のままとします。

(a)　マッピングによるJavaの配列の取得・設定の流れ

配列オブジェクトのオブジェクト参照を取得する

配列がJavaプログラムのどの場所に定義されているかでオブジェクト参照の取得方法が異なります。

フィールドとして定義されている場合

フィールドのオブジェクト参照を取得します。ただし，集団項目データ交換プログラムで配列フィールドを設定する場合は，CBLJNEWサービスルーチンで新規作成した配列オブジェクトを使用します。対象となるフィールドについては，「(3)　フィールドの設定と取得」を参照してください。

publicコンストラクタまたはpublicメソッドの引数として定義されている場合

引数用に用意したCOBOLのデータ項目に新しい配列オブジェクトを作成します。ただし，すでに他の処理で引数用に用意したCOBOLのデータ項目に配列オブジェクトが作成されている場合は，新しく作成しないで流用します。

publicメソッドの戻り値として定義されている場合

戻り値用に用意したCOBOLのデータ項目からオブジェクト参照を取得します。

配列の要素のオブジェクト参照を取得する

CBLJGETOBJARRAYサービスルーチンで，1.で取得したオブジェクト参照から配列要素のオブジェクト参照を取得します。このとき，PERFORM文で配列の上層の要素から順次取り出すように添字を設定します。COBOLの繰り返し項目の添字とJavaの配列の添字は別のデータ項目として保持します。

Javaの配列の定義が2次元配列の例を次に示します。

例）

Javaの配列の定義が2次元配列a[x][y]の場合（x, yは1以上の整数）

配列J-1（最上位次元の配列オブジェクト）は，1.で取得した配列オブジェクトを使用します。

多次元配列の場合，PERFORM文を入れ子にすることで各要素を取り出します。例えば，Javaの配列の定義がa[2][2]の場合，a[0][0]→a[0][1]→a[1][0]→a[1][1]の順でアクセスします。添字を設定するデータ項目は各次元に一つ定義します。

配列の要素を取得・設定する

配列要素の取得・設定は配列が基本型配列かオブジェクト型配列かによって方法が異なります。

基本型配列の場合

基本型配列の取得・設定は，Javaプログラム呼び出し機能のCBLJGETARRAYADDRサービスルーチンおよびCBLJRELEASEARRAYサービスルーチンでJavaの配列とCOBOLの繰り返し項目を対応づけて，配列要素を取得・設定します。これらのサービスルーチンには繰り返し項目を持つ01レベルの集団項目のアドレスを渡す必要があるため，次に示すような1次元の可変長繰り返し項目を作業用に定義します。

・"TYPE-DEF"はJavaの型に対応するCOBOLの型を示します。Javaの型に対応するCOBOLの型については，「6.1.1　サービスルーチンで使用する引数」の「(3)　パラメタ型集団項目」を参照してください。

・"ARRAYMAXLEN"の既定値は256です。この値はプログラム作成支援ツールの-MaxArrayLengthオプションで変更できます。

オブジェクト型配列の場合

オブジェクト型配列の取得・設定は，Javaプログラム呼び出し機能のCBLJGETOBJARRAYサービスルーチンおよびCBLJSETOBJARRAYサービスルーチンでJavaの配列とCOBOLの繰り返し項目を対応付けることで実現します。基本型配列の場合に定義した作業用の一次元可変長繰り返し項目は使用しないため，定義しません。

(b)　マッピングによる要素の取得の処理フロー，およびCOBOLプログラム

配列オブジェクトのマッピングによる要素の取得の処理フロー，および擬似的なCOBOLプログラムを次に示します。

基本型配列の要素を取得する場合

オブジェクト型配列の要素を取得する場合

(c)　マッピングによる要素の設定の処理フロー，およびCOBOLプログラム

配列オブジェクトのマッピングによる要素の設定の処理フロー，および擬似的なCOBOLプログラムを次に示します。

基本型配列の要素を設定する場合

オブジェクト型配列の要素を設定する場合

(5)　使用するファイルとファイルの入出力

プログラム作成支援ツールが使用するファイルとファイルの入出力について説明します。

(a)　使用するファイル

プログラム作成支援ツールが使用するファイルを次の表に示します。

表7‒8　プログラム作成支援ツールが使用するファイル

項番

種別

拡張子

1

入力ファイル（Javaプログラム）

実行ファイル

.class

2

アーカイブファイル

.jar

3

出力ファイル（COBOLプログラム）

固定形式正書法

.cbl

4

自由形式正書法

.cbf

(b)　ファイルの入力

プログラム作成支援ツールが入力ファイル（Java実行ファイルおよびJavaアーカイブファイル）を検索するフォルダと条件を次の表に示します。

表7‒9　Java実行ファイルおよびJavaアーカイブファイルを検索するフォルダと条件

項番

検索パス

条件

1

-ClassPathオプションに指定したフォルダ

-ClassPathオプションが指定されている。

2

環境変数CLASSPATHに指定したフォルダ

-ClassPathオプションが指定されていない。

3

カレントフォルダ

-ClassPathオプションが指定されていないで，かつ環境変数CLASSPATHが定義されていない。

-ClassPathオプションや環境変数CLASSPATHに複数のフォルダを指定した場合，先頭のフォルダから順に検索します。

フォルダA→フォルダBの順にクラスを検索する例を次に示します。

例）

-ClassPathオプションにフォルダAとフォルダBを指定した。

環境変数CLASSPATHにフォルダCを指定した。

注意事項

-Classオプションで指定したクラス名が完全修飾クラス名でない場合，検索パスの中にパッケージ名が異なる同名のクラスが存在するときは，最初に見つかったクラスだけが解析対象となります。

検索パスの中にパッケージ名が異なる同名のクラスが存在するときの例を次の図に示します。

図7‒4　検索パスの中にパッケージ名が異なる同名のクラスが存在するとき

上記の図では，sample1の下のsample.classが先に見つかるため，sample2の下のsample.classは検索結果に含まれません。

-Classオプションに完全修飾クラス名を指定するか，重複するクラス名がないように検索パスを再設定してから，ファイルを再生成してください。

(c)　ファイルの出力

ファイルの出力先の標準値はカレントフォルダです。出力先はプログラム作成支援ツールの-OutDirオプションで変更できます。

出力ファイルのファイル名は，解析対象のクラス名を基に設定します。出力ファイル名の命名規則を次に示します。

出力ファイル名の命名規則

Javaクラス利用サンプルの生成で生成する出力ファイルの名前（拡張子除く）は，解析対象のクラス名をそのまま使用します。

集団項目データ変換プログラムの生成で生成する出力ファイルの名前（拡張子除く）は，次に示すとおりです。

集団項目データ交換用データ定義

解析対象のクラス名_Map_COPY

集団項目データ交換プログラム

解析対象のクラス名_Map

出力ファイルの正書法によって拡張子を次のとおりに変更します。

固定形式正書法：.cbl

自由形式正書法：.cbf

出力ファイル名の例を次に示します。

表7‒10　クラス名と出力ファイル名の対応例

項番

クラス名

出力ファイル名

備考

1

sample.sampleClass

sample.sampleClass.cbl

Javaクラス利用サンプルを生成する場合の出力ファイルです。

2

sample.sampleClass_Map_COPY.cbl

集団項目データ交換プログラムを生成する場合の出力ファイル（集団項目データ交換用データ定義）です。

3

sample.sampleClass_Map.cbl

集団項目データ交換プログラムを生成する場合の出力ファイル（集団項目データ交換プログラム）です。

4

SampleClass

（-Formatオプションにfreeを指定する）

SampleClass.cbf

正書法に自由形式正書法を指定した場合，拡張子を.cbfとします。

注意事項

COBOLコード生成中にエラーが発生した場合，出力途中のCOBOLファイルは削除します。

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)の処理は一つの処理につき，次に示す内容を生成します。

処理の概要（コメント）

Javaプログラム呼び出し機能による処理

(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クラス利用サンプル中で使用しないデータ項目は定義しません。

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の内容

7.2.3　集団項目データ交換プログラムの生成

プログラム作成支援ツールの-TypeオプションにGroupMapperを指定すると，次に示す二つのCOBOLソースファイルをJavaクラスごとに作成します。

集団項目データ交換用データ定義

データ取得設定クラスフィールドおよびインスタンスフィールドに対応するCOBOL集団項目を定義した登録集原文です。

集団項目データ交換プログラム

Javaのフィールドデータを一括して取得・設定するCOBOLプログラムです。

生成されたCOBOLプログラムを呼び出すUAPを作成して，フィールドの値をCOBOL集団項目に一括して取得・設定するプログラムを完成させます。

cbl2kjgen -Type GroupMapper 〔オプション〕 Javaプログラム指定オプション

Javaプログラム指定オプションは，次の2種類の組み合わせで指定します。

-Class Javaクラス名

-Jar Javaアーカイブファイル名

-Classオプションに指定したJavaクラスをJava実行ファイル（.class）またはJavaアーカイブファイル（.jar）から検索して解析対象とします。-Jarオプションだけを指定すると，アーカイブファイルの中からプログラム作成支援ツールが解析対象とするすべてのクラスを解析します。

-Classオプションおよび-Jarオプションについては，「7.2　プログラム作成支援ツールの機能」および「7.2.1　プログラム作成支援ツールの機能範囲」の「(5)　使用するファイルとファイルの入出力」を参照してください。

集団項目データ交換プログラムの生成の概要を次の図に示します。

図7‒7　集団項目データ交換プログラムの生成の概要

(1)　集団項目データ交換用データ定義の構造

集団項目データ交換用データ定義は，Javaのフィールドに対応するCOBOLのデータ項目を集団項目で定義した登録集原文です。

対象とするフィールドについては，「7.2.1　プログラム作成支援ツールの機能範囲」の「(3)　フィールドの設定と取得」を参照してください。

集団項目データ交換用データ定義の構造を次の図に示します。

図7‒8　集団項目データ交換用データ定義の構造

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

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

項番

項目

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

1

タイトル

次の内容を記載します。

"COBOL2002 Javaプログラム呼び出し機能↓"

"集団項目データ交換用データ定義"

（凡例）

　↓：改行

2

利用クラス

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

3

cbl2kjgenのバージョン

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

例："03-02"

4

オプション

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

5

生成日時

集団項目データ交換プログラムの生成日時を記載します。

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

(b)　データ項目の定義

Javaのフィールドと対応づけるCOBOLのデータ項目を定義します。記載内容については，「(3)　データ項目のマッピング」を参照してください。

(2)　集団項目データ交換プログラムの構造

集団項目データ交換プログラムは，Javaのフィールドを，Javaプログラム呼び出し機能を使用して，一括して取得・設定するCOBOLプログラムです。各フィールドの値は集団項目データ交換用データ定義に定義したデータ項目にマッピングします。

一括取得するCOBOLプログラムと一括設定するCOBOLプログラムを一つのCOBOLソースファイルに生成します。

集団項目データ交換プログラムの構造を次の図に示します。

図7‒9　集団項目データ交換プログラムの構造

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

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

項番

項目

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

1

タイトル

次の内容を記載します。

"COBOL2002 Javaプログラム呼び出し機能↓"

"集団項目データ交換用データ定義"

（凡例）

　↓：改行

2

利用クラス

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

3

cbl2kjgenのバージョン

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

例："03-02"

4

オプション

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

5

生成日時

集団項目データ交換プログラムの生成日時を記載します。

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

(b)　見出し部

各プログラム名を次に示します。

用途

プログラム名※

フィールドを一括取得する。

CBLJGET_classname

フィールドを一括設定する。

CBLJSET_classname

注※

"classname"はクラス名または-Classオプションに指定した内部名を示します。クラス名または-Classオプションについては，「7.2.1　プログラム作成支援ツールの機能範囲」の「(2)　データ項目のマッピング（共通）」を参照してください。

(c)　環境部

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

(d)　データ部

データ項目の定義とCOPY文による集団項目データ交換用データ定義の取り込みを行います。作業場所節および連絡節にデータ項目を定義します。ただし，使用しないデータ項目は定義しません。

作業場所節には次に示す順番でデータ項目を定義します。

クラス名，フィールド名，およびメソッド名

パラメタ

引数リスト

String⇔英数字項目の変換領域の長さ

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

インスタンス生成フラグ

連絡節には次に示す順番でデータ項目を定義します。

CBLJENV集団項目

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

COPY文による集団項目データ交換用データ定義の取り込み

プログラムの戻り値

作業場所節に定義するデータ項目について説明します。データ項目のマッピングについては，「7.2.1　プログラム作成支援ツールの機能範囲」の「(2)　データ項目のマッピング（共通）」および「7.2.2　Javaクラス利用サンプルの生成」の「(2)　データ項目のマッピング」を参照してください。

クラス名，フィールド名，およびメソッド名

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

パラメタ

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

フィールド※

コンストラクタおよびメソッド（フィールドを一括設定するプログラムだけ）に渡す各引数

メソッドの戻り値（フィールドを一括取得するプログラムだけ）

注※

対象となるフィールドについては，「7.2.1　プログラム作成支援ツールの機能範囲」の「(3)　フィールドの設定と取得」を参照してください。

パラメタの定義例を次に示します。

引数リスト

Javaプログラム呼び出し機能のサービスルーチンに渡す引数リストを定義します。フィールドを一括取得するプログラムは「引数なし」の引数リストだけを作成します。フィールドを一括設定するプログラムは「引数なし」の引数リストと，引数を一つ持つ引数リストを作成します。

フィールドを一括取得するプログラムの場合

フィールドを一括設定するプログラムの場合

String⇔英数字項目の変換領域の長さ

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

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

Javaプログラム呼び出し機能のサービスルーチンで配列オブジェクト⇔可変長繰り返し項目を変換するとき，変換結果を受け取るための領域として使用します。

インスタンス生成フラグ

入力ファイルのクラスのインスタンスを生成した場合，1を設定します。

連絡節に定義するデータ項目について説明します。

CBLJENV集団項目

CBLJENV集団項目を定義します。

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

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

COPY文による集団項目データ交換用データ定義の取り込み

集団項目データ交換用データ定義をCOPY文で取り込みます。

プログラムの戻り値

各プログラムの戻り値として，Javaプログラム呼び出し機能のサービスルーチンでエラーが発生した際に，サービスルーチンの戻り値を設定します。

(e)　手続き部

手続き部の内容について説明します。

各プログラムに次に示すような手続き部見出しを定義します。

クラス参照とオブジェクト参照の取得

クラスおよびそのインスタンス（オブジェクト参照）を取得する処理です。

クラス参照とオブジェクト参照の取得の例を次に示します。

フィールド値の取得・設定処理

フィールド値の取得と設定を行う処理です。フィールドに直接アクセスするか，getterメソッドとsetterメソッドを呼びます。getterメソッドとsetterメソッドについては，「7.2.1　プログラム作成支援ツールの機能範囲」の「(3)　フィールドの設定と取得」を参照してください。

フィールド値の設定処理

フィールド値の設定処理の例を次に示します。

集団項目データ交換プログラムで配列オブジェクトに値を設定する場合，次に示すように配列の長さを表すデータ項目（上記の例では，memberList-1-LENおよびmemberList-2-LEN）に各次元の配列長を事前に設定する必要があります。

フィールド値の取得処理

フィールド値の取得処理の例を次に示します。

オブジェクト参照の解放処理

フィールドを一括取得するプログラムでは，インスタンス生成フラグが立っている場合，クラス参照とオブジェクト参照の取得で取得したオブジェクト参照（インスタンス）を解放する処理です。手続きEND-PROCに含みます。

フィールドを一括設定するプログラムでは，この解放処理を生成しません。手続き名だけを生成します。このプログラムから戻ったあとに取得したフィールドに値を設定したオブジェクト参照を使用できます。

オブジェクト参照の解放処理の例を次に示します。

(f)　プログラムの終了

プログラムを終了します。

(3)　データ項目のマッピング

集団項目データ交換用データ定義および集団項目データ交換プログラムに，各データ項目を定義する際に使用するルールを示します。

(a)　集団項目データ交換用データ定義

集団項目データ交換用データ定義に，各データ項目を定義する際に使用するルールを示します。

集団項目データ交換用データ定義

集団項目データ交換用データ定義のデータ項目を次に示します。

用途

データ項目※

JavaのフィールドをCOBOLの集団項目にマッピングする。

01 classname.
  02 fieldname TYPE-DEF.

     ：

（これ以降は配列オブジェクトをマッピングするための定義）

  02  fieldname.
    03  fieldname-1-LEN  PIC S9(9) USAGE COMP.

     ：

    03  fieldname-m-LEN  PIC S9(9) USAGE COMP.
    03  fieldname-ROOT.
      04  fieldname-1 OCCURS ARRAYMAXLEN TIMES.

     ：

      10  fieldname-m OCCURS ARRAYMAXLEN TIMES.
      11  fieldname-ELEM TYPE-DEF.

注※

"m"は配列オブジェクトの次元数を示します。

"fieldname-m-LEN"はm次元配列の長さを示します。配列要素を設定する場合は，ユーザがプログラムを呼び出す前に配列の長さを設定する必要があります。

"classname"はクラス名または-Classオプションに指定した内部名を示します。クラス名または-Classオプションについては，「7.2.1　プログラム作成支援ツールの機能範囲」の「(2)　データ項目のマッピング（共通）」を参照してください。

"fieldname"はフィールド名を示します。フィールド名については，「7.2.1　プログラム作成支援ツールの機能範囲」の「(2)　データ項目のマッピング（共通）」を参照してください。

"TYPE-DEF"はJavaの型に対応するCOBOLの型を示します。ただし，Javaのデータ型がString型の場合は英数字項目を定義します（既定のけた数は256です。この値はプログラム作成支援ツールの-StrMaxLenオプションで変更できます）。Javaの型に対応するCOBOLの型については，「6.1.1　サービスルーチンで使用する引数」の「(3)　パラメタ型集団項目」を参照してください。

"ARRAYMAXLEN"の既定値は256です。この値はプログラム作成支援ツールの-MaxArrayLengthオプションで変更できます。

(b)　集団項目データ交換プログラム

集団項目データ交換プログラムに，各データ項目を定義する際に使用するルールを示します。

JNIに関するデータ項目

JNIに関するデータ項目を次に示します。

用途

データ項目

Java VMに渡すオプションを1個受け取るCBLJENV集団項目を定義する。

01  CBLJENV.
   02  CBLJENVCORE     USAGE POINTER.
   02  CBLJEXCEPTION   USAGE POINTER.
   02  CBLJFLAGS       PIC 1(32) USAGE BIT.
   02  CBLJSTRMAXLEN   PIC S9(9) USAGE COMP.
   02  CBLJVMOPTIONS.
     03  CBLJOPTCOUNT  PIC S9(9) USAGE COMP.
     03  CBLJOPTION-1  PIC X.

クラスやオブジェクトに関するデータ項目

クラスやオブジェクトに関するデータ項目を次に示します。

項番

用途

データ項目※

1

クラス名を設定する。

01 CLASS-NAME PIC X DYNAMIC C-STRING VALUE 'classnameOrg'.

2

クラス参照のアドレスを受け取る。

01 CLASSREF USAGE POINTER.

3

オブジェクト参照のアドレスを受け取る。

01 OBJREF USAGE POINTER.

4

インスタンスを生成したことを記憶させる。

01 FLAG-NEW PIC S9(9) USAGE COMP VALUE 0.

注※

"classnameOrg"はクラス名を示します。クラス名に含まれるピリオドはスラントに置換します。

メソッド（クラスメソッド，インスタンスメソッド）に関するデータ項目

メソッド（クラスメソッド，インスタンスメソッド）に関するデータ項目を次に示します。

項番

用途

データ項目※

1

n番目のフィールドのgetterメソッド名を設定する。

01  FLDn-GETTER PIC X DYNAMIC C-STRING VALUE 'methodname'.

2

n番目のフィールドのsetterメソッド名を設定する。

01  FLDn-SETTER PIC X DYNAMIC C-STRING VALUE 'methodname'.

3

n番目のフィールドのsetterメソッドの第1引数を設定する。

または，n番目のフィールドのgetterメソッドの戻り値を設定する。

（基本型の場合）

01  FLDn.
  02  FLDn-TYPE PIC X(1) VALUE 'SIGNATURE'.
  02  FILLER    PIC X(7) VALUE ALL LOW-VALUE.
  02  FLDn-AREA TYPE-DEF.

（基本型以外の場合）

01  FLDn.
  02  FLDn-TYPE     PIC X(STRMAXLEN) VALUE 'SIGNATURE'.
  02  FLDn-AREA     TYPE-DEF.

4

n番目のフィールドがStringの場合，フィールドの長さを設定する。

01  FLDn-LEN  PIC S9(9) USAGE COMP VALUE STRMAXLEN.

注※

"n"は集団項目データ交換用データ定義中の02レベルのデータ項目を定義する順番と一致します。

"methodname"はメソッド名を示します。

"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

n番目のフィールド名を設定する。

01 FLDn-NAME PIC X DYNAMIC C-STRING VALUE 'fieldname'.

2

集団項目データ交換用データ定義を取り込む。

COPY 'copyfilename'.

3

n番目のフィールドが配列オブジェクトの場合，その最下層要素とCOBOLの繰り返し項目をマッピングするための集団項目およびサイズを定義する。

01  TEMP-MAP-n-LEN  PIC S9(9) USAGE COMP VALUE ARRAYMAXLEN.
01  TEMP-MAP-n ADDRESSED BY TEMP-MAP-n-P.
  02  TEMP-MAP-n-ELEM TYPE-DEF　OCCURS ARRAYMAXLEN TIMES
                    DEPENDING ON TEMP-MAP-n-LEN.

注※

"n"は集団項目データ交換用データ定義中の02レベルのデータ項目を定義する順番と一致します。

"fieldname"はフィールド名を示します。

"copyfilename"は集団項目データ交換用データ定義のファイル名を示します。集団項目データ交換用データ定義のファイル名については，「7.2.1　プログラム作成支援ツールの機能範囲」の「(5)　使用するファイルとファイルの入出力」の「(c)　ファイルの出力」を参照してください。

"TYPE-DEF"はJavaの型に対応するCOBOLの型を示します。Javaの型に対応するCOBOLの型については，「6.1.1　サービスルーチンで使用する引数」の「(3)　パラメタ型集団項目」を参照してください。

"ARRAYMAXLEN"の既定値は256です。この値はプログラム作成支援ツールの-MaxArrayLengthオプションで変更できます。

その他

その他のデータ項目を次に示します。

用途

データ項目

プログラムの戻り値を設定する。

01  CBLJ-RETURN-CODE  PIC S9(9) USAGE COMP.

(4)　生成後の使用方法

集団項目データ交換プログラムを呼び出すCOBOLプログラムを作成します。

(a)　作成手順

集団項目データ交換プログラムの呼び出し元プログラムの作業場所節に集団項目データ交換用データ定義を読み込むCOPY文を記述します。

   :
WORKING-STORAGE SECTION.
 COPY '集団項目データ交換用データ定義のファイル名'.
   :

集団項目データ交換用データ定義のファイル名については，「7.2.1　プログラム作成支援ツールの機能範囲」の「(5)　使用するファイルとファイルの入出力」を参照してください。

集団項目データ交換プログラムを呼び出すコードを記述します。

集団項目データ交換プログラムを呼び出す前に，CBLJINITIALIZEサービスルーチンを呼び出して，Javaプログラム呼び出し機能の実行環境を初期化してください。

集団項目データ交換プログラムの形式については，「(b)　集団項目データ交換プログラムの形式」を参照してください。

フィールドを一括取得する場合，集団項目データ交換プログラムを呼び出したあとで，集団項目データ交換用データ定義の各データ項目を参照するプログラムを記述します。

注意事項

集団項目データ交換プログラムの戻り値が0以外の場合，正しい値を取得できないことがあります。

フィールドを一括設定する場合，集団項目データ交換プログラムを呼び出す前に，集団項目データ交換用データ定義の各データ項目に値を設定するプログラムを記述します。

注意事項

配列のフィールドを設定する場合は配列長を設定する必要があります。詳細については，「7.2.3　集団項目データ交換プログラムの生成」の「(2)　集団項目データ交換プログラムの構造」を参照してください。

静的フィールドとインスタンスフィールドを一括して処理します。静的フィールドの値を変更する場合は，同じプロセスのほかのプログラムに影響を与えることがあります。

集団項目データ交換用データ定義および集団項目データ交換プログラムのデータ項目名やデータ項目の長さは，用途に従って変更できます。

                :
       WORKING-STORAGE SECTION.
      *>----------------------------------------------------------------
      *> データ定義（mylib.sample.SampleClass）
      *>----------------------------------------------------------------
       COPY 'mylib.sample.SampleClass_Map_COPY.cbl'.

       PROCEDURE DIVISION.

      *> Javaプログラム呼び出し機能の実行環境を初期化
          CALL 'CBLJINITIALIZE' USING CBLJENV.

               :

      *> クラス参照の取得
          CALL 'CBLJNEW' USING CBLJENV
                               CLASSREF
                               NO-ARG
                               OBJECTREF.

      *> フィールドデータの一括取得（mylib.sample.SampleClass）
          CALL 'CBLJGET_SampleClass' USING CBLJENV
                                             CLASSREF
                                             OBJECTREF
                                             SampleClass
                                     RETURNING RETURN-VAL.
                 :

(b)　集団項目データ交換プログラムの形式

フィールドを一括取得するプログラムとフィールドを一括設定するプログラムの形式を説明します。

フィールドを一括取得するプログラム

形式

CALL 'CBLJGET_classname' USING 引数1 引数2 引数3 引数4
                         〔 RETURNING 返却項目 〕.

注意事項

"classname"は，クラス名または-Classオプションに指定した内部名を示します。詳細については，「7.2.1　プログラム作成支援ツールの機能範囲」の「(2)　データ項目のマッピング（共通）」を参照してください。

引数

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

引数2には，Javaクラス参照を持つポインタ項目を指定します。

引数3には，Javaオブジェクト参照を持つポインタ項目を指定します。

引数4には，集団項目データ交換用データ定義の01レベルの集団項目名を指定します。集団項目データ交換用データ定義の01レベルの集団項目名については，「7.2.3　集団項目データ交換プログラムの生成」の「(3)　データ項目のマッピング」を参照してください。

返却項目には，戻り値を受け取る4バイト2進形式の数字項目を指定します。

戻り値

RETURNINGに指定したデータ項目に戻り値を返します。

0：正常終了した。

0以外：Javaオブジェクト参照の取得，またはgetterメソッドの呼び出しで例外が発生した。

注意事項

引数2および引数3には，NULLを設定できます。NULLを設定した場合，集団項目データ交換プログラムがJavaクラス参照およびJavaオブジェクト参照を取得して，値を設定します。ただし，集団項目データ交換プログラムが取得したJavaオブジェクト参照は一括取得するプログラムの終了時に解放するため，呼び出し元では使用できません。

なお，対象のJavaクラスに引数がないpublicコンストラクタが定義されていない場合，呼び出し元プログラムまたは集団項目データ交換プログラムを修正する必要があります。詳細については，「7.4.1　使用上の注意事項」の「(5)　引数があるコンストラクタの使用について」を参照してください。

一括取得するプログラムは，引数4に指定した集団項目を初期化しません。また，取得できないフィールドの値は更新しません。

戻り値が0以外の場合，CBLJENV集団項目のCBLJEXCEPTION項目に例外オブジェクトが設定されます。

フィールドを一括設定するプログラム

形式

CALL 'CBLJSET_classname' USING 引数1 引数2 引数3 引数4
                         〔 RETURNING 返却項目 〕.

注意事項

"classname"は，クラス名または-Classオプションに指定した内部名を示します。詳細については，「7.2.1　プログラム作成支援ツールの機能範囲」の「(2)　データ項目のマッピング（共通）」を参照してください。

引数

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

引数2には，Javaクラス参照を持つポインタ項目を指定します。

引数3には，Javaオブジェクト参照を持つポインタ項目を指定します。

引数4には，集団項目データ交換用データ定義の01レベルの集団項目名を指定します。集団項目データ交換用データ定義の01レベルの集団項目名については，「7.2.3　集団項目データ交換プログラムの生成」の「(3)　データ項目のマッピング」を参照してください。

返却項目には，戻り値を受け取る4バイト2進形式の数字項目を指定します。

戻り値

RETURNINGに指定したデータ項目に戻り値を返します。

0：正常終了した。

0以外：Javaオブジェクト参照の取得，またはsetterメソッドの呼び出しで例外が発生した。

注意事項

引数2および引数3には，NULLを設定できます。NULLを設定した場合，集団項目データ交換プログラムがJavaクラス参照およびJavaオブジェクト参照を取得して，値を設定します。集団項目データ交換プログラムが取得したJavaオブジェクト参照は一括設定するプログラムの終了時に解放されません。呼び出し元で不要になったときにCBLJRELEASEサービスルーチンまたはCBLJSETNULLサービスルーチンを呼び出して解放してください。

なお，対象のJavaクラスに引数がないpublicコンストラクタが定義されていない場合，呼び出し元プログラムまたは集団項目データ交換プログラムを修正する必要があります。詳細については，「7.4.1　使用上の注意事項」の「(5)　引数があるコンストラクタの使用について」を参照してください。

引数4には，一括設定するプログラムで設定するすべてのフィールドに対応するデータ項目に，呼び出し元で値を設定してください。値を更新しないことが明らかなフィールドは，一括設定するプログラムで，該当するフィールドの設定処理を削除してください。

戻り値が0以外の場合，CBLJENV集団項目のCBLJEXCEPTION項目に例外オブジェクトが設定されます。

(c)　集団項目データ交換プログラムの例

集団項目データ交換プログラムの例を次に示します。

コマンド

cbl2kjgen -Type GroupMapper -StrMaxLen 256 -Class mylib.sample.SampleClass

mylib¥sample¥SampleClass.javaの内容

mylib.sample.SampleClass_Map_COPY.cblの内容（集団項目データ交換用データ定義）

mylib.sample.SampleClass_Map.cblの内容（集団項目データ交換プログラム）

7.3　プログラム作成支援ツールで出力されるメッセージ

ここでは，プログラム作成支援ツールが出力するメッセージ内容について記載します。

7.3.1　プログラム作成支援ツールで出力されるメッセージの形式

プログラム作成支援ツールが出力するメッセージは，次の形式です。

KCCCnnnnA-x メッセージテキスト

KCCC：メッセージプリフィクス

nnnn：メッセージ番号（4けたの数字）

A：Javaプログラム呼び出し機能のプログラム作成支援ツールのメッセージであることを示す。

x：メッセージレベル

E：エラー

W：警告

また，ここでは，メッセージを次の形式で記載します。

KCCCnnnnA-x

メッセージテキスト

要因

プログラム作成支援ツールでエラーが発生した要因を示します。

対処

プログラム作成支援ツールのエラーに対する対処を示します。

メッセージ中の可変の埋め字部分は*** n ***（nは数字）で示します。

7.3.2　プログラム作成支援ツールで出力されるメッセージの一覧

メッセージの一覧を次に示します。

KCCC8001A-E

前提条件となる製品がインストールされていないため，処理を続行できません。

要因

前提条件となる製品がインストールされていない。

対処

前提条件となる次に示す製品のどちらかをインストールする。

COBOL2002 Developer Professional

COBOL2002 Developer Professional(64)

KCCC8002A-E

Javaプログラムが実行できません。

要因

Java VMの実行ファイルが見つからない。

対処

Javaプログラムを実行できるように環境を見直す。

KCCC8003A-E

COBOL2002のインストールフォルダが見つかりません。

要因

COBOL2002がインストールされていない。

対処

COBOL2002 Developer Professionalをインストールする。

KCCC8004A-E

cbl2kj.jarが見つかりません。

要因

解析用Jarファイルであるcbl2kj.jarが見つからない。

対処

COBOL2002のインストールフォルダ¥binにcbl2kj.jarが存在するか確認する。

KCCC8101A-E

-Typeオプションが指定されていません。

要因

-Typeオプションが指定されていない。

対処

-Typeオプションを指定する。

KCCC8102A-E

-Typeオプションに引数がありません。

要因

-Typeオプションの引数を指定していない。

対処

-Typeオプションの引数にSampleまたはGroupMapperを指定する。

KCCC8103A-E

-Typeオプションの引数が不正です。

要因

-Typeオプションの引数にSampleまたはGroupMapper以外の値を指定した。

対処

-Typeオプションの引数にSampleまたはGroupMapperを指定する。

KCCC8104A-E

-Formatオプションに引数がありません。

要因

-Formatオプションの引数を指定していない。

対処

-Formatオプションの引数にfixedまたはfreeを指定する。

KCCC8105A-E

-Formatオプションの引数が不正です。

要因

-Formatオプションの引数にfixedまたはfree以外の値を指定している。

対処

-Formatオプションの引数にfixedまたはfreeを指定する。

KCCC8106A-E

-Classオプションに引数がありません。

要因

-Classオプションの引数を指定していない。

対処

-Classオプションの引数にクラスを指定する。

KCCC8107A-E

-Jarオプションに引数がありません。

要因

-Jarオプションの引数を指定していない。

対処

-Jarオプションの引数にクラスを指定する。

KCCC8108A-E

-Classオプションと-Jarオプションがどちらも指定されていません。

要因

-Classオプションと-Jarオプションがどちらも指定されていない。

対処

-Classオプションまたは-Jarオプションを指定する。

KCCC8109A-E

指定したJavaアーカイブファイルが見つかりません。

要因

-Jarオプションに指定したJavaアーカイブファイルが存在しない。

対処

-Jarオプションに指定するJavaアーカイブファイルのパスを見直す。

KCCC8110A-E

指定したJavaアーカイブファイルが読み込めません。

要因

-Jarオプションに指定したJavaアーカイブファイルを読み込む権限がない。

対処

次に示すどれかを実施する。

-Jarオプションに読み込み権限のあるJavaアーカイブファイルを指定する。

-Jarオプションに指定したJavaアーカイブファイルのアクセス権を変更する。

-Jarオプションに指定したJavaアーカイブを読み込める権限を実行ユーザに与える。

KCCC8111A-E

-ClassPathオプションに引数がありません。

要因

-ClassPathオプションの引数を指定していない。

対処

-ClassPathオプションの引数にクラスパスを指定する。

KCCC8112A-E

-StrMaxLenオプションに引数がありません。

要因

-StrMaxLenオプションの引数を指定していない。

対処

-StrMaxLenオプションの引数に1〜1,024の値を指定する。

KCCC8113A-E

-StrMaxLenオプションの引数には1〜1024の値を指定してください。

要因

-StrMaxLenオプションの引数に1〜1,024以外の値を指定している。

対処

-StrMaxLenオプションの引数に1〜1,024の値を指定する。

KCCC8114A-E

-MaxArrayLengthオプションに引数がありません。

要因

-MaxArrayLengthオプションの引数を指定していない。

対処

-MaxArrayLengthオプションの引数に1〜256の値を指定する。

KCCC8115A-E

-MaxArrayLengthオプションの引数には1〜16,777,215の値を指定してください。

要因

-MaxArrayLengthオプションの引数に1〜16,777,215以外の値を指定している。

対処

-MaxArrayLengthオプションの引数に1〜16,777,215の値を指定する。

KCCC8116A-E

データ項目名を変更する場合は1〜31文字の名前を指定してください。

要因

-Classオプションに指定した内部名が1〜31文字でない。

対処

-Classオプションの指定する内部名を1〜31文字で指定する。

KCCC8117A-E

-OutDirオプションに引数がありません。

要因

-OutDirオプションの引数を指定していない。

対処

-OutDirオプションの引数にクラスパスを指定する。

KCCC8199A-W

無効なオプションが指定されました。(*** 1 ***)

要因

無効なオプションを指定している。

*** 1 ***：該当のオプション

対処

オプションの指定を見直す。

KCCC8201A-W

解析で必要なクラスが見つかりません。(*** 1 ***)

要因

Javaプログラムの解析に必要な次に示すクラスが見つからない。

解析対象のクラス

解析対象のクラスのスーパークラス

解析対象のクラスが実装しているインタフェース

解析対象のクラスがimportしているクラス

*** 1 ***：解析対象のクラス

対処

解析に必要なクラスを参照できるようにクラスの検索パスを見直す。

KCCC8202A-E

指定したJavaアーカイブファイルからJavaクラスの一覧を取得できません。

要因

次に示すどちらかの理由で，JavaアーカイブファイルからJavaクラスの一覧を取得できない。

JavaアーカイブファイルにJava実行ファイルが含まれていない。

不正なファイル形式のJavaアーカイブファイルを指定している。

対処

Java実行ファイルを1つ以上格納してJavaアーカイブファイルを生成し直す。

KCCC8203A-W

Javaクラスのロードに失敗しました。(*** 1 ***)

要因

次に示すどれかの理由で，Java VMがJavaクラスをロードできない。

Java実行ファイルのパスと完全修飾クラス名が一致していない。

Javaアーカイブファイルの構造と完全修飾クラス名が一致していない。

Java実行ファイルが壊れている。

*** 1 ***：ロードできなかったJavaクラス

対処

正しい構造でJava実行ファイルまたはJavaアーカイブファイルを生成し直す。

KCCC8210A-W

解析対象のクラスではありません。(*** 1 ***)

要因

指定したクラス名がインタフェースである。

*** 1 ***：Javaクラス名

対処

-Classオプションに指定するJavaクラス名を見直す。

KCCC8301A-E

ファイルを出力できません。(*** 1 ***)

要因

次に示すどちらかの理由によって，出力先にJavaクラス利用サンプルを書き込む権限がない。

-OutDirオプションで出力先を指定している場合，出力先が存在しないか，または書き込み権限がない。

-OutDirオプションで出力先を指定していない場合，カレントフォルダに書き込み権限がない。

*** 1 ***：出力ファイルパス

対処

次に示すどれかを実施する。

-OutDirオプションで書き込み権限のある出力先を指定する。

出力先のアクセス権を変更する。

出力先に書き込める権限を実行ユーザに与える。

KCCC8302A-W

語の長さが31文字を超えました。(*** 1 ***, *** 2 ***)

要因

生成したJavaクラス利用サンプルに31文字を超える語が存在する。

*** 1 ***：Javaクラス利用サンプルの行番号

*** 2 ***：該当の語の名前

対処

語の長さが31文字以下となるようにJavaクラス利用サンプルを修正する。

KCCC8401A-E

ファイルを出力できません。(*** 1 ***)

要因

次に示すどちらかの理由によって，出力先に集団項目データ交換プログラムを書き込む権限がない。

-OutDirオプションで出力先を指定している場合，出力先が存在しないか，または書き込み権限がない。

-OutDirオプションで出力先を指定していない場合，カレントフォルダに書き込み権限がない。

*** 1 ***：出力ファイルパス

対処

次に示すどれかを実施する。

-OutDirオプションで書き込み権限のある出力先を指定する。

出力先のアクセス権を変更する。

出力先に書き込める権限を実行ユーザに与える。

KCCC8402A-E

ファイルを出力できません。(*** 1 ***)

要因

次に示すどちらかの理由によって，出力先に集団項目データ交換用データ定義を書き込む権限がない。

-OutDirオプションで出力先を指定している場合，出力先が存在しないか，または書き込み権限がない。

-OutDirオプションで出力先を指定していない場合，カレントフォルダに書き込み権限がない。

*** 1 ***：出力ファイルパス

対処

次に示すどれかを実施する。

-OutDirオプションで書き込み権限のある出力先を指定する。

出力先のアクセス権を変更する。

出力先に書き込める権限を実行ユーザに与える。

KCCC8403A-W

語の長さが31文字を超えました。(*** 1 ***, *** 2 ***)

要因

生成した集団項目データ交換用データ定義に31文字を超える語が存在する。

*** 1 ***：集団項目データ交換用データ定義の行番号

*** 2 ***：該当の語の名前

対処

語の長さを31文字以下となるように集団項目データ交換用データ定義を修正する。

KCCC8404A-W

語の長さが31文字を超えました。(*** 1 ***, *** 2 ***)

要因

集団項目データ交換プログラムに31文字を超える語が存在する。

*** 1 ***：集団項目データ交換プログラムの行番号

*** 2 ***：該当の語の名前

対処

語の長さを31文字以下となるようにフィールドの取得・設定のためのCOBOLプログラムを修正する。

KCCC8405A-W

対象のフィールドが見つかりません。(*** 1 ***)

要因

集団項目データ交換プログラムの対象になるフィールドがない。

*** 1 ***：解析対象のJavaクラス名

対処

対象のフィールドがあるJavaクラスを指定する。

KCCC8601A-E

Out of memory.

要因

メモリ不足のため，CBLJENV内のクラスパスを格納する領域を確保できない。

対処

使用中のリソースを調査し，解放できるものは解放する。

KCCC8602A-E

Out of memory.

要因

メモリ不足のため，クラス情報管理テーブルの領域を確保できない。

対処

使用中のリソースを調査し，解放できるものは解放する。

KCCC8603A-E

Out of memory.

要因

メモリ不足のため，クラス情報管理テーブルのクラス名を格納する領域を確保できない。

対処

使用中のリソースを調査し，解放できるものは解放する。

KCCC8604A-E

Out of memory.

要因

メモリ不足のため，クラス情報管理テーブルの内部名を格納する領域を確保できない。

対処

使用中のリソースを調査し，解放できるものは解放する。

KCCC8605A-E

Out of memory.

要因

メモリ不足のため，フィールド情報を格納する内部領域を確保できない。

対処

使用中のリソースを調査し，解放できるものは解放する。

7.4　プログラム作成支援ツールの注意事項／制限事項

プログラム作成支援ツールの注意事項および制限事項について説明します。

7.4.1　使用上の注意事項

プログラム作成支援ツールの注意事項について説明します。

(1)　初期化・終了処理について

Javaクラス利用サンプルではJavaプログラム呼び出し機能の初期化，終了処理，およびCBLJENV集団項目をプログラム単位に生成しますが，実際の処理ではスレッド単位で一度だけ実行・定義するように構成してください。

(2)　Stringクラスの扱いについて

フィールドやパラメタの型がStringクラスの場合，COBOLデータ項目の定義は-StrMaxLenオプションに指定した長さの英数字項目で生成されます。必要に応じて，取り扱うデータにあわせて変更してください。対応する長さ領域も変更する必要があるため，注意が必要です。

例

集団項目データ交換プログラムの生成で，-StrMaxLenオプションに256を指定したとき，生成ソースでデータ定義を日本語項目（最大長2,048）に変更する。

(3)　COBOL85規格によるコンパイルについて

プログラム作成支援ツールが生成するCOBOLプログラムはccblコマンドまたは-Compati85オプションを指定したccbl2002コマンドでコンパイルしないでください。

プログラム生成ツールはCOBOL2002規格に従ってCOBOLプログラムを生成します。そのため，プログラム名の長さなどがCOBOL85規格に沿わない形式で出力され，上記の方法でコンパイルした場合にエラーとなるときがあります。

(4)　データ項目名の重複について

COBOLプログラムのコンパイルエラーの原因の一つとして，プログラム作成支援ツールが生成するCOBOLプログラムのデータ項目名が重複していることが考えられます。この場合，名前が重複しないようにデータ項目名を変更する必要があります。

例えば，次に示すようにプログラム作成支援ツールが生成するCOBOLプログラムのデータ項目名がJavaのフィールド名と同じ場合，データ項目名が重複します。Javaのクラス名やメソッド名でも同様です。

なお，コンパイル時に，大文字・小文字の区別や全角・半角の区別をするかどうかはコンパイラオプションに依存します。

(5)　引数があるコンストラクタの使用について

集団項目データ交換プログラムは，インスタンス（オブジェクト参照）を取得する処理に引数なしでCBLJNEWサービスルーチンを呼び出すコードを生成します。このため，集団項目データ交換プログラムに渡すJavaオブジェクト参照に呼び出し元で生成したインスタンスのオブジェクト参照を設定しないで呼び出したとき，引数があるpublicコンストラクタでインスタンスを取得できません。引数があるpublicコンストラクタでインスタンスを取得したい場合，次のどちらかの対処をしてください。

集団項目データ交換プログラム呼び出し時の第3引数（オブジェクト参照）に，呼び出し元でインスタンスを生成して取得したオブジェクト参照を指定する。

生成した集団項目データ交換プログラムのCBLJNEWサービスルーチンの呼び出しコードを，ほかのpublicコンストラクタを呼び出すように修正する。

CBLJNEWサービスルーチンの呼び出しコードについては，「7.2.3　集団項目データ交換プログラムの生成」の「(2)　集団項目データ交換プログラムの構造」を参照してください。

ほかのpublicコンストラクタを呼び出すためのCOBOLプログラムは，Javaクラス利用サンプルを生成して参考にしてください。

(6)　コンパイラオプションの指定について

プログラム作成支援ツールで生成したプログラムを変更しないで，次のどれかのコンパイラオプションを指定してコンパイルすると，実行時にCOBOL実行時エラーなどの不正な動作となることがあります。

-BigEndian

-DebugCompati （集団項目データ交換プログラムだけ）

-DebugRange （集団項目データ交換プログラムだけ）

これらのコンパイラオプションを指定しないか，または生成したプログラムを変更して使用してください。使用方法を次に示します。

-BigEndianコンパイラオプションを指定するとき

次の手順で使用できます。詳細については，「4.1.1　COBOL2002のコンパイラオプションを指定するときの注意事項」の「(1)　-BigEndianコンパイラオプション（バイナリデータをビッグエンディアン形式で取り扱う）」を参照してください。

生成したプログラムで，サービスルーチンの引数に指定するデータ項目の定義を変更する。

実行時に環境変数CBLJRTBIGENDIANを指定する。

-DebugCompatiコンパイラオプションまたは-DebugRangeコンパイラオプションを指定するとき

集団項目データ交換プログラム中のCBLJENV集団項目の定義を，呼び出し元のCBLJENV集団項目の定義と一致するように変更することで使用できます。

7.4.2　制限値と制限事項

プログラム作成支援ツールの制限値と制限事項について説明します。

(1)　使用できる語の長さの制限について

COBOL2002コンパイラでは，次の制限値を超えるとコンパイル時にコンパイルエラーになります。

語の長さ：31文字

定数の長さ：160文字

Javaの名称を使用した定数の長さが160文字を超える場合に，そのまま使用したいときは，COBOLプログラムのコンパイル時に-LiteralExtendオプションを指定してください。※

また，データ名などのCOBOLの語にJavaの名称そのままの文字列を使用するため，語の長さが31文字を超えてコンパイルエラーになることがあります。この場合，ツールの警告メッセージに行番号と該当の語を出力するので，生成されたCOBOLプログラムを必要に応じて修正してください。

注※

-LiteralExtendオプションを指定すると最大長が拡張されます（プログラム名は1,024文字，それ以外では8,019文字まで）。

(2)　Javaアーカイブファイルに含まれるJavaアーカイブファイルについて

プログラム作成支援ツールでは，Javaアーカイブファイルに含まれるJavaアーカイブファイル，およびその中のJava実行ファイル（以降，内包するクラスと表記します）は解析対象としません。

解析対象と解析対象外の例を次の図に示します。

図7‒10　プログラム作成支援ツールの解析対象と解析対象外の例

内包するクラスを解析する場合は，Javaアーカイブファイル（上記の例ではSample1.jar）から対象のファイルを取り出してプログラム作成支援ツールで解析してください。

内包するクラスを解析対象としない場合，展開する必要はありません。例えば，Test1.classを解析対象とする場合，Test1.classがTest3.classの機能を使用していても，Test3.classを取り出す必要はありません。

付録

付録A　注意事項／制限事項

ここでは，Javaプログラム呼び出し機能を使用する際の注意事項，および制限事項について説明します。

付録A.1　実行時のファイル出力の監視での注意事項

Javaプログラム呼び出し機能を使用すると，デフォルトの設定で，次に示すファイルが出力されますが，自動的には削除されません。ディスク容量不足などが発生しないように監視してください。

実行時エラー情報出力ファイル

Javaプログラム呼び出し機能で実行時エラーが発生するごとに，一つのファイルが作成されます。

実行時エラー情報出力ファイルについては，「5.3　実行時エラー情報の出力」を参照してください。

Java VM起動オプション情報が出力されるファイル

Javaプログラム呼び出し機能でJava VMを起動するごとに，一つのファイルに追加書きされます。

Java VM起動オプション情報が出力されるファイルについては，「5.4　Java VM起動オプション情報の収集」を参照してください。

付録A.2　Windows OS固有の注意事項

Javaプログラム呼び出し機能を使用する場合の，Windows OS固有の注意事項を次に示します。

フォルダ名，ファイル名，プログラムへの入力文字列，および環境変数に指定できる文字は，シフトJISの範囲だけです。JIS X0213の第3水準漢字，および第4水準漢字を含むUnicodeの文字は使用できません。

cbl2kjgenコマンドが生成するプログラムの出力先や，Javaプログラム呼び出し機能が出力するデバッグ情報ファイルなどの出力先として，Windowsリソース保護（WRP）対象のフォルダを指定しないでください。指定した場合，プログラムの実行権限によってファイルを出力できないことがあります。WRPについては，各OSのヘルプなどを参照してください。

付録A.3　制限値と制限事項

Javaプログラム呼び出し機能の制限値と制限事項について説明します。

(1)　制限値

Javaプログラム呼び出し機能の制限値を次の表に示します。

表A‒1　Javaプログラム呼び出し機能の制限値

項番

制限項目

制限値

1

扱えるクラス名の長さ

1,024バイト

2

扱えるメソッド名の長さ

1,024バイト

3

扱えるフィールド名の長さ

1,024バイト

4

扱える型名（'L'と';'を含む）の長さ

1,024バイト

5

扱えるコンストラクタおよびメソッドのパラメタ数

16個（引数リスト型集団項目で指定する場合，終端を示すNULL値の要素は含まない）

(2)　制限事項

Javaプログラム呼び出し機能の制限事項を次に示します。

Javaプログラム呼び出し機能を使用して呼び出したJavaプログラムから，同じスレッド内でCOBOLプログラムを呼び出すことはできません。

JavaプログラムからCOBOLプログラムを呼び出すときにCosminexus連携機能を使用した場合は，Cosminexus連携機能が例外をスローします。

Cosminexus連携機能を使用しないで呼び出した場合の動作は保証しません。

COBOLプログラムを別プロセスで呼び出すなどの対処をしてください。

Unicodeで多バイトとなる文字を含むJavaのクラス名，メソッド名，フィールド名を使用する場合，Unicode機能と同時に使用できません。

付録B　Javaプログラム呼び出し機能の詳細メッセージ

Javaプログラム呼び出し機能のサービスルーチンの実行時にエラーが発生した場合，実行時のメッセージの「エラー情報」にJavaプログラム呼び出し機能の詳細メッセージが出力されます。

Javaプログラム呼び出し機能の詳細メッセージが出力される実行時のメッセージを次に示します。

KCCC7903R-U

プログラムや環境の設定で対処できないエラーが発生した場合に出力されます。

KCCC7904R-S

プログラムや環境の設定で対処できるエラーが発生した場合に出力されます。

これらのメッセージが出力された場合，COBOLプログラムの実行は中止されます。

ここでは，「エラー情報」に出力されるJavaプログラム呼び出し機能の詳細メッセージについて説明します。実行時メッセージの形式や説明については，マニュアル「COBOL2002　メッセージ」の「メッセージの説明の形式（実行時のメッセージ）」を参照してください。

なお，詳細メッセージが出力される実行時メッセージのメッセージ本文，要因，および対処は次に示すとおりです。

メッセージID

メッセージテキスト

要因

対処

KCCC7903R-U

Javaプログラム呼び出し機能で実行時エラーが発生しました。

プログラム名＝*** 1 ***

行番号／欄＝*** 2 ***

エラー情報＝*** 3 ***

Javaプログラム呼び出し機能で実行時エラーが発生した。

当社保守員に連絡する。

KCCC7904R-S

Javaプログラム呼び出し機能で実行時エラーが発生しました。

プログラム名＝*** 1 ***

行番号／欄＝*** 2 ***

エラー情報＝*** 3 ***

Javaプログラム呼び出し機能で実行時エラーが発生した。

エラー情報を参考に原因を調査し，プログラムを修正するか，または実行環境の設定を見直して再実行する。

付録B.1　詳細メッセージの形式

Javaプログラム呼び出し機能が出力する詳細メッセージの形式を次に示します。

[詳細メッセージ番号] メッセージテキスト

詳細メッセージ番号：

詳細メッセージの番号（4けたの数字）

メッセージテキスト：

詳細メッセージのテキスト

また，ここでは，詳細メッセージを次の形式で記載します。

メッセージテキスト中の可変の埋め字部分は*** n ***（nは数字）で示します。

[詳細メッセージ番号]

メッセージテキスト

要因

実行時エラーが発生した要因を示します。

対処

実行時エラーに対するプログラム作成者またはオペレータの対処を示します。

付録B.2　詳細メッセージの一覧

Javaプログラム呼び出し機能が出力する詳細メッセージを次に示します。

[0001]

引数に誤りがあります。（*** 1 ***）

要因

CBLJENV集団項目を示すアドレスがNULLである。引数の指定がBY REFERENCE指定でないことが考えられる。

*** 1 ***：サービスルーチン名

対処

サービスルーチンに指定したCBLJENV集団項目を確認し，正しく指定する。

[0002]

引数に誤りがあります。（*** 1 ***）

要因

引数を示すアドレスがNULLである。引数の指定がBY REFERENCE指定でないことが考えられる。

*** 1 ***：サービスルーチン名

対処

サービスルーチンに指定した引数を確認し，正しく指定する。

[0003]

引数の個数が上限値を超えています。（*** 1 ***）

要因

引数の個数が上限値を超えている。

*** 1 ***：サービスルーチン名

対処

引数の個数が16個を超えるクラスメソッドを使用しない。

[0004]

予約領域がLOW-VALUEではありません。（*** 1 ***）

要因

パラメタ型集団項目の予約領域がLOW-VALUEではない。

*** 1 ***：サービスルーチン名

対処

予約領域にLOW-VALUEを設定する。

[0005]

引数のデータ型を示す文字列が正しくありません。（*** 1 ***）

要因

引数で指定するパラメタ型集団項目のJavaのデータ型を示す文字が正しくない。

*** 1 ***：サービスルーチン名

対処

正しい値を指定する。

[0009]

返却項目のデータ型を示す文字列が正しくありません。（*** 1 ***）

要因

返却項目のJavaのデータ型を示す文字列が正しくない。

*** 1 ***：サービスルーチン名

対処

正しい値を指定する。

[0010]

Java VMが起動されていません。（*** 1 ***）

要因

Java VMが起動されていない。

*** 1 ***：サービスルーチン名

対処

明示的または暗黙的にCBLJINITIALIZEサービスルーチンを呼び出しているかを確認する。

[0011]

Java VMの初期化スレッドを開始できませんでした。（*** 1 ***）

要因

スレッドを開始するシステム関数でエラーが発生した。

*** 1 ***：エラーの番号

対処

エラー番号から原因を調査する。原因がリソース不足の場合は，不要なリソースを解放して再実行する。それ以外の場合は，保守員に連絡する。

[0012]

Java VMの初期化でスレッド同期処理に失敗しました。（*** 1 ***）

要因

同期処理を実行したシステム関数でエラーが発生した。

*** 1 ***：エラーの番号

対処

エラー番号から原因を調査する。原因がリソース不足の場合は，不要なリソースを解放して再実行する。それ以外の場合は，保守員に連絡する。

[0013]

Java VMの初期化でスレッド同期処理に失敗しました。（*** 1 ***）

要因

同期処理を実行したシステム関数でエラーが発生した。

*** 1 ***：エラーの番号

対処

エラー番号から原因を調査する。原因がリソース不足の場合は，不要なリソースを解放して再実行する。それ以外の場合は，保守員に連絡する。

[0014]

Java VMの初期化でスレッド同期処理に失敗しました。（*** 1 ***）

要因

同期処理を実行したシステム関数でエラーが発生した。

*** 1 ***：エラーの番号

対処

エラー番号から原因を調査する。原因がリソース不足の場合は，不要なリソースを解放して再実行する。それ以外の場合は，保守員に連絡する。

[0015]

Java VMの初期化でスレッド同期処理に失敗しました。（*** 1 ***）

要因

同期処理を実行したシステム関数でエラーが発生した。

*** 1 ***：エラーの番号

対処

エラー番号から原因を調査する。原因がリソース不足の場合は，不要なリソースを解放して再実行する。それ以外の場合は，保守員に連絡する。

[0016]

Java VMの初期化でスレッド同期処理に失敗しました。（*** 1 ***）

要因

同期処理を実行したシステム関数でエラーが発生した。

*** 1 ***：エラーの番号

対処

エラー番号から原因を調査する。原因がリソース不足の場合は，不要なリソースを解放して再実行する。それ以外の場合は，保守員に連絡する。

[0017]

Java VMの初期化でスレッド同期処理に失敗しました。（*** 1 ***）

要因

同期処理を実行したシステム関数でエラーが発生した。

*** 1 ***：エラーの番号

対処

エラー番号から原因を調査する。原因がリソース不足の場合は，不要なリソースを解放して再実行する。それ以外の場合は，保守員に連絡する。

[0018]

Java VMの初期化でスレッド同期処理に失敗しました。（*** 1 ***）

要因

同期処理を実行したシステム関数でエラーが発生した。

*** 1 ***：エラーの番号

対処

エラー番号から原因を調査する。原因がリソース不足の場合は，不要なリソースを解放して再実行する。それ以外の場合は，保守員に連絡する。

[0020]

Out of memory.(*** 1 ***)

要因

メモリ不足が発生した。

*** 1 ***：サービスルーチン名

対処

使用中のリソースを調査し，解放できるものは解放する。

また，オブジェクト参照の解放漏れがないかも確認する。

[0021]

Out of memory.(*** 1 ***)

要因

メモリ不足が発生した。

*** 1 ***：サービスルーチン名

対処

使用中のリソースを調査し，解放できるものは解放する。

また，オブジェクト参照の解放漏れがないかも確認する。

[0022]

Out of memory.(*** 1 ***)

要因

メモリ不足が発生した。

*** 1 ***：サービスルーチン名

対処

使用中のリソースを調査し，解放できるものは解放する。

また，オブジェクト参照の解放漏れがないかも確認する。

[0023]

Out of memory.(*** 1 ***)

要因

メモリ不足が発生した。

*** 1 ***：サービスルーチン名

対処

使用中のリソースを調査し，解放できるものは解放する。

また，オブジェクト参照の解放漏れがないかも確認する。

[0024]

Out of memory.(*** 1 ***)

要因

メモリ不足が発生した。

*** 1 ***：サービスルーチン名

対処

使用中のリソースを調査し，解放できるものは解放する。

また，オブジェクト参照の解放漏れがないかも確認する。

[0025]

Out of memory.(*** 1 ***)

要因

メモリ不足が発生した。

*** 1 ***：サービスルーチン名

対処

使用中のリソースを調査し，解放できるものは解放する。

また，オブジェクト参照の解放漏れがないかも確認する。

[0026]

Out of memory.(*** 1 ***)

要因

メモリ不足が発生した。

*** 1 ***：サービスルーチン名

対処

使用中のリソースを調査し，解放できるものは解放する。

また，オブジェクト参照の解放漏れがないかも確認する。

[0030]

論理エラーが発生しました。（*** 1 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0031]

論理エラーが発生しました。（*** 1 ***／*** 2 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0032]

論理エラーが発生しました。（*** 1 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0033]

論理エラーが発生しました。（*** 1 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0034]

論理エラーが発生しました。（*** 1 ***／*** 2 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0035]

論理エラーが発生しました。（*** 1 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0036]

論理エラーが発生しました。（*** 1 ***／*** 2 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0037]

論理エラーが発生しました。（*** 1 ***／*** 2 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0038]

論理エラーが発生しました。（*** 1 ***／*** 2 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0039]

論理エラーが発生しました。（*** 1 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0040]

論理エラーが発生しました。（*** 1 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0041]

論理エラーが発生しました。（*** 1 ***／*** 2 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0042]

論理エラーが発生しました。（*** 1 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0043]

論理エラーが発生しました。（*** 1 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0044]

論理エラーが発生しました。（*** 1 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0045]

論理エラーが発生しました。（*** 1 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0046]

論理エラーが発生しました。（*** 1 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0050]

論理エラーが発生しました。（*** 1 ***／*** 2 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0051]

論理エラーが発生しました。（*** 1 ***／*** 2 ***）

要因

論理エラーが発生した。

対処

当社保守員に連絡する。

[0060]

JNIで例外が発生しました。（*** 1 ***／*** 2 ***，例外名＝*** 3 ***）

要因

JNIで例外が発生した。

*** 1 ***：サービスルーチン名

*** 2 ***：JNI関数名

*** 3 ***：Java例外名

発生するJava例外

java.lang.ArrayIndexOutOfBoundsException：インデクス範囲外参照

java.lang.ArrayStoreException：オブジェクトが配列オブジェクトの要素の型またはそのサブクラスのオブジェクトでない

java.lang.ExceptionInInitializerError：クラス初期化失敗

java.lang.InstantiationException：クラスがインタフェースまたはabstractクラスである

java.lang.NoSuchMethodError：メソッドが見つからない

java.lang.OutOfMemoryError：メモリ不足

その他のJNI実行中に発生した例外

対処

Java例外の内容に対応した対処を行う。

[0061]

*** 1 *** に対してJNIで例外が発生しました。（*** 2 ***／*** 3 ***，例外名＝*** 4 ***）

要因

JNIで例外が発生した。

*** 1 ***：Javaのメソッド名／クラス名／フィールド名など

*** 2 ***：サービスルーチン名

*** 3 ***：JNI関数名

*** 4 ***：Java例外名

発生するJava例外

java.lang.ClassCircularityError：クラス定義が循環している

java.lang.ClassFormatError：.classファイルが不正である

java.lang.ExceptionInInitializerError：クラス初期化失敗

java.lang.NoClassDefFoundError：クラス定義が見つからない

java.lang.NoSuchFieldError：フィールドが見つからない

java.lang.NoSuchMethodError：メソッドが見つからない

java.lang.OutOfMemoryError：メモリ不足

その他のJNI実行中に発生した例外

対処

Java例外の内容に対応した対処を行う。

[0064]

*** 1 *** の構築中にJavaで例外が発生しました。（*** 2 ***，例外名＝*** 3 ***）

要因

Javaで例外が発生した。

*** 1 ***：Javaのメソッド名／クラス名／フィールド名など

*** 2 ***：サービスルーチン名

*** 3 ***：Java例外名

発生するJava例外

Javaクラスを構築している間に発生した例外

対処

Java例外の内容に対応した対処を行う。

[0065]

*** 1 *** の呼び出し中にJavaで例外が発生しました。（*** 2 ***，例外名＝*** 3 ***）

要因

Javaで例外が発生した。

*** 1 ***：Javaのメソッド名／クラス名／フィールド名など

*** 2 ***：サービスルーチン名

*** 3 ***：Java例外名

発生するJava例外

Javaメソッドを実行している間に発生した例外

対処

Java例外の内容に対応した対処を行う。

[0091]

Cannot present the detail message.(*** 1 ***/*** 2 ***)

要因

詳細メッセージの出力処理で論理エラーが発生した。COBOL2002でインストールしたファイルがないか，または壊れている。

*** 1 ***：サービスルーチン名

*** 2 ***：本来出力する詳細メッセージ番号

対処

COBOL2002を再インストールする。再インストールしてもこのメッセージが出力される場合は，当社保守員に連絡する。

[0101]

CBLJSTRMAXLEN項目に指定した値が正しくありません。

要因

CBLJSTRMAXLEN項目に指定した値が正しくない。

対処

CBLJSTRMAXLEN項目に1〜1,024の範囲の値を設定する。

[0102]

CBLJVMOPTIONS項目のCBLJOPTCOUNTに指定した値が正しくありません。

要因

CBLJVMOPTIONS項目のCBLJOPTCOUNTに指定した値が正しくない。負の値が設定されたことが考えられる。

対処

CBLJVMOPTIONS項目のCBLJOPTCOUNTに0以上の値を設定する。

[0103]

実行環境の初期化に失敗しました。

要因

メモリが不足しているか，または実行中のスレッド数が多過ぎる。

対処

使用中の領域やプロセスを調査し，削除できるものは削除して再実行する。

[0110]

前提バージョンより古いJDKを使用しています。

要因

前提バージョンより古いJDKを使用している。

対処

前提バージョン以降のJDKを使用する。

[0111]

Java VMをロードおよび初期化できません。（*** 1 ***）

要因

JNI_CreateJavaVM関数で，Java VMをロードおよび初期化できない。または同じプロセスで，すでにJava実行環境が削除された。

*** 1 ***：JNI_CreateJavaVM関数の戻り値

対処

戻り値をもとにエラーの原因を調査し，対策する。

JNI関数の戻り値とエラーの原因については，JNI関数のドキュメントを参照のこと。

[0112]

作成済みのJava VMを取得できません。（*** 1 ***）

要因

JNI_GetCreatedJavaVMs関数で，作成済みのJava VMを取得できない。

*** 1 ***：JNI_GetCreatedJavaVMs関数の戻り値

対処

戻り値をもとにエラーの原因を調査し，対策する。

JNI関数の戻り値とエラーの原因については，JNI関数のドキュメントを参照のこと。

[0113]

Java VMへ現在のスレッドを接続できません。（*** 1 ***）

要因

AttachCurrentThread関数で，Java VMへ現在のスレッドを接続できない。

*** 1 ***：AttachCurrentThread関数の戻り値

対処

戻り値をもとにエラーの原因を調査し，対策する。

JNI関数の戻り値とエラーの原因については，JNI関数のドキュメントを参照のこと。

[0201]

クラス名が指定されていません。

要因

長さが0か，または空白だけのクラス名を指定した。

対処

正しいクラス名を指定する。

[0202]

指定したクラス名の長さが正しくありません。

要因

指定したクラス名の長さが制限値を超えている。

対処

制限値の範囲のクラス名を指定する。

[0301]

クラス参照がNULLです。

要因

引数で指定したクラス参照がNULLである。

対処

正しいクラス参照を指定する。

[0302]

正しいクラス参照ではありません。

要因

不正なクラス参照か，またはクラス参照以外を指定した。

対処

正しいクラス参照を指定する。

[0303]

クラスフィールド名が指定されていません。

要因

長さが0か，または空白だけのクラスフィールド名を指定した。

対処

正しいクラスフィールド名を指定する。

[0304]

クラスフィールド名の長さが正しくありません。

要因

引数で指定したクラスフィールド名の長さが制限値を超えている。

対処

制限値の範囲のクラスフィールド名を指定する。

[0305]

データ型を示す文字列が正しくありません。

要因

パラメタ型集団項目のデータ型を示す文字列が正しくない。

対処

パラメタ型集団項目のデータ型に正しい文字列を指定する。

[0307]

引数で指定したクラス名が正しくありません。（*** 1 ***／*** 2 ***）

要因

引数で指定したクラス名とJavaが返したクラスオブジェクトのクラス名が異なる。

*** 1 ***：引数で指定したクラス名

*** 2 ***：Javaが返したクラスオブジェクトのクラス名

対処

パラメタ型集団項目のデータ型に正しい文字列を指定する。

[0401]

クラス参照がNULLです。

要因

引数で指定するクラス参照がNULLである。

対処

正しいクラス参照を指定する。

[0402]

正しいクラス参照ではありません。

要因

不正なクラス参照か，またはクラス参照以外を指定した。

対処

正しいクラス参照を指定する。

[0403]

クラスメソッド名が指定されていません。

要因

長さが0か，または空白だけのクラスメソッド名を指定した。

対処

正しいクラスメソッド名を指定する。

[0404]

クラスメソッド名の長さが正しくありません。

要因

引数で指定したクラスメソッド名の長さが制限値を超えている。

対処

制限値を超えない範囲のクラスメソッド名を指定する。

[0409]

返却値で指定したクラス名が正しくありません。（*** 1 ***／*** 2 ***）

要因

返却値で指定したクラス名とJavaが返したクラスオブジェクトのクラス名が異なる。

*** 1 ***：返却値で指定したクラス名

*** 2 ***：Javaが返したクラスオブジェクトのクラス名

対処

パラメタ型集団項目のデータ型に正しい文字列を指定する。

[0501]

クラス参照がNULLです。

要因

クラス参照がNULLである。

対処

正しいクラス参照を指定する。

[0502]

正しいクラス参照ではありません。

要因

不正なクラス参照か，またはクラス参照以外を指定した。

対処

正しいクラス参照を指定する。

[0601]

オブジェクト参照がNULLです。

要因

オブジェクト参照がNULLである。

対処

正しいオブジェクト参照を指定する。

[0602]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，またはオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[0603]

フィールド名が指定されていません。

要因

長さが0か，または空白だけのフィールド名を指定した。

対処

正しいフィールド名を指定する。

[0604]

フィールド名の長さが正しくありません。

要因

引数で指定したフィールド名の長さが制限値を超えている。

対処

制限値の範囲のフィールド名を指定する。

[0605]

データ型を示す文字列が正しくありません。

要因

データ型を示す文字列が正しくない。

対処

パラメタ型集団項目のデータ型に正しい文字列を指定する。

[0607]

引数で指定したクラス名が正しくありません。（*** 1 ***／*** 2 ***）

要因

引数で指定したクラス名とJavaが返したクラスオブジェクトのクラス名が異なる。

*** 1 ***：引数で指定したクラス名

*** 2 ***：Javaが返したクラスオブジェクトのクラス名

対処

パラメタ型集団項目のデータ型に正しい文字列を指定する。

[0701]

オブジェクト参照がNULLです。

要因

オブジェクト参照を示すアドレスがNULLである。

対処

正しいオブジェクト参照を指定する。

[0702]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，またはオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[0703]

メソッド名が指定されていません。

要因

長さが0か，または空白だけのメソッド名を指定した。

対処

正しいメソッド名を指定する。

[0704]

指定したメソッド名の長さが正しくありません。

要因

指定したメソッド名の長さが制限値を超えている。

対処

制限値の範囲のメソッド名を指定する。

[0709]

返却値で指定したクラス名が正しくありません。（*** 1 ***／*** 2 ***）

要因

返却値で指定したクラス名とJavaが返したクラスオブジェクトのクラス名が異なる。

*** 1 ***：返却値で指定したクラス名

*** 2 ***：Javaが返したクラスオブジェクトのクラス名

対処

パラメタ型集団項目のデータ型に正しい文字列を指定する。

[0801]

オブジェクト参照がNULLです。

要因

オブジェクト参照を示すアドレスがNULLである。

対処

正しいオブジェクト参照を指定する。

[0802]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，またはオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[0901]

クラス参照がNULLです。

要因

クラス参照を示すアドレスがNULLである。

対処

正しいクラス参照を指定する。

[0902]

正しいクラス参照ではありません。

要因

不正なクラス参照か，またはクラス参照以外を指定した。

対処

正しいクラス参照を指定する。

[1001]

Java VMから現在のスレッドを切り離しできません。（*** 1 ***）

要因

DetachCurrentThread関数で，Java VMから現在のスレッドを切り離しできない。

*** 1 ***：DetachCurrentThread関数の戻り値

対処

戻り値をもとにエラーの原因を調査し，対策する。

JNI関数の戻り値とエラーの原因については，JNI関数のドキュメントを参照のこと。

[2101]

オブジェクト参照がNULLです。

要因

オブジェクト参照を示すアドレスがNULLである。

対処

正しいオブジェクト参照を指定する。

[2102]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，またはオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[2201]

クラス参照がNULLです。

要因

クラス参照を示すアドレスがNULLである。

対処

正しいクラス参照を指定する。

[2202]

正しいクラス参照ではありません。

要因

不正なクラス参照か，またはクラス参照以外を指定した。

対処

正しいクラス参照を指定する。

[2203]

指定した英数字項目の長さが正しくありません。

要因

指定した英数字項目の長さが正しくない。

対処

正しい長さを指定する。

[2301]

クラス参照がNULLです。

要因

クラス参照を示すアドレスがNULLである。

対処

正しいクラス参照を指定する。

[2302]

正しいクラス参照ではありません。

要因

不正なクラス参照か，またはクラス参照以外を指定した。

対処

正しいクラス参照を指定する。

[3101]

オブジェクト参照がNULLです。

要因

オブジェクト参照を示すアドレスがNULLである。

対処

正しいオブジェクト参照を指定する。

[3102]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，またはオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[3103]

指定した英数字項目の長さが正しくありません。

要因

指定した英数字項目の長さが正しくない。

対処

正しい長さを指定する。

[3201]

クラス参照がNULLです。

要因

クラス参照を示すアドレスがNULLである。

対処

正しいクラス参照を指定する。

[3202]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，またはオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[3203]

正しいクラス参照ではありません。

要因

不正なクラス参照か，またはクラス参照以外を指定した。

対処

正しいクラス参照を指定する。

[3301]

正しいオブジェクト参照ではありません。

要因

引数2に不正なオブジェクト参照か，またはオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[3302]

正しいオブジェクト参照ではありません。

要因

引数3に不正なオブジェクト参照か，またはオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[3401]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，またはオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[3402]

正しいクラス参照ではありません。

要因

不正なクラス参照か，またはクラス参照以外を指定した。

対処

正しいクラス参照を指定する。

[4101]

指定したデータ項目の長さが正しくありません。

要因

指定したデータ項目の長さが正しくない。

対処

正しい長さを指定する。

[4201]

オブジェクト参照がNULLです。

要因

Stringオブジェクトのオブジェクト参照を示すアドレスがNULLである。

対処

正しいStringオブジェクトのオブジェクト参照を指定する。

[4202]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，またはStringオブジェクトのオブジェクト参照以外を指定した。

対処

正しいStringオブジェクトのオブジェクト参照を指定する。

[4203]

指定したデータ項目の長さが正しくありません。

要因

指定したデータ項目の長さが正しくない。

対処

正しい長さを指定する。

[4301]

オブジェクト参照がNULLです。

要因

Stringオブジェクトのオブジェクト参照を示すアドレスがNULLである。

対処

正しいオブジェクト参照を指定する。

[4302]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，またはStringオブジェクトのオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[4401]

オブジェクト参照がNULLです。

要因

Stringオブジェクトのオブジェクト参照を示すアドレスがNULLである。

対処

正しいオブジェクト参照を指定する。

[4402]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，またはStringオブジェクトのオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[5101]

配列の型に指定した文字列が正しくありません。

要因

指定した文字列は，配列の型を示す文字'['から始まっていない。

対処

正しい配列の型を示す文字列を指定する。

[5102]

配列の型に指定した文字列が正しくありません。

要因

指定した文字列は，配列の型を示す有効な文字列ではない。

対処

正しい配列の型を示す文字列を指定する。

[5103]

指定した配列要素数が正しくありません。

要因

指定した配列要素数が正しくない。

対処

正しい配列要素数を指定する。

[5201]

オブジェクト参照がNULLです。

要因

配列オブジェクトのオブジェクト参照を示すアドレスがNULLである。

対処

正しいオブジェクト参照を指定する。

[5202]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，または配列オブジェクトのオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[5301]

オブジェクト参照がNULLです。

要因

配列オブジェクトのオブジェクト参照を示すアドレスがNULLである。

対処

正しいオブジェクト参照を指定する。

[5302]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，または配列オブジェクトのオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[5303]

指定したインデクス値が正しくありません。

要因

指定したインデクス値が正しくない。

対処

正しいインデクス値を指定する。

[5304]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，またはオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[5401]

オブジェクト参照がNULLです。

要因

配列オブジェクトのオブジェクト参照を示すアドレスがNULLである。

対処

正しいオブジェクト参照を指定する。

[5402]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，または配列オブジェクトのオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[5403]

指定したインデクス値が正しくありません。

要因

指定したインデクス値が正しくない。

対処

正しいインデクス値を指定する。

[5501]

オブジェクト参照がNULLです。

要因

配列オブジェクトのオブジェクト参照を示すアドレスがNULLである。

対処

正しいオブジェクト参照を指定する。

[5502]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，または配列オブジェクトのオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[5503]

オブジェクト型の配列オブジェクトは指定できません。

要因

オブジェクト型の配列オブジェクトを指定した。

対処

基本型の配列オブジェクトを指定する。

オブジェクト型の配列オブジェクトへアクセスする場合は，CBLJSETOBJARRAYサービスルーチンおよびCBLJGETOBJARRAYサービスルーチンを使用する。

[5504]

データ型を示す文字列が正しくありません。

要因

指定したデータ型を示す文字列が正しくない。

対処

正しい配列の型を示す文字列を指定する。

[5601]

オブジェクト参照がNULLです。

要因

配列オブジェクトのオブジェクト参照を示すアドレスがNULLである。

対処

正しいオブジェクト参照を指定する。

[5602]

正しいオブジェクト参照ではありません。

要因

不正なオブジェクト参照か，または配列オブジェクトのオブジェクト参照以外を指定した。

対処

正しいオブジェクト参照を指定する。

[5603]

オブジェクト型の配列オブジェクトは指定できません。

要因

オブジェクト型の配列オブジェクトを指定した。

対処

基本型の配列オブジェクトを指定する。

オブジェクト型の配列オブジェクトへアクセスする場合は，CBLJSETOBJARRAYサービスルーチンおよびCBLJGETOBJARRAYサービスルーチンを使用する。

[5604]

基本型配列のアドレスがNULLです。

要因

基本型配列のアドレスがNULLである。

対処

正しい基本型配列のアドレスを指定する。

[5605]

データ型を示す文字列が正しくありません。

要因

指定した配列の型を示す文字列が正しくない。

対処

正しい配列の型を示す文字列を指定する。

付録C　Javaプログラム呼び出し機能サービスルーチンファイル

Javaプログラム呼び出し機能では，次のサービスルーチンファイルを提供しています。

表C‒1　Javaプログラム呼び出し機能で提供するサービスルーチンファイル

ファイル名

登録内容

COBOL2002Javaプログラム呼び出し機能サービスルーチン.svw

Javaプログラム呼び出し機能のサービスルーチン名

サービスルーチンファイルは，次のフォルダに格納されます。

COBOL2002のインストールフォルダ¥template

COBOLエディタのカスタマイズでこのサービスルーチンファイルを登録すると，Javaプログラム呼び出し機能で提供しているサービスルーチンのキーワードを入力したとき，色分け表示や補完ができます。登録方法の詳細，色分け表示，およびキーワード補完については，マニュアル「COBOL2002　操作ガイド」を参照してください。

付録D　このマニュアルの参考情報

このマニュアルを読むに当たっての参考情報を示します。

付録D.1　関連マニュアル

このマニュアルは次のマニュアルと関連があります。必要に応じてお読みください。

COBOL2002　ユーザーズガイド　（4010-1J-800）

COBOL2002　操作ガイド　（4010-1J-801）

COBOL2002　言語　標準仕様編　（4010-1J-804）

COBOL2002　言語　拡張仕様編　（4010-1J-805）

COBOL2002　Cosminexus連携機能ガイド　（4010-1J-806）

COBOL2002　メッセージ　（4010-1J-809）

COBOL2002 Professional製品 導入ガイド　（4010-1J-815）

Cosminexus V9 アプリケーションサーバ　システム構築・運用ガイド　（3020-3-Y02）

Cosminexus V9 アプリケーションサーバ　リファレンス　コマンド編　（3020-3-Y15）

Cosminexus V9 アプリケーションサーバ　リファレンス　定義編（サーバ定義）　（3020-3-Y16）

Cosminexus V9 アプリケーションサーバ　アプリケーション開発ガイド　（3020-3-Y20）

Cosminexus V11 アプリケーションサーバ　システム構築・運用ガイド　（3021-3-J02）

Cosminexus V11 アプリケーションサーバ　リファレンス　コマンド編　（3021-3-J15）

Cosminexus V11 アプリケーションサーバ　リファレンス　定義編（サーバ定義）　（3021-3-J16）

Cosminexus V11 アプリケーションサーバ　アプリケーション開発ガイド　（3021-3-J20）

なお，このマニュアルでは，Cosminexus Version 9，Cosminexus Version 11を前提に記述しています。

付録D.2　このマニュアルでの表記

このマニュアルでは，マイクロソフト製品の名称を次のように表記しています。

マニュアルでの表記

製品名

Windows

Windows 10(x64)

Windows 10 Pro 日本語版(64ビット版)

Windows 10 Enterprise 日本語版(64ビット版)

Windows 11

Windows 11 Pro 日本語版

Windows 11 Enterprise 日本語版

Windows Server 2019

Windows Server 2019 Standard 日本語版

Windows Server 2019 Datacenter 日本語版

Windows Server 2022

Windows Server 2022 Standard 日本語版

Windows Server 2022 Datacenter 日本語版

このマニュアルは，製品種別によって相違点があります。本文中での製品種別ごとの表記を次に示します。

マニュアルでの表記

該当する製品の形名

COBOL2002

32bit版COBOL2002

P-2636-2354

P-2436-5354

P-2636-3354

P-2436-6354

P-2636-4354

P-2636-7354

64bit版COBOL2002

P-2936-2354

P-2936-5354

P-2936-6354

P-2936-7354

COBOL2002 Developer ProfessionalとCOBOL2002 Developer Professional(64)を総称して，COBOL2002 Developer Professionalと表記しています。マニュアルでの表記と製品の形名を次に示します。

マニュアルでの表記

該当する製品の形名

COBOL2002 Developer Professional

32bit版COBOL2002 Developer Professional

P-2636-7354

64bit版COBOL2002 Developer Professional

P-2936-7354

また，このマニュアルでは各製品を次のように表記しています。

マニュアルでの表記

製品名

Cosminexus

Cosminexus Version 9またはCosminexus Version 11

Cosminexus Application Server

uCosminexus Application Server

uCosminexus Service Platform

Cosminexus Developer

uCosminexus Developer

uCosminexus Service Architect

Oracle Java SE

Java Platform, Standard Edition Development Kit 8

Java Platform, Standard Edition Development Kit 11

このマニュアルで使用している表記と，対応するJava関連用語を次に示します。

マニュアルでの表記

Java関連用語

EJB

Enterprise JavaBeans

JAR

Java Archive

Java VM

Java Virtual Machine

JDK

Java Development Kit

JIT

Just In Time

JNI

Java Native Interface

付録D.3　KB（キロバイト）などの単位表記について

1KB（キロバイト），1MB（メガバイト），1GB（ギガバイト），1TB（テラバイト）はそれぞれ1,024バイト，1,024²バイト，1,024³バイト，1,024⁴バイトです。

付録E　用語解説

（英字）

BOM（バイトオーダマーク）

ファイルの先頭に付加された，Unicodeの表現形式を表す情報。COBOL2002では，テキスト編成ファイルに対してこの情報を付加します。本文中では，Unicodeシグニチャと表記します。

COBOL2002 Developer Professional

COBOL2002 Net DeveloperとCOBOL2002 Professional Tool Kitを一つにしたプログラムプロダクトです。Windowsの稼働環境に応じて，次の2製品があります。

COBOL2002 Developer Professional（32bit版）

COBOL2002 Developer Professional(64)（64bit版）

このマニュアルでは，上記の製品を総称して，COBOL2002 Developer Professionalと表記します。

また，Javaプログラム呼び出し機能のプログラム作成支援ツールを提供します。

Cosminexus連携機能

日立アプリケーションサーバCosminexusのJavaアプリケーションから，COBOLプログラムをJavaBeansまたはEJBとして呼び出せます。これによって，Webアプリケーションの基本機能となるビジネスロジック部分をCOBOLで作成できます。

getter

プロパティから値を取得するメソッドです。

IVS

漢字を表すUnicodeの直後にVariation Selectorと呼ばれるコードを付加し，漢字の「異体字」を表現する方法のことです。

COBOL2002では，用途がDISPLAYおよびNATIONALの項目で使用します。

Servlet

サーバ・サイド・プログラムとして稼働するJavaプログラムです。

setter

プロパティに値を設定するメソッドです。

UCS-2（Universal multi-octet Character Set 2）

符号化文字集合の一つの形式です。1文字を2バイトで表現します。

COBOL2002では，用途がDISPLAYおよびNATIONALの項目でサポートします。

UCS-4（Universal multi-octet Character Set 4）

符号化文字集合の一つの形式です。1文字を4バイトで表現します。

COBOL2002では，用途がDISPLAYおよびNATIONALの項目でUCS-4の範囲をサポートします。

Unicode

1バイトでは表現できない文字セットを含めあらゆる文字セットをサポートした文字コードです。代表的な符号化文字集合としてUCS-2，UCS-4があります。代表的なエンコーディングスキーマとしてUTF-8，UTF-16があります。

COBOL2002では，UCS-4の範囲（UCS-2の範囲を含む）をサポートします。

本文中では，符号化文字集合，およびエンコーディングスキーマを文字コードと表記します。

UTF-16（16-bit UCS Transformation Format）

エンコーディングスキーマの一つの形式です。1つのコード単位を2バイトとし，1文字を1コード単位（2バイト），または2コード単位（4バイト）で表現します。UTF-16では2バイトのコード単位の1バイト目を先に書くビッグエンディアン形式（UTF-16BE）と1バイト目を後に書くリトルエンディアン形式（UTF-16LE）があります。

COBOL2002では，用途がNATIONALの項目でUCS-4の範囲（UCS-2の範囲を含む）をサポートします。

UTF-8（8-bit UCS Transformation Format）

エンコーディングスキーマの一つの形式です。ASCII文字を1バイト，日本語文字を3〜8バイト，半角かたかなを3バイトで表現します。

COBOL2002では，用途がDISPLAYの項目で使用します。

WRP（Windows Resource Protection）

Windowsシステムの安定性，および信頼性を向上させるための機能です。特定のOSファイル，フォルダ，レジストリ キーなど，Windowsの読み取り専用リソースを保護します。

（ア行）

アプリケーションサーバ

Webでの業務開発のためのアプリケーション基盤機能を提供する製品です。日立アプリケーションサーバCosminexusは，ブラウザなどのフロントエンド層とDBや既存システムなどのバックエンド層の間に位置づけられ，業務の開発から運用までに一貫した環境を提供します。

（サ行）

サロゲート

UTF-16の拡張で，2つのコード単位（4バイト）で1文字を表す機能です。この2つのコード単位の組み合わせのことをサロゲートペアと呼びます。

COBOL2002では，用途がNATIONALの項目で使用します。

（タ行）

登録集原文

COBOLプログラム中でよく利用される標準化した手続き，ファイル記述，レコード記述，または完全な一つのプログラムを，コンパイルするプログラムとは別のファイルにしたデータのことです。

（ハ行）

バイトオーダ

2バイト以上のデータの記録を行なう順序のことです。例えば，0x1234のデータを0x1234のように最上位のバイトから順番に記録する方式をビッグエンディアン，0x3412のように最下位のバイトから順番に記録する方式をリトルエンディアンといいます。2バイトのUTF-16は，バイトオーダを意識します。

（マ行）

見た目幅

Unicode機能の組み込み関数で使用します，文字の見た目の幅です。半角文字の幅は1，全角文字の幅は2として扱います。

Unicode機能の組み込み関数で，文字を見た目幅で数える場合に使用します。

索引

記号

-BigEndianコンパイラオプション（バイナリデータをビッグエンディアン形式で取り扱う）[1]

-DynamicLinkコンパイラオプション（動的なリンクを使用する）[1]

-JPNコンパイラオプション（日本語項目の扱いを指定する）[1]

A

APIリファレンス[1]

B

BOM[1]

C

cbl2kjgenコマンド（プログラム作成支援ツール）[1]

CBLJARRAYLENGTH[1]

CBLJCLASSNAME[1]

CBLJCOPY[1]

CBLJDEBUGSTRING[1]

CBLJDISPLAY[1]

CBLJENV集団項目[1]、[2]、[3]

CBLJEQUAL[1]

CBLJFINALIZE[1]

CBLJGETARRAYADDR[1]

CBLJGETCLASS[1]

CBLJGETFIELD[1]

CBLJGETNAME[1]

CBLJGETOBJARRAY[1]

CBLJGETOBJCLASS[1]

CBLJGETSTATICFIELD[1]

CBLJGETSUPERCLASS[1]

CBLJINITIALIZE[1]

CBLJINSTANCEOF[1]

CBLJINVOKE[1]

CBLJMEMDUMP[1]

CBLJNEW[1]

CBLJNEWARRAY[1]

CBLJNTOSTRING[1]

CBLJRELEASE[1]

CBLJRELEASEARRAY[1]

CBLJRTBIGENDIAN[1]

CBLJRTDUMP[1]

CBLJRTDUMP_MAXSIZE[1]

CBLJRTERR[1]

CBLJRTVMDEFAULTOPTIONS[1]

CBLJRTVMOPTIONS[1]

CBLJRTVMOPTLOG[1]

CBLJRTVMOPTLOG_MAXSIZE[1]

CBLJSAMEOBJECT[1]

CBLJSETFIELD[1]

CBLJSETNULL[1]

CBLJSETOBJARRAY[1]

CBLJSETSTATICFIELD[1]

CBLJSTATICINVOKE[1]

CBLJSTRINGTON[1]

CBLJSTRINGTOX[1]

CBLJSTRLENGTH[1]

CBLJXTOSTRING[1]

COBOL2002 Developer Professional[1]

COBOL2002のコンパイラオプションを指定するときの注意事項[1]

COBOL85規格によるコンパイル（プログラム作成支援ツール）[1]

Cosminexus連携機能[1]

Cosminexus連携機能から呼び出したCOBOLプログラムからJavaプログラム部品を呼び出す[1]

G

getter[1]

I

IVS[1]

J

Java VM起動オプション[1]

Java VM起動オプション情報の収集[1]

Javaアーカイブファイルに含まれるJavaアーカイブファイル（プログラム作成支援ツール）[1]

Javaオブジェクト参照の使用ガイドライン[1]

Java型名[1]

Javaから受け取ったStringオブジェクトを英数字項目／日本語項目の値に変換する機能[1]

Javaクラス操作のコーディング[1]

Javaクラス利用サンプルの構造[1]

Javaクラス利用サンプルの生成[1]

Java標準ライブラリやJavaインタフェースのパッケージをプログラム部品として使用する[1]

Javaプログラムの解析[1]

Javaプログラム呼び出し機能サービスルーチンファイル[1]

Javaプログラム呼び出し機能で使用する文字コード[1]

Javaプログラム呼び出し機能とは[1]

Javaプログラム呼び出し機能の概要[1]

Javaプログラム呼び出し機能の実行環境の終了処理[1]

Javaプログラム呼び出し機能の詳細メッセージ[1]

Javaプログラム呼び出し機能の使用例[1]

Javaプログラム呼び出し機能の初期化[1]

Javaプログラム呼び出し機能のデバッグとトラブルシュートの概要[1]

Javaプログラムを使用するCOBOLプログラムの開発[1]

Java例外情報[1]

JNI[1]

JNIの使用を制限しているときの注意事項[1]

K

KCCC8001A-E[1]

KCCC8002A-E[1]

KCCC8003A-E[1]

KCCC8004A-E[1]

KCCC8101A-E[1]

KCCC8102A-E[1]

KCCC8103A-E[1]

KCCC8104A-E[1]

KCCC8105A-E[1]

KCCC8106A-E[1]

KCCC8107A-E[1]

KCCC8108A-E[1]

KCCC8109A-E[1]

KCCC8110A-E[1]

KCCC8111A-E[1]

KCCC8112A-E[1]

KCCC8113A-E[1]

KCCC8114A-E[1]

KCCC8115A-E[1]

KCCC8116A-E[1]

KCCC8117A-E[1]

KCCC8199A-W[1]

KCCC8201A-W[1]

KCCC8202A-E[1]

KCCC8203A-W[1]

KCCC8210A-W[1]

KCCC8301A-E[1]

KCCC8302A-W[1]

KCCC8401A-E[1]

KCCC8402A-E[1]

KCCC8403A-W[1]

KCCC8404A-W[1]

KCCC8405A-W[1]

KCCC8601A-E[1]

KCCC8602A-E[1]

KCCC8603A-E[1]

KCCC8604A-E[1]

KCCC8605A-E[1]

S

Servlet[1]

setter[1]

Stringクラスの扱い（プログラム作成支援ツール）[1]

U

UCS-2[1]

UCS-4[1]

Unicode[1]

UTF-16[1]

UTF-8[1]

W

Webサービスなどと通信するJavaクライアント部品を呼び出す[1]

Windows OS固有の注意事項[1]

WRP[1]

あ

アプリケーションサーバ[1]

い

インスタンスの解放[1]

インスタンスの生成[1]

インスタンスフィールドのアクセス[1]

インスタンスメソッドの呼び出し[1]

え

英数字項目／日本語項目[1]

英数字項目／日本語項目からJavaに渡すStringオブジェクトを生成する機能[1]

お

オブジェクト型の配列オブジェクト操作のコーディング[1]

オブジェクト参照解放漏れ情報[1]

オブジェクト参照のポインタ項目[1]

オブジェクト操作[1]

オプションの組み合わせによる解析ファイルの違い[1]

か

解析に必要となるクラス[1]

環境設定[1]

環境部（Javaクラス利用サンプル）[1]

環境部（集団項目データ交換プログラム）[1]

き

起動オプション情報の収集[1]

起動オプション情報の出力先[1]

起動オプション情報の出力先の最大サイズ[1]

基本型の配列オブジェクト操作のコーディング[1]

基本操作（サービスルーチン）[1]

く

クラス参照の取得[1]

クラス参照のポインタ項目[1]

クラス操作（サービスルーチン）[1]

クラスフィールドのアクセス[1]

クラス名，フィールド名，およびメソッド名[1]

クラスメソッドの呼び出し[1]

こ

コーディング時の注意事項[1]

さ

サービスルーチン[1]

サービスルーチンで検知しないJava例外[1]

サービスルーチンで検知するJava例外の処理[1]

サービスルーチンで使用する引数[1]

サービスルーチン返却値情報[1]

サービスルーチン呼び出し情報[1]

作業場所節[1]、[2]、[3]

サロゲート[1]

し

実行環境情報[1]

実行時エラー情報[1]

実行時エラー情報の出力[1]

実行時エラー情報の出力先[1]

実行時エラー情報の出力時の注意事項[1]

実行時エラー情報ファイルに出力される情報[1]

実行時環境変数[1]

実行時環境変数の詳細[1]

実行時環境変数の設定[1]

実行時に設定が必要な環境変数[1]

実行時のファイル出力の監視での注意事項[1]

集団項目データ交換プログラム（データ項目のマッピング）[1]

集団項目データ交換プログラムの構造[1]

集団項目データ交換プログラムの生成[1]

集団項目データ交換用データ定義（データ項目のマッピング）[1]

集団項目データ交換用データ定義の構造[1]

詳細メッセージ

[0001][1]

[0002][1]

[0003][1]

[0004][1]

[0005][1]

[0009][1]

[0010][1]

[0011][1]

[0012][1]

[0013][1]

[0014][1]

[0015][1]

[0016][1]

[0017][1]

[0018][1]

[0020][1]

[0021][1]

[0022][1]

[0023][1]

[0024][1]

[0025][1]

[0026][1]

[0030][1]

[0031][1]

[0032][1]

[0033][1]

[0034][1]

[0035][1]

[0036][1]

[0037][1]

[0038][1]

[0039][1]

[0040][1]

[0041][1]

[0042][1]

[0043][1]

[0044][1]

[0045][1]

[0046][1]

[0050][1]

[0051][1]

[0060][1]

[0061][1]

[0064][1]

[0065][1]

[0091][1]

[0101][1]

[0102][1]

[0103][1]

[0110][1]

[0111][1]

[0112][1]

[0113][1]

[0201][1]

[0202][1]

[0301][1]

[0302][1]

[0303][1]

[0304][1]

[0305][1]

[0307][1]

[0401][1]

[0402][1]

[0403][1]

[0404][1]

[0409][1]

[0501][1]

[0502][1]

[0601][1]

[0602][1]

[0603][1]

[0604][1]

[0605][1]

[0607][1]

[0701][1]

[0702][1]

[0703][1]

[0704][1]

[0709][1]

[0801][1]

[0802][1]

[0901][1]

[0902][1]

[1001][1]

[2101][1]

[2102][1]

[2201][1]

[2202][1]

[2203][1]

[2301][1]

[2302][1]

[3101][1]

[3102][1]

[3103][1]

[3201][1]

[3202][1]

[3203][1]

[3301][1]

[3302][1]

[3401][1]

[3402][1]

[4101][1]

[4201][1]

[4202][1]

[4203][1]

[4301][1]

[4302][1]

[4401][1]

[4402][1]

[5101][1]

[5102][1]

[5103][1]

[5201][1]

[5202][1]

[5301][1]

[5302][1]

[5303][1]

[5304][1]

[5401][1]

[5402][1]

[5403][1]

[5501][1]

[5502][1]

[5503][1]

[5504][1]

[5601][1]

[5602][1]

[5603][1]

[5604][1]

[5605][1]

詳細メッセージの一覧[1]

詳細メッセージの形式[1]

使用上の注意事項（プログラム作成支援ツール）[1]

使用するファイル[1]

使用するファイルとファイルの入出力[1]

使用できる語の長さの制限（プログラム作成支援ツール）[1]

初期化・終了処理（プログラム作成支援ツール）[1]

処理の流れ[1]

す

数字項目（2進形式）[1]

せ

制限事項[1]

制限値[1]

制限値と制限事項[1]

制限値と制限事項（プログラム作成支援ツール）[1]

生成後の使用方法（Javaクラス利用サンプル）[1]

生成後の使用方法（集団項目データ交換プログラム）[1]

生成例で使用するJavaプログラム[1]

前提ソフトウェア[1]

た

多次元配列を構成する配列オブジェクトの生成と操作のコーディング[1]

ち

注意事項／制限事項[1]

て

データ項目の定義（集団項目データ交換用データ定義）[1]

データ項目のマッピング（Javaクラス利用サンプル）[1]

データ項目のマッピング（共通）[1]

データ項目のマッピング（集団項目データ交換プログラム）[1]

データの種類と出力フォーマット[1]

データ部（Javaクラス利用サンプル）[1]

データ部（集団項目データ交換プログラム）[1]

手続き部（Javaクラス利用サンプル）[1]

手続き部（集団項目データ交換プログラム）[1]

デバッグ情報出力の指定方法[1]

デバッグ情報の出力[1]

デバッグ情報の種類と出力フォーマット[1]、[2]

デバッグ情報ファイルの出力例[1]

デバッグ操作（サービスルーチン）[1]

デフォルトの起動オプション[1]

と

動的長基本項目／名前型集団項目[1]

登録集原文[1]

な

名前型集団項目[1]

は

バイトオーダ[1]

バイトオーダマーク[1]

配列オブジェクト操作（サービスルーチン）[1]

配列オブジェクトの構成と生成のコーディング[1]

配列オブジェクトのマッピング[1]

配列操作のコーディング[1]

パラメタ型集団項目[1]

パラメタ領域の定義[1]

ひ

引数の内容の出力フォーマット[1]

引数リストおよびパラメタ領域[1]

引数リスト型集団項目[1]、[2]

日立以外のJava VMを使用する場合の起動オプション[1]

ふ

ファイルの出力[1]

ファイルの入力[1]

フィールドの設定と取得[1]

プログラム作成支援ツール[1]

プログラム作成支援ツールで出力されるメッセージ[1]

プログラム作成支援ツールで出力されるメッセージの一覧[1]

プログラム作成支援ツールで出力されるメッセージの形式[1]

プログラム作成支援ツールの解析対象[1]

プログラム作成支援ツールの概要[1]

プログラム作成支援ツールの機能[1]

プログラム作成支援ツールの機能範囲[1]

プログラム作成支援ツールの前提条件[1]

プログラム作成支援ツールの注意事項／制限事項[1]

プログラム作成支援ツールの特長[1]

プログラム実行時の注意事項[1]

プログラムの概要（コメント）（Javaクラス利用サンプル）[1]

プログラムの概要（コメント）（集団項目データ交換プログラム）[1]

プログラムの概要（コメント）（集団項目データ交換用データ定義）[1]

プログラムのコンパイル[1]

プログラムのコンパイルと実行[1]

プログラムの作成[1]

プログラムの実行[1]

プログラムの終了（Javaクラス利用サンプル）[1]

プログラムの終了（集団項目データ交換プログラム）[1]

プログラムのデバッグとトラブルシュート[1]

プロセス単位の起動オプション[1]

ほ

ポインタ項目[1]

み

見出し部（Javaクラス利用サンプル）[1]

見出し部（集団項目データ交換プログラム）[1]

見た目幅[1]

も

文字列オブジェクト操作（サービスルーチン）[1]

文字列操作のコーディング[1]

ゆ

ユーザデバッグ情報（メモリ）[1]

ユーザデバッグ情報（メモリ領域の内容）の出力（CBLJMEMDUMPサービスルーチン）[1]

ユーザデバッグ情報（文字列）[1]

ユーザデバッグ情報（文字列）の出力（CBLJDEBUGSTRINGサービスルーチン）[1]

ユーザデバッグ情報を出力するサービスルーチン[1]

り

領域のダンプリストの出力フォーマット[1]

れ

例外処理のコーディング[1]

連絡節[1]