6.8.4 COBOL言語を使用する場合の設定
TP1/EEでCOBOL言語によって作成したUAPを使用する場合に設定する必要のある項目や,UAPの作成方法について説明します。
なお,OSがLinux (IA32)の場合,COBOL製品として使用できるのはCOBOL85だけです。また,OSがLinux (EM64T)の場合,COBOL製品として使用できるのはCOBOL2002だけです。
- 〈この項の構成〉
(1) システム定義
システム定義を次のように指定します。
-
プロセス関連定義のcobol_use_flagオペランド
Yを指定します。
COBOL言語のUAPを使用している場合に,cobol_use_flagオペランドにNを指定したとき,システムの動作は保証しません。また,COBOL言語をインストールしていない環境で,cobol_use_flagオペランドにYを指定した場合は,TP1/EE起動時にエラーメッセージを出力します。
-
プロセス関連定義のcobol_langオペランド
COBOL85を使用する場合は85を,COBOL2002を使用する場合は2002を指定します。
-
プロセス関連定義のcobol_uap_cblendオペランド
UAP実行前に,COBOL実行空間を毎回再生成するかどうかを指定します。
-
メモリ関連定義のmemory_cobol_area_sizeオペランド,またはmemory_cobol_area_thd_sizeオペランド
COBOLプログラムが使用するメモリサイズを指定します。
COBOLプログラム用のメモリを,TP1/EEで提供するエリア内で確保したい場合に指定します。memory_cobol_area_sizeオペランド,またはmemory_cobol_area_thd_sizeオペランドを指定することによって,次の利点があります。
-
TP1/EEで一括確保したエリアを使用することによって,メモリを効率良く使用でき,フラグメンテーションの発生を抑止できます。
-
UAPの障害発生時にスレッドダウンさせる機能を使用した場合,プロセスダウンになる可能性が低くなります。
-
(2) 環境変数
プロセス関連定義のcobol_use_flagオペランドにYを指定した場合,次の環境変数で指定したCOBOLファイル名の終端にIFA番号が付加されます。
-
CBLABNLST
-
CBLDDUMP
-
CBL_SYSERR
-
CBL_SYSPUNCH
-
CBL_SYSOUT
スレッドダウンが発生してスレッドを消滅させたあとにスレッドを再起動する場合,IFA番号は前回のスレッドから引き継がれます。そのため,スレッドの再起動後も,スレッドの再起動前と同じファイルに出力されます。
なお,DISPLAY文で環境変数を指定した場合は,ファイル名の終端にIFA番号が付加されません。また,プロセス関連定義のcobol_use_flagオペランドにNを指定した場合,COBOLファイル名はCOBOL言語の仕様に従います。
(3) COBOL言語によるUAP作成方法
COBOL言語でUAPを作成する方法について説明します。
(a) コンパイルとリンケージ
■ コンパイル
TP1/EEで使用するCOBOLプログラムをマルチスレッド対応にするためには,次に示すマルチスレッド用のコンパイラオプションを指定します。
-
COBOL85の場合:-Mtおよび-Mp
-
COBOL2002の場合:-MultiThread
■ リンケージ
AIXでPOSIXスレッドを使用する場合,スレッド関数ライブラリはlibpthreads.aを使用します。また,次に示すCOBOLスレッド関数インタフェースライブラリを使用します。
-
COBOL85の場合:libcbl85mp.a
-
COBOL2002の場合:libcbl2kmp.a
ccblコマンドを使用する場合およびcc/ldコマンドを使用する場合のリンケージ例を次に示します。
• ccblコマンドを使用する場合
- COBOL85の場合
-
-Mt,-Mp,-lpthreadsオプションを指定します。
ccbl -Mt -Mp cmain.o SUBCBL.o -lpthreads
- COBOL2002の場合
-
-MultiThreadオプションを指定します。
ccbl2002 -MultiThread cmain.o SUBCBL.o -lpthreads
• cc/ldコマンドを使用する場合
- COBOL85の場合
-
-lcbl85mp,-lpthreadsオプションを指定します。
cc cmain.o SUBCBL.o -lcbl85 -lcbl85ml -lcbl85mp -lpthreads -lXm -lm
- COBOL2002の場合
-
-lcbl2kmp,-lpthreadsオプションを指定します。
cc cmain.o SUBCBL.o -lcbl2k -lcbl2kml -lcbl2kmp -lpthreads -lXm -lm
なお,整列併合機能や索引ファイルを使用する場合には,それぞれのマルチスレッド用ライブラリを指定する必要があります。整列併合機能や索引ファイルで使用するマルチスレッド用ライブラリについては,COBOL85の場合はマニュアル「COBOL85 使用の手引」を,COBOL2002の場合はマニュアル「COBOL2002 使用の手引 手引編」を参照してください。
また,cc/ldコマンドによるリンケージで,システムのスレッドライブラリを指定するときは,ほかのシステムライブラリとの指定順序に制約がある場合があります。詳細については,システムリファレンスでご確認ください。
(4) 注意事項
-
TP1/EEで同期シグナルを捕捉しスレッドダウンとなる場合,COBOLの異常終了時要約情報リストを採取します。
-
COBOL85/TDは,TP1/EE環境では使用できません。
COBOL2002のテストデバッガ,カバレージをTP1/EE環境で使用する場合の注意事項を次に示します。そのほかの注意事項については,マニュアル「COBOL2002 使用の手引 操作編」を参照してください。
-
COBOLプログラムから連動実行してテストデバッグ,カバレージ情報の蓄積,カウント情報の表示を実行する場合,メモリ不足のため起動できないことがあります。その場合は,メモリ関連定義のmemory_cobol_area_sizeオペランド,memory_cobol_area_thd_sizeオペランド,およびmax_mem_sizeオペランドを調整してください。プログラムでハングアップまたはタイムアウトが発生する場合は,トランザクション関連定義のtrn_expiration_timeオペランドに0を設定することで回避できます。
-
-
TP1/EEで使用するCOBOLではマルチスレッド機能を使用する必要があるため,COBOLで使用できる機能に制約や注意事項があります。詳細については,COBOL85の場合はマニュアル「COBOL85 使用の手引」を,COBOL2002の場合はマニュアル「COBOL2002 使用の手引 手引編」を参照してください。
-
COBOL言語のUAPで使用したファイルは,サービスプログラム実行中にCLOSE文で閉じてください。閉じないままにしておくと,次のサービスプログラムで同名のファイルを操作したときにエラーメッセージが表示されます。
-
スレッド内でサービスプログラムが繰り返し実行される場合,データ領域のVALUE句は無効となります。データ領域は必要に応じて初期化されるか,プログラムを初期化属性(プログラムの見出し部にINITIAL句を指定)としてください。または,cobol_uap_cblendオペランドにYを指定してください。
-
サービスプログラム実行中に次の環境変数の値を変更することはできません。
-
CBL_SYSOUT(DISPLAY文の出力先)
-
CBLLPATHまたはCBLLSLIB(COBOLダイナミックリンク機能の検索ディレクトリ)
-
-
COBOL言語で作成したUAPを終了する場合,STOP RUN文ではなくEXIT PROGRAM文を実行してください。