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集団項目の定義と一致するように変更することで使用できます。