この章では、CICS アプリケーションの開発の技術的側面について説明します。
この COBOL システムでは、ポインター項目の内容を IBM メインフレームで使用される形式と互換性のある形式で格納することができます。USAGE POINTER と CICS BLL の両方のセル・データ項目を USAGE PIC S9(9) COMP として再定義し、それらの項目に対して完全な演算を実行できます。メインフレーム形式のポインターの使用は、AMODE コンパイラー指令で制御します。使用している方言に応じて、24 ビット・ポインター、31 ビット・ポインター、または NO AMODE を選択できます。NO AMODE でコンパイルされたプログラムは、PC 形式のポインターを使用し、非 AMODE コンパイル済みプログラムと呼ばれます。詳細については、『メインフレームエミュレーション』のトピック AMODE コンパイラ指令 を参照してください。
ユーザーは、AMODE と非 AMODE の両方のコンパイル済みプログラムを同じリージョン内で使用するトランザクションを実行できます。ただし、各個別トランザクション内では、すべてのプログラムが AMODE コンパイル済み、または非 AMODE コンパイル済みのいずれかである必要があります。インバウンド・システム通信向けミラー・トランザクション (CVMI または CPMI) などの提供されたシステム・トランザクションや、自動インストール出口などの機能を使用する場合は、このことに特に注意してください。これらは非 AMODE コンパイル済みであるため、AMODE コンパイル済みプログラムと一緒に実行しようとすると問題が発生する可能性があります。
分散プログラム・リンクを使用している場合は、通信域オーバーライドの値を設定することにより、この問題を回避できます。PPT 定義内の個別プログラム・レベルで通信域オーバーライドを設定することをお奨めします。これを行うには、ESMAC の [CICS PPT] ページで [Commarea] の値を設定します。どの値に設定すべきか分からない場合は、最大値の 32,767 バイトに設定してください。
デフォルトでは、トランザクション・プログラムがキャンセルされると、そのトランザクション・プログラムはメモリー内に残ります。次回の呼び出し時にプログラムを再ロードする必要がないため、この動作によってパフォーマンスが向上します。ただしこれは、エンタープライズ・サーバーを終了して再起動しないと、更新されたバージョンのプログラムをロードできないことも同時に意味しています。エンタープライズ・サーバーで実行される 1 つ以上のプログラムをアクティブに扱っていて、最新バージョンが毎回必ずロードされるようにしたい場合は、ESMAC の [SIT] ページで [Program Force phase in] をオンにすると、プログラムを呼び出すたびにそのプログラムを強制的に再ロードすることができます。また、 トランザクション CPMT の Phasein 機能を使用して、個別プログラムを強制的に再ロードすることもできます。
状況によっては、1GB (ギガバイト) より大きい VSAM ファイルにアクセスできないことがあります。これは、Mainframe Express のデフォルトのレコード・ロッキング・メカニズムがファイル・アドレスの上位 2 ビットをロッキング・ビットと圧縮ビットに使用するため、共有 idxformat 3 または idxformat 4 ファイルに対して最大オフセットのアドレス空間が 4GB から 1GBに減少することが原因です。この問題が発生した場合は、ファイルのレコード・ロッキング・メカニズムを変更する必要があります。これを行うには、次の手順に従います。
ファイルハンドラ構成ファイルでは、[XFH-DEFAULT] タグの下にすべてのファイルに対するデフォルトがリストされ、ファイル名で構成されているタグの下に個々のファイルの設定がリストされます。例えば、次の構成ファイルでは、BASENAME=ON (ファイルのパス名を指定する必要がないことを意味する) が設定され、myfile というファイルのロック・タイプが 2 に設定されます。
[XFH-DEFAULT] BASENAME=ON [MYFILE] LOCKTYPE=2
トランザクション・プログラムの異常終了は、TXKC0001E システム・メッセージによってレポートされます。一般に、これらの異常終了は、標準 CICS エラー状態によって引き起こされます。上記の場合の異常終了コード (および記述) は、メインフレーム環境でそれらの状態に対して発行される異常終了コードと同じです。これらのコードと記述については、IBM CICS/ESA Messages and Codes を参照してください。
エミュレーターでは、上記のエラーのほかに、標準 CICS エラー状態には一致しないものの、トランザクションを正常に続行できないため異常終了する必要がある状態が発生する可能性があります。これらの異常終了コードは次のとおりです。
開発システムでリソース・エントリー (例えば、PPT エントリー) を動的に作成しているときに次のいずれかが発生すると、ASSA 異常終了コードが発行されます。/P>
診断ツールとログ・ファイルを使用して、エラーの原因を確認してください。
仕様に従っていないパラメータを使用してプログラムが CICS API を呼び出した場合は、開発システムによって EXIF 異常終了コードが発行されます。最も可能性の高い原因としては、不正に変更された変換済みソース・ファイルからトランザクション・プログラムがコンパイルされたことが考えられます。
サポートされていない CICS API 関数を要求すると、FUNC 異常終了コードが発行されます。これは、プリプロセッサーによってサポート対象外として識別された EXEC CICS コマンドの実行と /CICSECM(FUNCTION=ABEND) プリプロセッサー指令 (実行時に異常終了) の指定によって発生します。
作業記憶域の保存と復旧を行うためのプログラム制御関数で非論理的な状態 (通常は、システム・エラー) が発生した場合は、IRST 異常終了コードが発行されます。
1 つの実行単位に複数の異なる COBOL 方言が混在していると (例えば、VS COBOL II で記述されたプログラムが OS/VS COBOL で記述されたプログラムを呼び出すと)、LANG 異常終了コードが発行されます。
LINK、XCTL、または VS COBOL II CALL のターゲット・プログラムに必要な制御ブロックを API Emulation サーバーで割り当てるためのメモリーが不足している場合は、MATP 異常終了コードが発行されます。
OS/VS COBOL トランザクション・プログラムの BLL Cell List 領域を API Emulation サーバーで割り当てるためのメモリーが不足している場合は、MBLL 異常終了コードが発行されます。
XCTL を通じて呼び出されたユーザー・トランザクション・プログラムに渡される COMMAREA を API Emulation サーバーで割り当てるためのメモリーが不足している場合は、MCOM 異常終了コードが発行されます。
ユーザー・トランザクション・プログラムに返されるデータのファイルまたは端末バッファーを API Emulation サーバーで割り当てるためのメモリーが不足している場合は、MUSR 異常終了コードが発行されます。
現在の CICS LINK レベルで既にアクティブであるユーザー・トランザクション・プログラムを (DFHEIBLK を使用して) 呼び出そうとすると、RECU 異常終了コードが発行されます。
BMS に関連した SEND 関数の SET オプションをサポートできるようにするため、開発システムはページ・リスト内の各エントリーの下位 3 バイトで偽の TIOA アドレスを返します。偽の TIOA アドレスを使用するには、DFHMFSET を使用して、そのアドレスを本当の (使用可能な) TIOA アドレスに変換する必要があります。
次の BMS 関数の SET オプションを使用するプログラムは、すべて変更する必要があります。
また、結果のページ・リスト内のアドレスを使用するプログラムもすべて変更する必要があります。
次のコマンドをコマンド・ラインに入力します。
call "DFHMFSET" using page-list-entry address-field
補足説明:
注:リストの終端は、上位バイトが HIGH-VALUE で下位 3 バイトが LOW-VALUE であるエントリーによって常に示されます。メインフレームでは、これは NULL ポインター・データ項目に使用される定義値に相当しますが、Micro Focus COBOL 環境の NULL ポインター値には相当しません。エントリーの上位バイトが絶対的な最大値かどうかを明確に調べることによって、常にリストの終端のテストを行う必要があります。
DFHMFSET の使用については、次の制限が適用されます。
OS/VS COBOL と VS COBOL II の例は、それぞれ同じ機能を提供します。これらは、BMS SEND コマンドの SET オプションに対して返されるページ・リストと共に DFHMFSET エントリー・ポイントを使用する単純な事例を表します。
各例では、最初のエントリーにデータストリームのアドレスが含まれているページ・リストのアドレスを返す SET オプションを使用して SEND MAP コマンドを実行します。ページ・リストの 2 番目のエントリーには end-of-list マーカーが含まれていることに注意してください。例では、ページ・リストのエントリーを、構築されたデータストリームの本当の TIOA アドレスに変換し、データストリームをアドレス指定可能にしてから、SEND TEXT MAPPED コマンドを使用してそのアドレスを実際に端末に送信します。
PAGE-DSC-AREA に対する PIC X(9999) と PAGE-LIST-ENTRY に対する OCCURS 句の 5 という値は、それ自体には意味がないので注意してください。これらの値は、この例で使用されている値にすぎません。
WORKING-STORAGE SECTION. . . 05 PAGE-LIST-ADDRESS PIC S9(8) COMP. 05 PAGE-DATA-ADDRESS PIC S9(8) COMP. . . LINKAGE SECTION. . . 01 BLL-CELL-LIST. 05 FILLER PIC S9(8) COMP. 05 PAGE-LIST-BLL-CELL PIC S9(8) COMP. 05 PAGE-DATA-BLL-CELL PIC S9(8) COMP. * 01 PAGE-LIST. 05 PAGE-LIST-ENTRY OCCURS 5 TIMES. 10 PAGE-TERMINAL-TYPE PIC X. 10 PAGE-DSC-ADDRESS PIC XXX. 01 PAGE-DATA-AREA. 05 PAGE-TIOA-PREFIX. 10 FILLER PIC X(8). 10 PAGE-LENGTH PIC 9(4) COMP. 10 FILLER PIC X(2). 05 PAGE-DSC-AREA PIC X(9999). . . PROCEDURE DIVISION. . EXEC CICS SEND MAP ('MAPNAME') MAPSET ('MSETNAM') SET (PAGE-LIST-BLL) END-EXEC. . . CALL 'DFHMFSET' USING PAGE-LIST-ENTRY (1) PAGE-DATA-ADDRESS. MOVE PAGE-DATA-ADDRESS TO PAGE-DATA-BLL-CELL. . . EXEC CICS SEND TEXT MAPPED FROM (PAGE-DSC-AREA) LENGTH (PAGE-LENGTH) END-EXEC. .
. . WORKING-STORAGE SECTION. . . 05 PAGE-LIST-ADDR POINTER. 05 PAGE-DATA-POINTER POINTER. . . LINKAGE SECTION. . . 01 PAGE-LIST. 05 PAGE-LIST-ENTRY OCCURS 5 TIMES. 10 PAGE-TERMINAL-TYPE PIC X. 10 PAGE-DSC-ADDRESS PIC XXX. 01 PAGE-DATA-AREA. 05 PAGE-TIOA-PREFIX. 10 FILLER PIC X(8). 10 PAGE-LENGTH PIC 9(4) COMP. 10 FILLER PIC X(2). 05 PAGE-DSC-AREA PIC X(9999). . . PROCEDURE DIVISION. . . EXEC CICS SEND MAP ('MAPNAME') MAPSET ('MSETNAM') SET (PAGE-LIST-ADDR) END-EXEC. . . CALL 'DFHMFSET' USING PAGE-LIST-ENTRY (1) PAGE-DATA-POINTER. SET ADDRESS OF PAGE-DATA-AREA TO PAGE-DATA-POINTER. . . EXEC CICS SEND TEXT MAPPED FROM (PAGE-DSC-AREA) LENGTH (PAGE-LENGTH) END-EXEC. .