OPENAPIプログラムとは何ですか?
オープン・トランザクション環境 (OTE) は、 CICS アプリケーション・コードが、 CICS アドレス・スペース内で、他のトランザクションからの干渉を受けずに非CICS サービスを使用できる環境です。 PROGRAM リソース定義で OPENAPI 属性を使用することによって、ユーザー・アプリケーション・プログラム、PLT プログラム、ユーザー置き換え可能モジュール、またはタスク関連ユーザー出口 (TRUE) を OPENAPI プログラムとして定義し、OTE を使用できます。 プログラムを OPENAPI プログラムとして定義するということは、プログラムの開始時から、プログラムが常にメイン CICS 準再入可能 TCB (QR TCB) ではなく、 L8 または L9 モードのオープン・タスク制御ブロック (オープン TCB) で実行されることを意味します。
グローバル・ユーザー出口は、OPENAPI プログラムとして定義することはできませんが、ENABLE PROGRAM コマンド で THREADSAFE オプションを使用して有効にする場合は、必要に応じてオープン TCB で実行することが可能です。
アプリケーションのワークロードを QR TCB から複数のオープン TCB に移動すると、特に CPU 集中型プログラムで、スループットが向上する可能性があります。 CICS 以外の他の API を使用することもできますが、 CICS 内でのCICS API の使用は、完全にユーザーの判断とリスクによるものであることに注意する必要があります。 CICS 内でのCICS 以外の API のテストは行われておらず、そのような API の使用は IBM サービスではサポートされていません。
スレッド・セーフ要件
- プログラムは、 CICS に対して CONCURRENCY (REQUIRED) として定義する必要があります。これは、プログラムをオープン TCB 上で実行する必要があることを意味します。
- プログラムのロジック (つまり、EXEC CICS コマンド間のネイティブ言語コード) は、スレッド・セーフでなければなりません。 オープン TCB 上で実行するようにプログラムを CICS に定義し、スレッド・セーフではないアプリケーション・ロジックを組み込む場合、結果は予測不能であり、 CICS は起こりうる結果からユーザーを保護することができません。
- 最良のパフォーマンスを得るためには、プログラムはスレッド・セーフ EXEC CICS コマンドのみを使用する必要があります。 オープン TCB で実行されているプログラムに非スレッド・セーフ EXEC CICS コマンドを組み込むと、 CICS はオープン TCB から QR TCB に切り替えて、コマンドが安全に処理されるようにします。 TCB の切り替えは、アプリケーションのパフォーマンスに悪影響を与える場合があります。
- 最良のパフォーマンスを得るには、プログラムで使用される実行パス内のユーザー出口プログラムも、スレッド・セーフ標準に合わせてコーディングし、スレッド・セーフとして CICS に定義する必要があります。 プログラムによって使用される実行パス内のいずれかのユーザー出口プログラムがスレッド・セーフでない場合、 CICS は QR TCB に切り替えてそれらを実行します。これは、アプリケーションのパフォーマンスに悪影響を及ぼす可能性があります。
スレッドセーフ・プログラムでは、スレッドセーフ・プログラムの要件をより詳しく説明している。
OPENAPI プログラムの制約事項
OPENAPI プログラムには、いくつかの追加の責任と制限があります。 例えば、終了タスクのために特別に獲得されたすべての非CICS リソースが解放されていること、および特定の z/OS システム・サービスを使用してはならないことを確認する必要があります。 これらの要件については、 OPENAPI プログラムのスレッド・セーフに関する制約事項 で説明されています。
REQUIRED OPENAPI として定義する候補プログラム (アプリケーション・ロジックがスレッド・セーフであることを前提とする) は、他の非CICS API を自身の責任で使用したいプログラムです。
OPENAPI プログラムの TCB
- L8 モードの TCB は、 CICS キーの OPENAPI アプリケーション・プログラムに使用されます。これには、Web サービス要求の処理、XML の構文解析、および CICS Web サポート用の z/OS UNIX ファイルへのアクセスのために L8 TCB で実行されるいくつかの CICS プログラムが含まれます。
- L9 モード TCB は、ユーザー・キー OPENAPI アプリケーション・プログラムに対して使用されます。
L8 モード TCB は、ENABLE PROGRAM コマンドで OPENAPI オプションを使用して使用可能にされた TRUE を経由して、プログラムがリソース・マネージャーにアクセスする必要がある場合にも使用されます。 オープン API TRUE には、 L8 モード TCB の下で制御が与えられ、サブタスク TCB を作成せずに非 CICS API を使用することができます。
CICS では、L8 モード・オープン TCB および L9 モードのオープン TCB のプール内の L8 TCB および L9 TCB の数が自動的に制御されます。
OPENAPI プログラムを使用すると、通常のスレッド・セーフ・プログラムより多くの TCB の切り替えを引き起こす可能性があります。 OPENAPIプログラムがスレッドセーフでないEXEC CICS コマンドまたはユーザー終了プログラムを使用し、QR TCBへの切り替えが発生した場合、 CICS、アプリケーションロジックの実行を継続するためにオープンTCBに切り替わるため、追加の切り替えが発生します。 TCB のキーが OPENAPI プログラムに対して適切であることが必要とされるため、追加の TCB の切り替えが発生する場合があります。 OPENAPI TRUE は常に L8 TCB 上の CICS キーで実行されるため、例えば、ユーザー・キー OPENAPI プログラムが L9 TCB で実行され、 Db2® 呼び出しを行う場合、 CICS は L8 TCB に切り替えて Db2を呼び出し、 L9 TCB に戻り、プログラムの実行を続行します。 この切り替えのために、 CICS Db2 アプリケーションは通常、OPENAPI プログラムとしてではなく、(CICSAPI) スレッド・セーフ・プログラムとして定義されます。 CICS キー CICS Db2 アプリケーションは、必要に応じて OPENAPI プログラムとして定義できます。