4 CICSアプリケーションの実装

この章では、次の項目について説明します。

4.1 z/OS Simple Applicationの紹介

この章の内容は次のとおりです。

4.1.1 はじめに

このアプリケーションは、もともとz/OSプラットフォーム上で開発され、VSAMとQSAMファイルとDB2表を使用するバッチおよびCICSコンテキストで使用されるCOBOLプログラムを実装していました。

データはz/OSからアンロードされ、UNIXプラットフォーム上で、、Oracle Tuxedo Application Rehosting Workbenchを使用して変換および再ロードされました。

言語コンポーネントは、Oracle Tuxedo Application Rehosting Workbenchによって、z/OSからUNIXに変換または翻訳されました。

これらのコンポーネントは、2つの主要なOracle Tuxedo Applicationコンポーネント、Batch RuntimeとCICS Runtimeを使用して、元のz/OS環境のテクニカル集中機能をエミュレートしています。ここでは、CICS文とDB2文を使用するCOBOLプログラムを実装するCICS Runtimeの個別事例に焦点を絞ります。

このSimple Applicationは、作成、変更および削除のような一連の古典的な機能を使用して企業の顧客を管理します。

4.1.2 CICS Simple Applicationコンポーネントの説明

z/OS CICS CSDファイルでは、CICSコンポーネントはすべて同じ名前を使用して宣言されます。リソース宣言はすべて、PJ01TERMという名前のz/OS CICS GROUP内で行われます。このグループは、CICSを自動インストールするために起動時に使用されたz/OS CICS LIST PJ01LISTで宣言されます。

4.1.2.1 マップセット

表4-1 Simple Applicationのマップセット

名前 説明
RSSAM00 顧客保守エントリ・メニュー
RSSAM01 顧客データ問合せ画面
RSSAM02 顧客データ保守画面(顧客の作成、更新および削除)
RSSAM03 顧客リスト画面
4.1.2.2 プログラム

表4-2 Simple Applicationプログラム

名前 説明
RSSAT000 顧客保守エントリ・プログラム
RSSAT001 顧客データ問合せプログラム
RSSAT002 顧客データ保守プログラム(新規顧客、顧客更新および顧客削除)
RSSAT003 顧客リスト・プログラム
4.1.2.3 トランザクション・コード

表4-3 トランザクション・コード

名前 説明
SA00 メイン・エントリ・トランザクション・コード(プログラムRSSAT000)
SA01 顧客問合せ(プログラムRSSAT001)
SA02 顧客保守(プログラムRSSAT002)
SA03 顧客リスト(プログラムRSSAT003)
4.1.2.4 VSAMファイル

表4-4 Simple Application VSAMファイル

DDName DataSetName 説明
ODCSF0 PJ01AAA.SS.VSAM.CUSTOMER VSAM主要顧客ファイル

4.1.3 CICS Runtimeを伴う標準CICSアプリケーションの構成

最初の例では、UNIXのOracle表に変換されたz/OS VSAMファイルだけを使用する、CICS Simple File-to-Oracleアプリケーションを使用します。

この例では、プラットフォーム移行で生成されたUNIXコンポーネントは、すべてtrfディレクトリに格納されています。

COBOLプログラムおよびBMSマップセットは、コンパイルし、ディレクトリ${HOME}/trf/cobexeおよび${HOME}/trf/MAP_TCPで、実行可能モジュールとして使用できるようにする必要があります。

4.1.3.1 CICS Simple File-to-Oracle ApplicationのUNIXコンポーネント

この項には次の情報が含まれます:

4.1.3.1.1 COBOLプログラム・ファイル

${HOME}/trf/cobexeディレクトリには、次のSimple Application CICS実行可能プログラムがあります。

  • ${HOME}/trf/cobexe/RSSAT000.gnt
  • ${HOME}/trf/cobexe/RSSAT000.gnt
  • ${HOME}/trf/cobexe/RSSAT002.gnt
  • ${HOME}/trf/cobexe/RSSAT003.gnt
4.1.3.1.2 マップセット・ファイル

${HOME}/trf/MAP_TCPディレクトリには、次のコンパイル済のSimple Application Data z/OS BMSマップセットがあります。

  • ${HOME}/trf/MAP_TCP/RSSAM00.mpdef
  • ${HOME}/trf/MAP_TCP/RSSAM01.mpdef
  • ${HOME}/trf/MAP_TCP/RSSAM02.mpdef
  • ${HOME}/trf/MAP_TCP/RSSAM03.mpdef

4.1.4 CICS Runtimeの構成

標準アプリケーションの場合は、初期設定のほか、同じグループの次のCICSリソースを実装する必要があります。

  • 基本的なCICSトランザクション(同期および同時)。
  • SQL文を持たないCOBOLプログラム、CICS TSキュー。
  • マップセット。
  • VSAMファイル(論理名および関連付けられたデータ・アクセッサ)。

これらのリソースを構成するには:

  1. これらのリソースを、それぞれのCICSランタイム・リソース構成ファイル内で宣言します。
  2. これらのリソースを管理するために、CICS Runtime Tuxedoサーバー・グループおよびサーバーを構成します。各サーバーで使用されている構成ファイルの詳細説明は、「リファレンス」を参照してください。

次の各項では、構成プロセスについて詳細に説明します。

4.1.4.1 CICS Runtimeに対してCICSリソースを宣言する手順

各リソースは、各タイプ(プログラム、トランザクションなど)に対応するファイル内で宣言されます。リソース・ファイルで定義された各リソースは、いずれかのグループに属する必要があります。

CICS Simple File-to-Oracle Applicationを使用する次のいくつかの例では、CICSランタイム・グループ名SIMPAPPを使用し、*.descファイルはすべて、${home}/trf/config/resourcesディレクトリに置かれます。

ノート:

これらの構成ファイルでは、「#」で始まる行はコメントとみなされ、CICS Runtimeによって処理されません
4.1.4.2 CICSトランザクション・コードを宣言する手順

これらの宣言は、実装の必要がある各トランザクションに対応する内容をtransactions.descファイルを記入することによって行われます。

各トランザクションに対して、csv形式で宣言する必要があります

  1. トランザクションの名前(必須)。
  2. CICSランタイム・グループ名(必須)
  3. トランザクションの短い説明(オプション、少なくとも1つの空白)
  4. このトランザクションによって起動されるプログラムの名前(必須)。

File-to-Oracle Simple Applicationの例では、COBOLプログラムRSSAT000RSSAT001RSSAT002およびRSSAT003を起動する、SIMPAPPグループの4つのトランザクション、SA00SA01SA02およびSA03を宣言する必要があります。

記入が済むと、transactions.descファイルは次のようになります。

リスト4-1 Simple Applicationのtransactions.descファイル

#Transaction Name ;Group Name ; Description ;Program Name
SA00;SIMPAPP; Home Menu Screen of the Simple Application;RSSAT000
SA01;SIMPAPP; Customer Detailed Information Screen of the Simple Application;RSSAT001
SA02;SIMPAPP; Customer Maintenance Screen of the Simple Application;RSSAT002
SA03;SIMPAPP; Customer List of the Simple Application;RSSAT003
4.1.4.3 CICS COBOLプログラムを宣言する手順

以前に宣言されたトランザクションによって、直接的または間接的(LINK、XCTL、STARTなどのEXEC CICS文を介して)に使用されるすべてのプログラムは、同じグループ内で宣言される必要があります。

これらの宣言は、各プログラムが実装するために、programs.descファイルで行われます。

各プログラムに対して、csv形式で宣言する必要があります

  1. プログラムの名前(必須)。
  2. CICSランタイム・グループ名(必須)
  3. プログラムの短い説明(オプション、少なくとも1つの空白)
  4. プログラムが記述される言語(デフォルトはCOBOL)

Simple Applicationの例では、必要なプログラムはRSSAT000RSSAT001RSSAT002およびRSSAT003だけで、すべてCOBOL言語でコーディングされています

記入が済むと、programs.descファイルは次のようになります。

リスト4-2 Simple Applicationのprograms.descファイル
#PROGRAM;GROUP;DESCRIPTION;LANGUAGE;
RSSAT000;SIMPAPP; Home Menu Program of the Simple Application ;COBOL
RSSAT001;SIMPAPP; Customer Detailed Information Program of the Simple Application ;COBOL
RSSAT002;SIMPAPP; Customer Maintenance Program of the Simple Application
RSSAT003;SIMPAPP; Customer List of the Simple Application ;COBOL

ノート:

RSSAT002の言語フィールドでは何も宣言されませんが、これは、このプログラムの言語がデフォルトのCOBOLであることを意味します。
4.1.4.4 CICSマップセットを宣言する手順

3270ターミナルまたはエミュレータを介してエンド・ユーザーと対話するには、このドキュメントでこれまで説明してきた特定のEXEC CICS文を介して以前に定義されたCOBOLプログラム内で使用された物理マップセット(*.mpdefファイル)のすべてを、CICS Runtimeに対して宣言します。

これらの宣言は、実装の必要がある各マップセットに対応する内容をmapsets.descファイルを記入することによって行われます。

各マップセット定義の入力書式は、次の書式の説明を遵守する必要があります。

  1. 最初の空の物理行に、[mapset]キーワードを入力します。
  2. 次の行で、キーワードname=に続けて、マップセットの名前を入力します。
  3. 次の行で、キーワードfilename=に続けて、物理マップセット(.mpdefファイル)の物理パスを入力します。

このSimple Applicationの例では、COBOLプログラムで使用されるマップセットは、RSSAM00RSSAM01RSSAM02およびRSSAM03です。

記入が済むと、mapsets.descファイルは次のようになります。

リスト4-3 Simple Applicationのmapsets.descファイル
[mapset]
name=ABANNER
filename=<KIXDIR>/sysmap/abanner.mpdef 
[mapset]
name=RSSAM00
filename=<HOME>/demo/MAP_TCP/RSSAM00.mpdef
[mapset]
name=RSSAM01
filename=<HOME>/demo/MAP_TCP/RSSAM01.mpdef
[mapset]
name=RSSAM02
filename=<HOME>/demo/MAP_TCP/RSSAM02.mpdef
[mapset]
name=RSSAM03
filename=<HOME>/demo/MAP_TCP/RSSAM03.mpdef

ノート:

mapsets.descファイルはUNIX変数を受け入れないため、このファイルには完全に展開したパスを指定する必要があります。
  • <KIXDIR>: ~/.profile${KIXDIR}変数の値に置換する必要があります。
  • <HOME>: ~/.profile${HOME}変数の値に置換する必要があります。
4.1.4.5 z/OS VSAMファイル変換から生成されたISAMファイルを宣言する手順

従来は、1つ以上のファイルをCICS Runtimeに対して宣言する前に、すべての物理コンポーネント、ファイル、アクセッサ・プログラム、Cobolコピーブックなどが、Oracle Tuxedo Application Rehosting Workbench Dataコンポーネントによって生成されている必要がありました。

Oracle Tuxedo Application Rehosting Workbench Dataコンポーネントによってビルドまたは変換されたすべてのコンポーネントのうち、変換済VSAMファイルのアクセッサ・プログラムだけがCICS Runtimeによって使用されます。理由は、移行後は、直接アクセスできるファイルがないことです。ファイルには、このファイルの管理専用のアクセッサ・プログラムを介して、間接的にのみアクセスできます(ソース・ファイル1つにつき、アクセッサ・プログラムは1つのみ)。

Simple Applicationは、z/OS VSAM KSDSファイルPJ01AAA.SS.VSAM.CUSTOMERのOracle Tuxedo Application Rehosting Workbenchデータ変換から生成されたCUSTOMER Oracle表だけを使用します。

このため、このFile-to-Oracleアプリケーションの例では、CICS Runtimeに対して宣言するためのアクセッサは、RM_ODCSF0の1つだけとなります(RMはRelational Moduleの略)。

ノート:

ODCSF0は、物理ファイル名PJ01AAA.SS.VSAM.CUSTOMERを参照する、CICSで以前に定義された論理名を表します。従って、EXEC CICS文によりCICS Cobolプログラムからこのファイルにアクセスするために認識されている唯一のファイル名でもあります。
4.1.4.5.1 ISAM移行済ファイルを宣言するには:
  1. 以前に定義されたプログラムで使用されたすべてのVSAM/ISAMファイルを記述する新しい変数が存在しなければ追加して、Tuxedo envfileを変更します。

    このSimple Applicationの例では、次の行を入力する必要があります(説明を簡単にするため、ファイルの場所をubbconfig、envfileおよびtuxconfigファイルと同じ場所に指定しましたが、これは必須でありません)。

    DD_VSAMFILE=${HOME}/trf/config/tux/desc.vsam
  2. ファイルが存在しない場合、示された場所に、desc.vsamファイルを物理的に作成します。
  3. 使用される各アクセッサ/ファイルに対して、アクセッサによって使用される、異なる情報フィールドを記述する新しい行をcsv形式で追加することによって、desc.vsamファイルを変更します。

このSimple Applicationの例では、次の行が入力されます。

リスト4-4 Simple ApplicationのISAMファイル宣言

#DDname;Accessor;DSNOrganization;Format;MaxRecordLength;KeyStart;KeyLength
ODCSF0;RM_ODCSF0;I;F;266;1;6

説明:

ODCSF0

EXEC CICS文で使用されるデータ記述名(論理名)です。

RM_ODCSF0

以前のVSAMファイルのデータ変換から生成されたOracle表へのアクセスを管理するアクセッサ・プログラムの名前です

I

データ・セット名組織は索引編成済です

F

FixedのFで、すべてのレコードが同じ固定長の形式です

266

最大レコード長。

1

ファイル内でのキー位置(1は1列めまたは1文字めを意味します)。

6

キー長。

4.1.4.6 CICS Runtime Tuxedoサーバーを変更する手順

以前に定義されたサーバーに加えてCICSアプリケーション・トランザクションを管理するには:

  1. CICS Runtime TuxedoサーバーARTSTRNを実装します。

    このサーバーは、同期(遅延なし)および同時(一度に1つずつでない)の、最も多く使用される基本的なCICSランタイム・トランザクションのみを管理します。

  2. SIMPAPP CICSランタイム・グループ名に属するトランザクションだけが開始されることを、CICS Runtimeに対して示します。

    Tuxedo ubbconfigファイルの*SERVERSセクションの次の例は、ARTSTRNサーバーの構成を示しています。

リスト4-5 Simple Application CICSランタイム・サーバーTuxedo構成

*SERVERS
…
ARTSTRN SRVGRP=GRP02
SRVID=20
CONV=Y
MIN=1 MAX=1 RQADDR=QKIX110 REPLYQ=Y
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_strn -e /home2/work9/demo/Logs/TUX/sysout/stderr_strn -r -- -s KIXR -l SIMPAPP "
…

説明

*SERVERS

サーバー・セクションの定義を示すTuxedo ubbconfigキーワード。

SRVGRP

ARTSTRNが属するTuxedoグループ名です。

SRVID

ARTSTRNのTuxedoサーバーの識別子です。

CONV=Y

このサーバーが対話モードで動作していることを示します。

MIN=1およびMAX=1

このサーバーのインスタンスは1つのみ実行可能であることを示します。

REPLYQ=Y

このサーバーが応答することを示します。

RQADDR=QCNX015

レスポンスに使用されるTuxedoキューの名前。

CLOPT

パラメータを含むサーバーに渡される引用符付きテキスト文字列です。

-o

サーバーの標準出力メッセージのために使用されるファイルを示します。

-e

サーバーのエラー出力メッセージのために使用されるファイルを示します。

-r

統計レポートを提供するために使用されるTuxedoパラメータです。

-s KIXR

KIXRトランザクションが実行されるCICS Runtime名を示します。

-l SIMAPP

SIMAPPグループのトランザクションだけが選択されることを示します。

4.1.4.7 CICS Runtime Tuxedoサーバー・グループを変更する手順

ARTSTRNサーバーが起動されるためには、以前に定義された(かつコメントされていない)Tuxedoサーバー・グループ内のubbconfigファイルで定義される必要があります。

この例では、ARTSTRNはTuxedoサーバー・グループGRP02 (SRVGRP=GRP02)に属しています。

リスト4-6 Simple Application CICS Runtime Tuxedoサーバー・グループの例:
*GROUPS
…
GRP02
GRPNO=12
ENVFILE="/home2/work9/demo/config/tux/envfile"
TMSNAME="TMS_ORA"

説明

*GROUPS

サーバー・セクション・グループ・セクションの定義を示すTuxedo ubbconfigキーワード。

GRPNO=

Tuxedoグループ。

ENVFILE=

Tuxedo envfileのパス。

TMSNAME=

Tuxedo Transaction Manager Server実行可能ファイルの名前。

4.2 CICSアプリケーションのインストールの検証

次の各項では、CICSアプリケーションのインストールを検証する方法について説明します。

4.2.1 Tuxedo tmadmin psrコマンドの使用

Tuxedo tmadmin psrコマンドを入力して、必要なCICSランタイム・サーバー(ARTTCPLARTCNXおよびARTSTRN)がすべて実行されており、そのメッセージがTuxedoのドキュメントとこのドキュメントに準拠していことを確認します。

リスト4-7 tmadmin psr Simple Applicationのインストール・チェック

# tmadmin
...
 
> psr
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
--------- ---------- -------- -- ------ --------- ---------------
BBL 200933 KIXR 0 2 100 ( IDLE )
ARTTCPL 00001.00101 TCP00 101 0 0 ( IDLE )
ARTCNX QCNX015 GRP01 15 2 100 ( IDLE )
ARTSTRN QKIX110 GRP02 20 6 300 ( IDLE )
 
> quit
#

4.2.2 Tuxedo tmadmin pscコマンドの使用

Tuxedo tmadmin pscコマンドを入力し、実行されているすべての異なるTuxedo Servicesを表示することによって、別のチェックが可能です。

CICSランタイム・システムのトランザクション/サービス(CSGMCESNCESFなど)に加え、これで、CICSランタイム・アプリケーションSA00SA01SA02およびSA03のトランザクション・コードを参照できます。

リスト4-8 tmadmin psc Simple Applicationのインストール・チェック

# tmadmin
...
 
> psc
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
------------ ------------ --------- -------- -- ------- ------ ------
authfail cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESF cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESN cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CSGM cnxsvc ARTCNX GRP01 15 KIXR 1 AVAIL
disconnect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
connect cnxsvc ARTCNX GRP01 15 KIXR 1 AVAIL
SA03 kixsvc ARTSTRN GRP02 20 KIXR 3 AVAIL
SA02 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA01 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA00 kixsvc ARTSTRN GRP02 20 KIXR 3 AVAIL
 
> quit
#

4.2.3 CICSランタイム・アプリケーションの使用

CICSアプリケーションを使用する前に、アプリケーションがアクセスするISAMファイルにデータを移入する必要があります。次に、3270ターミナルまたはエミュレータで、UNIX x3270コマンドを使用してCICS Runtimeにアクセスします。次のようになる必要があります。

# x3270 ${HOSTNAME}:${TCPNETADDR}

説明:

${HOSTNAME}

CICS Runtimeを実行しているUNIXマシンの名前を含んでいる、システムUNIX変数です。

${TCPNETADDR}

Tuxedo管理者により、インストール時にubbconfigファイルにセットアップされたUNIX 3270エミュレータのポート番号です。

  1. 「Good Morning」メッセージを受信します。
  2. 3270エミュレータ・キーパッドの[Clear]キーを押してクリアします。
  3. 左上隅で、CICSランタイム・アプリケーションのメイン・トランザクション・コードSA00を入力します。

    図4-1 Simple Applicationトランザクション・コード入力


    Simple Applicationトランザクション・コード入力

  4. アプリケーションのメイン・メニューが表示されます。

    図4-2 Simple Applicationメイン・メニュー


    Simple Applicationメイン・メニュー

  5. アプリケーションの画面をナビゲートし、エラーなく表示されることを確認します。

4.3 COBOL-IT / BDBにおけるSimple Applicationの紹介

XAプロトコルを使用するBDBに基づき、COBOL-ITによってコンパイルされたCICS COBOLプログラムは、ART Workbenchを使用してMainframe VSAMファイルから変換される索引編成ISAMファイルにアクセスできます。次の項では、このアプリケーションを有効化するためにART CICS Runtimeで実行する必要がある構成について説明します。

4.3.1 CICS Runtimeにおけるubbconfigファイルの構成

MRMパラメータをTuxedo ubbconfigファイルの*GROUPSおよび*RMSセクションのグループ・エントリに追加します。次の例を参照してください。

リスト4-9 ubbconfigファイルにMRMパラメータを追加する例

*GROUPS
GRP02
GRPNO=12
MRM=Y
*RMS
MRMG_RM1
SRVGRP=GRP02
RMID=15
TMSNAME="TMS_BDB"
OPENINFO="BERKELEY-DB:/home2/work10/data"

説明:

*GROUPS

サーバー・グループの定義を示すTuxedo ubbconfigキーワード。

GRPNO

Tuxedoグループを示します。

MRM= Y

このサーバー・グループが複数のリソース・マネージャをサポートできることを示します。

*RMS

リソース・マネージャの定義を示すTuxedo ubbconfigキーワード。

MRMG_RM1

RMSエントリの論理名を示します。

SRVGRP

このRMに関連付けられているグループ名を示します。

RMID

グループ内の対象RMの固有のID番号を示します。ID番号は1から31の間である必要があります。

TMSNAME

SRVGRPによって指定されるグループに関連するトランザクション・マネージャ・サーバーの名前を指定します。

OPENINFO

関連するグループのリソース・マネージャを開くときに必要な、リソース・マネージャに依存する情報を示します。

4.3.2 BDB TMSサーバーの構築

BDB TMSサーバーを構築するには、次の行を

$TUXDIR/udataobj/RM:に追加します。

BDB_HOME=/opt/cobol-it-64-bdb

BERKELEY-DB:db_xa_switch:-L/opt/cobol-it-64-bdb/lib -ldb-18.1

RMファイルを更新した後、次のコマンドを実行してBDB用TMSサーバーを構築します。

buildtms -v -r BERKELEY-DB -o $APPDIR/TMS_BDB

4.3.3 ARTサーバー起動前の変数のエクスポート

ARTサーバーを起動する前に次の変数を明示的にエクスポートします。

  • DD_VSAMFILE

    export DD_RBDB02=${DATA}/MTWART.ES.SFI.RCIBDB02.BDB0122

    RBDB02は論理ファイル名です。

  • COB_ENABLE_XA

    export COB_ENABLE_XA=1

4.4 限られた数の並列インスタンスを持つ同期CICSトランザクションの実装

一部の特定の事例では、たとえばパフォーマンスの制約のために、同じトランザクション・コードを扱う同時実行トランザクションの数を制限する必要があります。

z/OSでは、この制限はトランザクション・リソース自体で定義されることができず、同じトランザクションの同時インスタンス数の最大値を記述する固有のMAXACTIVEパラメータを含む、TRANCLASS(トランザクション・クラス)という名前の独立したリソースで定義されます。

トランザクションをトランザクション・クラスに関連付けて、そのパラメータ、特にMAXACTIVEパラメータを継承するために、z/OS CICSトランザクション・リソースには、TRANCLASSリソースの名前を含むTRANCLASSフィールドがあります。

このインスタンス管理は、CICS Runtimeを伴うUNIX上では、異なる方法で実行されます。同時実行トランザクションの最大数は、同じトランザクションを提供するサーバーの数によって定義されます。この最大数と最小数はそれぞれ、Tuxedoファイルubbconfig*SERVERSセクションにあるARTSTRN定義のMAXおよびMINパラメータで示されます。

これは、次の非常に個別的な事例を除いて、これらの制限を管理するためにmaxactiveパラメータが考慮されないことを意味します。

4.4.1 MAXACTIVE=1のトランザクション・クラスの特例

MAXACTIVE=1は、この種類のトランザクション・クラスに属する同時トランザクションが同時実行できないことを示すため、この管理の例外です。

この非常に個別的な順次トランザクションの事例を管理するには、Tuxedo CICS Runtime機能を構成する必要があります

4.4.2 順次トランザクションの場合のubbconfigファイルの変更

MAXACTIVEが2以上のトランザクション・クラスにリンクされているトランザクションはすべてCICS Runtime TuxedoサーバーARTSTRNによって管理されており、他に何も変更する必要がありません。MAXACTIVEパラメータが1に設定されているトランザクションでは、ARTSTR1という名前のCICS Runtime Tuxedoサーバーが、特定の管理を専門に扱います。

このサーバーをアクティブ化するには、次のようにubbconfigファイルを変更して、*SERVERSセクションにこのサーバーを追加します。

リスト4-10 ubbconfigへのARTSTR1サーバーの追加

*SERVERS
…
ARTSTR1 SRVGRP=GRP02
SRVID=200
CONV=Y
MIN=1 MAX=1
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_str1 -e /home2/work9/demo/Logs/TUX/sysout/stderr_str1 -r -- -s KIXR -l SIMPAPP"
…

説明:

*SERVERS

サーバー・セクションの定義を示すTuxedo ubbconfigキーワード。

SRVGRP

ARTSTR1が属するTuxedoグループ名です。

SRVID

ARTSTR1 Tuxedoサーバーの識別子です。

CONV=Y

このサーバーが対話モードで動作していることを示します。

MIN=1およびMAX=1

必須で、このサーバーのインスタンスは1つのみ実行可能であることを示します。

CLOPT

パラメータを含むサーバーに渡される引用符付きテキスト文字列です。

-o

サーバーの標準出力メッセージのために使用されるファイルを示します。

-e

サーバーのエラー出力メッセージのために使用されるファイルを示します。

-r

統計レポートを作成するために使用されるTuxedoパラメータです。

-s

KIXRは、KIXRトランザクションが実行されるCICS Runtime名を示します。

-l SIMAPP

SIMAPPグループのトランザクションだけが選択されることを示します。

ノート:

CICSランタイム・トランザクション・サーバー(ARTSTRN、ARTSTR1、ARTATRNおよびARTATR1)はすべて、同じCICSランタイム・トランザクション・グループ・サーバーを共有しており、ubbconfigサーバー・グループ・セクション(*GROUPS)を変更する必要はありません。
4.4.2.1 tranclasses.descファイルの変更

ART CICSの場合、並列性がデフォルト動作であるため、同時トランザクションを、2以上のMAXACTIVEパラメータを持つトランザクション・クラスに制限する必要は、実際にはありません。

順次トランザクションの場合は、CICS Runtimeに対してこれらのトランザクションを宣言する唯一の方法であるため、必須です。MAXACTIVE=1パラメータで定義されている特定のトランザクション・クラスを宣言します。他のCICSランタイム・リソースと同様に、これはCICSランタイム・グループ名に属する必要があります。各TRANCLASSに対して、csv形式で次のように宣言します。

  1. トランザクション・クラスの名前(必須)
  2. CICSランタイム・グループ名(必須)
  3. トランザクション・クラスの短い説明(オプション、少なくとも1つの空白)
  4. RUNを行う同じトランザクションの最大数(MAXACTIVE)。

    ノート:

    MAXACTIVEパラメータは、バイナリ・スイッチのようなものと理解できます。
    • MAXACTIVE=1 <=> 順次トランザクション・クラス(必須)
    • MAXACTIVE>1(このステップではすべての値が同等) <=> 同時トランザクション(オプション)。

例:

TRCLASS1;SIMPAPP ; Tranclass with maxactive set to 1; 1
TRCLASS2;SIMPAPP ; Tranclass with maxactive set to 2; 2
TRCLAS10;SIMPAPP ; Tranclass with maxactive set to 10; 10

TRCLASS1が持っている最初のtransclassのmaxactiveパラメータは1であり、このtransclassに属するすべてのトランザクションがARTSTR1によって順次管理される必要があることを示します。

最後の2つのtranclasses (TRCLASS2およびTRCLASS10)は、maxactiveパラメータが1より大きく、これらのtranclassesに属するトランザクションがARTSTRNサーバーの管理下で同時実行できることを示しているため、実際類似しています。

ノート:

これらの2つの最後の定義はオプションです。それらがなくても意味は同じです。
4.4.2.2 transactions.descファイルの変更

このcsv形式ファイルの最初の4つの必須フィールド(トランザクション名、グループ名、説明、プログラム名)に加えて、12番目のフィールド、TRANCLASS(トランザクション・クラス名)を追加する必要があります。

TRANCLASSフィールドは、1つ以上の空白をそれぞれの間に挟む8つのセミコロン(;)によって、Programフィールドから区切る必要があります。

この例では、CICS Runtime Simple Applicationに、次のMAXACTIVE制限を持っていると想定します。

  • SA00: MAXACTIVE=0
  • SA01: MAXACTIVE=1
  • SA02: MAXACTIVE=2
  • SA03: MAXACTIVE=10

これらのトランザクションは、以前に定義した次のtranclassesにリンクされる必要があります。

  • SA00: none
  • SA01: TRCLASS1
  • SA02: TRCLASS2
  • SA03: TRCLAS10

変更が済むと、transactions.descファイルは次のようになります。

リスト4-11 サンプルのtransactions.descファイル

#Transaction Name ;Group Name ; Description ;Program Name
SA00;SIMPAPP; Home Menu Screen of the Simple Application;RSSAT000
SA01;SIMPAPP; Customer Detailed Information Screen of the Simple ; Application;RSSAT001; ; ; ; ; ; ; ;TRCLASS1
SA02;SIMPAPP; Customer Maintenance Screen of the Simple Application;RSSAT002; ; ; ; ; ; ; ; TRCLASS2
SA03;SIMPAPP; Customer List of the Simple Application;RSSAT003; ; ; ; ; ; ; ; TRCLASS10

ノート:

  • SA00には変更が行われませんが、これは、このトランザクション・コードにトランザクション・クラスが関連付けられていないことを意味しています。つまり、このトランザクションはMAXACTIVE=1パラメータに関連付けられておらず、順次トランザクションではありません
  • SA02SA03は、MAXACTIVE >= 2と定義されているトランザクション・クラスTRCLASS2とTRCLASS10にそれぞれ関連付けられています。これらのトランザクションが必要でないとわかっている場合、結果は、SA02SA03がSA00のようにトランザクション・クラスなしで定義されている場合と正確に同じになります。
  • 順次的に動作できるSA01は、トランザクション・クラス・フィールドが必須である唯一のものです。それに関連付けられているトランザクション・クラス(TRCLASS1)が、実際にMAXACTIVE=1と定義されていることを確認します

4.4.3 ARTSTR1構成の確認

次の各項では、ARTSTR1構成を確認する方法について説明します。

4.4.3.1 Tuxedo tmadmin psrコマンドの使用

ARTSTR1を次に示します。

リスト4-12 tmadmin psrコマンドを使用したARTSTR1サーバーの確認

# tmadmin
...
 
> psr
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
--------- ---------- -------- -- ------ --------- ---------------
ARTSTR1 00012.00200 GRP02 200 0 0 ( IDLE )
BBL 200933 KIXR 0 3 150 ( IDLE )
ARTTCPL 00001.00101 TCP00 101 0 0 ( IDLE )
ARTCNX QCNX015 GRP01 15 0 0 ( IDLE )
ARTSTRN QKIX110 GRP02 20 0 0 ( IDLE )
 
> quit
#
4.4.3.2 Tuxedo tmadmin pscコマンドの使用

新しいサービスやトランザクションは、表示されません。

ARTSTRNが実行されている唯一のサーバーであるこの例では、ARTSTR1もアクティブにされた場合に何も変化がないことがわかります。

リスト4-13 tmadmin pscコマンドを使用したARTSTRNサーバーの確認
# tmadmin
...
 
> psc
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
------------ ------------ --------- -------- -- ------- ------ ------
authfail cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESF cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESN cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CSGM cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
disconnect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
connect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
SA03 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA02 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA01 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA00 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
 
> quit
#

4.5 非同期CICS非遅延トランザクションの実装

これらのトランザクションは、実行を遅らせるためにDELAYまたはTIMEパラメータを使用していないCICSプログラム内でコーディングされている特定のCICS EXEC CICS START TRANSIDリクエストによって起動されます。

プログラムの少なくとも1つにこの種の文が含まれる場合は、他のどの設定も変更することなく、CICS Runtime Tuxedoサーバーの一部の新機能をインストールし、アクティブ化します。

4.5.1 Tuxedo ubbconfigファイルの変更による非同期トランザクションの管理

ARTSTRNサーバーとARTSTR1サーバーに関しては、ファイルは同じ方法で変更されますが、これらのサーバーの名前に接頭辞を付けるために使用される文字「s」(同期)を、文字「a」(非同期)に置き換える必要があります。

4.5.2 並列非同期トランザクションの使用

MAXACTIVEパラメータが厳密に1より大きい並列非同期トランザクションを使用するための専用サーバーがARTATRNです。atrn_serverをインストールするには、ARTSTRNサーバーのインストールについて説明している項を参照してください。

また、tmadmin psrおよびpscコマンドを使用して、設定を確認できます。

Simple Applicationの例では、次のようになります。

  • psrコマンドは、新しいサーバーがARTATRNを実行していることを示します。
  • pscコマンドは、5つの新しいサービスが実行されており、1つは非同期トランザクション専用ですが、各同期トランザクション(SA00 - SA03)は、非同期モードで実行できるように複製されることを示します(ASYNC_SA00 - ASYNC_SA03)。

リスト4-14 並列非同期トランザクションを示すtmadminコマンド

# tmadmin
...
 
> psr
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
--------- ---------- -------- -- ------ --------- --------------
ARTSTR1 00012.00200 GRP02 200 0 0 ( IDLE )
BBL           200933 KIXR 0 4 200 ( IDLE )
ARTTCPL       00001.00101 TCP00 101 0 0 ( IDLE )
ARTCNX QCNX015 GRP01 15 0 0 ( IDLE )
ARTSTRN QKIX110 GRP02 20 0 0 ( IDLE )
ARTATRN QKIXATR GRP02 30 0 0 ( IDLE )
 
> psc
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
------------ ------------ --------- -------- -- ------- ------ ------
authfail cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESF cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESN cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CSGM cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
disconnect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
connect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
SA03 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA02 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA01 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA00 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
ASYNC_QUEUE ASYNC_QUEUE ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA03 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA02 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA01 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA00 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
 
> quit
{deimos:work9}-/home2/work9/demo/config/tux#{deimos:work9}-/home2/work9/demo/config/tux#

4.5.3 非並列非同期トランザクションの使用

MAXACTIVEパラメータが正確に1に等しい非並列的な非同期トランザクションを使用するための専用サーバーはARTATR1です。

ARTSTR1サーバーをインストールするには、ARTSTR1サーバーの理由とインストールについて説明している項を参照してください。

また、Tuxedo tmadmin psrおよびpscコマンドを使用して、設定を確認できます

Simple Applicationの例では、次のようになります。

  • psrコマンドは、新しいサーバーがARTATR1を実行していることを示します
  • pscコマンドは、新しいサービスが実行されていないことを示します。

リスト4-15 非並列非同期トランザクションを示すtmadminコマンド

# tmadmin
...
 
> psr
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
--------- ---------- -------- -- ------ --------- --------------
ARTATR1 00012.00300 GRP02 300 0 0 ( IDLE )
ARTSTR1 00012.00200 GRP02 200 0 0 ( IDLE )
BBL 200933 KIXR 0 4 200 ( IDLE )
ARTTCPL 00001.00101 TCP00 101 0 0 ( IDLE )
ARTCNX QCNX015 GRP01 15 0 0 ( IDLE )
ARTSTRN QKIX110 GRP02 20 0 0 ( IDLE )
 
> psc
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
------------ ------------ --------- -------- -- ------- ------ ------
authfail cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESF cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESN cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CSGM cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
disconnect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
connect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
SA03 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA02 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA01 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA00 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
 
> quit
#

4.6 非同期CICS遅延トランザクションの実装

ART CICS Runtimeでは、EXEC CICS START TRANSIDリクエストで起動される非同期CICS遅延トランザクションを、次の2つの方法で実装できます。

4.6.1 ARTSRMサーバーを使用した非同期トランザクションの実装

z/OSには、ATTIMEAFTERINTERVALなど、トランザクションを指定の時間または指定の間隔後に起動するための、時間に関係するいくつかのCICS START APIオプションがあります。ART CICS Runtimeには、これらのオプションを実装するサーバーARTSRMが用意されています。詳細は、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』のARTSRMの構成に関する項を参照してください。

このサーバーをアクティブ化するには、UBBCONFIGファイルの*SERVERSセクションでARTSRMを構成します。一連のARTSRMサーバーが各CICSリージョンの同じグループにある場合のみ、これらを構成できます。次に例を示します。

リスト4-16 UBBCONFIGでのARTSRMの構成の例

*SERVERS
…
ARTSRM
SRVGRP=ARTGRP
SRVID=500
RESTART=Y
MAXGEN=5
GRACE=3600
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_srm -e /home2/work9/demo/Logs/TUX/sysout/stderr_strn -r -- -s KIXR -l SIMPAPP"

ノート:

/Qを使用した非同期トランザクションの実装は引き続きサポートされていますが、START TRANID/CANCELコマンドが呼び出されると、リクエストはまず、ARTSRMで通知されるTRANCTL_[SYSID]サービスに送信されます。呼出しがTPNOENTエラー・コードを受け取ると、次に/Qを使用してリクエストを再ディスパッチします。

4.6.2 /Qを使用した非同期トランザクションの実装

非同期トランザクションが起動されるのは、EXEC STARTASYNC_QSPACEがオプションINTERVALまたはPROTECTを使用して設定される場合です。

この場合、トランザクション・リクエストはOracle Tuxedo /Qキューに保存され、時刻になると、トランザクションが自動的に起動されます。

この機能を有効にするには、次のコンポーネントを構成する必要があります。

  1. ASYNC_QSPACEという名前のOracle Tuxedo /Qキュー・スペース
  2. ASYNC_QSPACE内のASYNC_QUEUEという名前のOracle Tuxedo /Qキュー
  3. これらの非同期トランザクション専用のTMQUEUEサーバーとTMQFORWARDサーバー
4.6.2.1 Tuxedo /Qの作成

CICS Runtimeには、すべてのTuxedo /Qコンポーネントを作成するUNIXスクリプト、mkqmconfig.shが用意されています。

  1. スクリプトを使用する前に、UNIX ~./.profileファイル内で、次のものを定義およびエクスポートします。
    • QMCONFIG変数QMCONFIG - Tuxedo /Qキュー・スペースASYNC_QSPACEが格納されているディレクトリのフルパスが含まれています。
    • KIX_QSPACE_IPCKEY変数 - キュー・スペースのIPCキーが含まれています。
      ~/.profile変数と値の例:
      export QMCONFIG=${HOME}/trf/config/tux/kixqspace
      export KIX_QSPACE_IPCKEY=200955
  2. コマンド行からmkqmconfig.shを実行して、Tuxedo /Q機能を作成します。
4.6.2.2 Tuxedo /Qキュー管理のためのTuxedo ubbconfigファイルの変更
  1. GQUEUEサーバー・グループを、ubbconfigファイルの*GROUPセクションに追加する必要があります。
    リスト4-17 Simple Application Tuxedoキューubbconfigの例
    *GROUPS
    …
    # /Q
    GQUEUE GRPNO=1000
    TMSNAME=TMS_QM TMSCOUNT=2
    OPENINFO="TUXEDO/QM:/home2/work9/demo/config/tux/kixqspace:ASYNC_QSPACE"

    説明:

    *GROUPS

    サーバー・グループの定義を示すTuxedo ubbconfigキーワード。

    GRPNO=

    Tuxedoグループ。

    TMSCOUNT=

    Tuxedoトランザクション・マネージャ・サービスの数

    TMSNAME

    Tuxedo Transaction Manager Server実行可能ファイルの名前。

    OPENINFO=

    Tuxedo /Qトランザクション・マネージャQMに対して、管理対象のQSPACE名とそのUNIX絶対パスを示します。

  2. それから、2台のサーバー、TMQUEUETMQFORWARDを、ubbconfigファイルの*SERVERSセクションに追加する必要があります。

リスト4-18 Simple Application ubbconfigのTMQUEUEおよびTMQFORWARDの例

*SERVERS
…
# /Q
TMQUEUE SRVGRP=GQUEUE
SRVID=1010
GRACE=0 RESTART=Y CONV=N MAXGEN=10
CLOPT="-s ASYNC_QSPACE:TMQUEUE -- "
TMQFORWARD
SRVGRP=GQUEUE
SRVID=1020
GRACE=0 RESTART=Y CONV=N MAXGEN=10
CLOPT="-- -n -i 2 -q ASYNC_QUEUE"
…

説明:

*SERVERS

サーバー・セクションの定義を示すTuxedo ubbconfigキーワード。

SRVGRP

サーバーが属するTuxedoグループ名です。

SRVID

Tuxedoサーバーの識別子です。

MAXGEN=10

プロセスが最大10のサーバーを再起動できるように指定します。

GRACE=0

サーバー再起動の数が含まれる制限間隔がないことを意味します。

CONV=N

このサーバーが非対話モードで動作していることを示します。

CLOPT

パラメータを含むサーバーに渡される引用符付きテキスト文字列です。

tmadmin psrおよびpscコマンドを使用して、4台の新しいサーバーと2つの新しいサービスが実行されていることを確認します。

リスト4-19 Simple Application TMQUEUEおよびTMQFORWARDのtmadminの例

# tmadmin
...
 
> psr
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
--------- ---------- -------- -- ------ --------- --------------
ARTATR1 00012.00300 GRP02 300 0 0 ( IDLE )
ARTSTR1 00012.00200 GRP02 200 0 0 ( IDLE )
BBL           200933 KIXR 0 4 200 ( IDLE )
ARTTCPL       00001.00101 TCP00 101 0 0 ( IDLE )
ARTCNX QCNX015 GRP01 15 0 0 ( IDLE )
TMS_QM        GQUEUE_TMS GQUEUE 30001 0 0 ( IDLE )
TMS_QM        GQUEUE_TMS GQUEUE 30002 0 0 ( IDLE )
TMQUEUE       01000.01010 GQUEUE 1010 0 0 ( IDLE )
TMQFORWARD    01000.01020 GQUEUE 1020 0 0 ( IDLE )
ARTSTRN QKIX110 GRP02 20 0 0 ( IDLE )
ARTATRN QKIXATR GRP02 30 0 0 ( IDLE )
 
> psc
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
------------ ------------ --------- -------- -- ------- ------ ------
TMS TMS TMS_QM GQUEUE 30001 KIXR 0 AVAIL
TMS TMS TMS_QM GQUEUE 30002 KIXR 0 AVAIL
ASYNC_QSPACE TMQUEUE TMQUEUE GQUEUE 1010 KIXR 0 AVAIL
authfail cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESF cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESN cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CSGM cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
disconnect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
connect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
SA03 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA02 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA01 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA00 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
ASYNC_QUEUE ASYNC_QUEUE ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA03 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA02 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA01 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA00 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
 
> quit
#

4.7 一時記憶域(TS)キューを使用したCICSアプリケーションの実装

これらのトランザクションは、CICS一時記憶域キューに関連するEXEC CICSリクエストを含むCICSプログラムを使用します。

使用される文は、EXEC CICS WRITEQ TS … END-EXEC, EXEC CICS READQ TS … END-EXEC, EXEC CICS DELETEQ TS … END-EXECです。

プログラムの少なくとも1つがこれらの文の1つを含んでいる場合は、他の設定を変更せずに、CICS Runtimeの新機能をインストールし、アクティブにします。

TS Queuesを管理するには、ARTTSQ CICS Runtime Tuxedoサーバーをアクティブにします。

  • このサーバーをアクティブにするには、Tuxedo ubbconfigファイルの*SERVERSセクションに、このサーバーを追加します。

リスト4-20 ubbconfigファイルでのARTTSQのアクティブ化

*SERVERS
…
ARTTSQ SRVGRP=GRP02
SRVID=40
MIN=1 MAX=1
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_tsq -e /home2/work9/demo/Logs/TUX/sysout/stderr_tsq -r -- -s KIXR -l SIMPAPP"

説明:

*SERVERS

サーバー・セクションの定義を示すTuxedo ubbconfigキーワード。

SRVGRP

ARTTSQが属するTuxedoグループ名です。

SRVID

ARTTSQのTuxedoサーバーの識別子です。

MIN=1およびMAX=1

このサーバーのインスタンスは1つのみ実行可能であることを示します。

CLOPT

パラメータを含むサーバーに渡される引用符付きテキスト文字列です。

-o

次のファイルがサーバーの標準出力メッセージのために使用されることを示します。

-e

次のファイルがサーバーのエラー出力メッセージのために使用されることを示します。

-r

統計レポートを提供するために使用されるTuxedoパラメータです。

-s KIXR

トランザクションが実行されるCICS Runtime名がKIXRであることを示します。

-l SIMAPP

起動時にSIMAPPグループのコンポーネントだけが選択されることを示します。

Tuxedo tmadmin psrおよびpscコマンドを使用して、サーバーが実行され、6つの新しいサービスが公開されていることを確認します。

リスト4-21 ARTTSQサーバーおよびサービスの実行確認

# tmadmin
...
 
> psr
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
--------- ---------- -------- -- ------ --------- --------------
ARTATR1 00012.00300 GRP02 300 0 0 ( IDLE )
ARTSTR1 00012.00200 GRP02 200 0 0 ( IDLE )
BBL           200933 KIXR 0 3 150 ( IDLE )
ARTTCPL       00001.00101 TCP00 101 0 0 ( IDLE )
ARTCNX QCNX015 GRP01 15 0 0 ( IDLE )
ARTSTRN QKIX110 GRP02 20 0 0 ( IDLE )
ARTTSQ 00012.00040 GRP02 40 0 0 ( IDLE )
 
> psc
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
------------ ------------ --------- -------- -- ------- ------ ------
authfail cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESF cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESN cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CSGM cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
disconnect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
connect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
SA03 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA02 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA01 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA00 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
TSM00004_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00003_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00002_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00001_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00000_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSQUEUE tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
 
> quit
{deimos:work9}-/home2/work9/demo/config/tux#

4.7.1 回復できないTSキューの実装

回復できないTSキューの場合、内容に関する整合性はCICS Runtimeによって保証されません。たとえば、CICSトランザクションのどこかの時点でabendが発生した場合、このTSにしたことは最後の整合性ポイントにロールバックされません。

TSキューは、KIX_TS_DIR UNIX環境変数で定義される専用ディレクトリの順編成ファイルに格納されます。この変数は、~/.profile UNIXシステム・ファイルで定義され、そこからエクスポートされます。

KIX_TS_DIR=${HOME}/trf/KIXTSDIR

Tuxedo ubbconfigファイルを変更して、管理専用の新しいARTTSQサーバーをアクティブ化します。

4.7.2 回復可能なTSキューの実装

これらのTSキューについては、CICS Runtimeが内容の整合性を保証します。たとえば、CICSトランザクションのどこかの時点でabendが発生した場合、最後の整合性ポイントにロールバックされ、すべて正常であれば、その内容がコミットされて新しい整合性ポイントになります。これらのTSキューは、RDBMS整合性管理を活用するために、にOracle表に格納されます。

TSキューに関しては、リカバリ可能なTSキューの強化動作があります。

ソースCICS z/OSで、CICSエンキューがREADQ TSコマンドに対して呼び出されないため、あるタスクが一時保存キュー・レコードを読み取ると同時に、別のタスクは同じレコードを更新することが可能になります。これを回避するには、タスクを同時に実行しても同じ一時保存識別子でキューを読み取るおよび変更することができるように、一時保存キューで明示的なエンキューを使用します

また、この動作によって、リカバリ可能なTSキューがコミットされる前またはロールバックされた後でも、1つのトランザクションではそのキュー内に新しく書き込まれたレコードを参照または読み取ることが可能になります。

ターゲット側では、この制限はありませんが、特に次の場合には制限があります。

  • 読取りトランザクションは、追加されたばかりでまだコミットされていないレコードを参照できません。
  • 読取りトランザクションは、まだコミットされていないレコードに対する変更を参照できません。

次の項では、回復可能なTSキューの使用方法について説明します。

4.7.2.1 回復可能なTSキューを使用する手順

回復可能なTSキューを使用するには、TSキューを含むようにOracle表を定義する必要があります。CICS Runtimeには、これらの表すべてを作成するためのUNIXスクリプト、crtstable_Oracleが用意されています。

  1. スクリプトを使用する前に、UNIX ~./.profileファイルから、次のものを定義およびエクスポートします。
    • Oracleに接続するために使用されるユーザーIDを含むORA_USER変数。
    • 関連付けられているパスワードを含むORA_PASSWD変数。

      ~/.profile変数と値の例:

      export ORA_USER="Oracle_User_1"

      export ORA_PASSWD="Oracle_Pswd_1"

  2. 変数の設定が完了したら、crtstable_Oracleスクリプトを実行します。
  3. 続いて、Tuxedo ubbconfigファイルを変更して、*GROUPSセクションでOracleへの接続を確立するためにARTTSQによって使用されるサーバー・グループを変更します。
    リスト4-22 ARTTSQサーバーで使用されるサーバー・グループGRP02に関連するTuxedo ubbconfigファイルの*GROUPセクションの例。
    *GROUPS
    …
    GRP02
    GRPNO=12
    ENVFILE="/home2/work9/demo/config/tux/envfile"
    TMSNAME="TMS_ORA" OPENINFO="Oracle_XA:Oracle_XA+Acc=P/work9/work9+SesTm=600+LogDir=/home2/work9/demo/Logs/TUX/xa+DbgFl=0x20"

    説明:

    *GROUPS

    サーバー・グループの定義を示すTuxedo ubbconfigキーワード。

    GRPNO=

    Tuxedoグループ番号。

    TMSNAME=

    Tuxedo Transaction Manager Server実行可能ファイルの名前。

    OPENINFO=

    パラメータがOracle_XA Managerに送信します。

  4. Tuxedo psrおよびpscコマンドを使用して、Oracleが使用できることを確認します。3台の新しいサーバーと3つの新しいサービスが示されるはずです。
リスト4-23 Simple Applicationの回復可能なTSキューのチェック
# tmadmin
...
 
> psr
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
--------- ---------- -------- -- ------ --------- --------------
ARTATR1 00012.00300 GRP02 300 0 0 ( IDLE )
ARTSTR1 00012.00200 GRP02 200 0 0 ( IDLE )
BBL           200933 KIXR 0 4 200 ( IDLE )
ARTTCPL       00001.00101 TCP00 101 0 0 ( IDLE )
TMS_ORA       GRP02_TMS GRP02 30001 0 0 ( IDLE )
TMS_ORA       GRP02_TMS GRP02 30002 0 0 ( IDLE )
TMS_ORA       GRP02_TMS GRP02 30003 0 0 ( IDLE )
ARTCNX QCNX015 GRP01 15 0 0 ( IDLE )
ARTSTRN QKIX110 GRP02 20 0 0 ( IDLE )
ARTTSQ 00012.00040 GRP02 40 0 0 ( IDLE )
 
> psc
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
------------ ------------ --------- -------- -- ------- ------ ------
TMS TMS TMS_ORA GRP02 30001 KIXR 0 AVAIL
TMS TMS TMS_ORA GRP02 30002 KIXR 0 AVAIL
TMS TMS TMS_ORA GRP02 30003 KIXR 0 AVAIL
authfail cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESF cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESN cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CSGM cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
disconnect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
connect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
SA03 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA02 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA01 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA00 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
TSM00004_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00003_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00002_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00001_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00000_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSQUEUE tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
 
> quit
#

4.8 TDキュー・イントラパーティションの管理

この章のトピックは、次のとおりです:

4.8.1 ソース・プラットフォーム・メカニズムの紹介

この項には次の情報が含まれます:

4.8.1.1 一時データ管理

CICS一時データ管理機能は、標準的なキューイング機能を提供します。データを後続の内部または外部処理のためにキューに格納できます。アプリケーション・プログラムで指定して選択されたデータは、事前定義済のシンボリック一時データ・キューとの間で、イントラパーティションまたはエクストラパーティションでルーティングできます。

一時データ・キューは、CICSリージョンに割り当てられた機能と関連付けられた場合、イントラパーティションです。データがCICSリージョンの外部の宛先に送信される場合は、エクストラパーティションです。一時データ・キューは、アプリケーション・プログラムによる最初のリファレンスより前に定義とインストールする必要があります。

次の操作を実行できます。

  • データを一時データ・キューへ書き込みます(WRITEQ TDコマンド)
  • 一時的データ・キューからデータを読み取ります(READQ TDコマンド)
  • イントラパーティション一時的データ・キューを削除します(DELETEQ TDコマンド)。

ノート:

このドキュメントでは、特別にイントラパーティションTDキューに集中します。
4.8.1.2 イントラパーティション一時データ・キュー

イントラパーティションは、別のタスクとして実行中の1つ以上のプログラムで使用される直接アクセス・ストレージ・デバイスのデータを指します。これら内部キューとの間で送信されるデータはイントラパーティション・データと呼ばれます。可変長のレコードで構成されている必要があります。

ユーザー・タスクによってキューにデータが書き込まれた場合、このキューはCICSリージョン内の別のタスクの入力データとして使用できます。すべてのアクセスは順次で、読み込みと書込みポインタによって制御されます。一度読み込まれたレコードは別のタスクから読み込むことはできません。イントラパーティション・データは最終的にリクエストによりターミナルに転送されるか、出力データセットから順に取得されます。

イントラパーティション・データの典型的な使用には次が含まれます。

  • メッセージ切替え。
  • ブロードキャスト。
  • データベース・アクセス。
  • 複数のターミナルへの出力のルーティング(たとえば、順序配布のため)。
  • データのキューイング(たとえば、順序番号または到着順優先度の割当てため)。
  • データ収集(たとえば、2780データ送信ターミナルからのバッチ入力のため)

イントラパーティション一時データ・キューには次の3種類があります。

回復不能

回復不能なイントラパーティション一時データ・キューは、CICSのウォーム・スタートのみで回復されます。作業ユニット(UOW)が回復不能なイントラパーティション・キューを更新し、後で更新を取り消した場合、キューに対して行われた更新は取り消されません。

物理的に回復可能

物理的にリカバリ可能なイントラパーティション一時データ・キューは、ウォームや緊急な再起動のときに回復されます。UOWが物理的にリカバリ可能なイントラパーティション・キューを更新して、後で更新を取り消した場合、キューに対して行われた更新は取り消されません。

論理的に回復可能

論理的にリカバリ可能なイントラパーティション一時データ・キューは、ウォームや緊急な再起動のときに回復されます。UOWは論理的にリカバリ可能なイントラパーティション・キューを更新し、後で更新を取り消した場合、キューに対して行われた更新も取り消されます。ウォーム、または緊急な再起動のとき、論理的にリカバリ可能なイントラパーティション・キューのコミット状態が回復されます。進行中のUOWは無視されます。

4.8.2 自動トランザクション初期化(ATI)

イントラパーティション・キューの場合は、CICSは自動トランザクション初期化(ATI)のオプションを提供します。

システム・プログラマが特定のイントラパーティション宛先の非ゼロ・トリガー・レベルを指定し、ATIの基準を確立します。(1つ以上のプログラムによって発行されたWRITEQ TDコマンドが作成した)キューでのエントリの数が指定されたトリガー・レベルに達した場合、キューの定義に指定されたトランザクションが自動的に開始されます。コントロールがキューでのデータを処理するプログラムに渡されます。キューを使い果たすためにプログラムは繰り返しREADQ TDコマンドを発行する必要があります。

キューを空にすると新しいATIサイクルが開始します。つまり、指定されたトリガー・レベルに達すると、前のタスクがまだ実行中でも新しいタスクの開始がスケジュールされます。新しいATIサイクルが開始する正確な時点は、キューが論理的にカバリ可能として定義されているかどうかによります。キューのRECOVSTATUSをNoまたはPhysicalとして定義した場合、新しいATIサイクルはキューがQZEROに読み込まれたときに開始されます。しかし、キューがLogicalのリカバリ可能な属性で定義された場合、新しいATIサイクルはキューをQZEROに読み込んでタスクが終了してから開始されます。

自動的に開始されたタスクがキューを空にしない場合、キューへのアクセスは禁止されません。タスクはキューが空になる前に正常終了または異常終了することがあります。(つまり、READQ TDコマンドへのレスポンスとしてQZERO状態が発生する前に)キューの内容をターミナルに送信する必要があり、前のタスクが正常終了している場合、QZEROに達していないことはトリガー処理がリセットされず、同じタスクが再開されたことを意味します。トリガー処理がリセットされていない場合、後続のWRITEQ TDコマンドは新しいタスクをトリガーしません。

4.8.3 ターゲット・プラットフォーム・メカニズムの紹介

この項には次の情報が含まれます:

4.8.3.1 Tuxedo /Q

Tuxedo /QはTDキューなどと同じ機能を持つ強力で多目的なキューイング・システムを提供します。

キューはリカバリ可能または不可能として定義できます。また、いくつかの別のオプションからのトリガーも可能です。エラーの管理は一層洗練されていて、ターゲットに対するATIトランザクションが失敗した場合のエラー管理が簡略化されます。

4.8.3.2 アーキテクチャ設計

表4-5 ソース・ターゲット・マッピング

ソース要素 ターゲット通信
TDキュー・イントラパーティション Tuxedo /Qキュー。
関連する取引(TRANID) ATRサーバーが提供する関連する取引。
トリガー・レベル トリガー・レベル。
リカバリ性: No|Physical|Logical ターゲットと同様のレベルが用意されていますが、構成プリンシパルは異なります。

CICSの動詞READQ TD、WRITEQ TDおよびDELETEQ TD(イントラパーティション・キューに適用される)は、Tuxedoの語彙でいうと、Tuxedo /Qのキューから読取り、書込み、および削除します。(tpenqueueおよびtpdequeue)。

キューが論理的にリカバリ可能であれば、これらのアクションは現在のUOWで実行され、そうでなければ現在のUOWと関係なくアトミックに実行されます。

CICS Runtime内部では、非論理的にリカバリが可能なキューに対する操作にTPNOTRANフラグを追加することにより実行されます。

4.8.3.3 トリガー

トリガーの場合、ネイティブCICSのように、トランザクションは自動的にトリガーされます。このトランザクションは、対応するキューを読み、メッセージを処理します。

CICS Runtimeでは、これらの非同期トランザクションはARTATR1およびARTATRNのいずれかの専用サーバー・タイプARTATRにより提供および処理されます。

これらのサーバーは、すべての非同期トランザクション(より正確には、START TRANSIDまたはtdキュー・イントラパーティションに関する自動トランザクション起動により発行されたトランザクション)を処理します。

トリガー・レベルに達した場合、特定のCICSランタイム・クライアント(TDI_TRIGGER)が該当する非同期トランザクションの起動に使用されます。

4.8.4 TDキュー・イントラパーティションに対するRuntime CICS構成

この項の内容は次のとおりです。

4.8.4.1 CICS Runtimeリソース宣言

CICS Runtimeの各CICSのようなリソースは、${KIXCONFIG}ディレクトリに保存される専用の構成ファイルによって宣言されます。

読み取りおよび書き込み処理に同じAPIを使用するとはいえ、TDキュー・エクストラパーティションおよびTDキュー・イントラパーティション・リソース宣言はわずかな引数しか共有せず、意味的にかなり異なるオブジェクトです。

この理由により、CICS Runtimeでは、TDキュー・エクストラ・パーティション・リソース構成とTDキュー・イントラパーティション・リソース構成をそれぞれ2つの異なるリソース・ファイルに分けて保存しています。

イントラパーティション・キューは、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』に記載されているtdqintra.descファイルで宣言されています。

重要な属性は、次のとおりです。

TDQUEUE(name)

キュー名(ソース構成にあるキュー名とまったく同じ) - この名前は、Tuxedo /Q構成にあるキュー名と同一でなければなりません。

RECOVSTATUS(status)

NOまたはLOGICALのステータスのみ使用できます。2つのモードの違いはWRITEQ TDおよびREADQ TDの処理に影響します。より正確には、LOGICALでは現在のUOWの一部となり、NOでは現在のUOWから独立したアトミック操作になります。

NOとPHYSICALの違いは、リソース構成ファイルに定義されませんが、永続/Qまたは非永続へマッピングしてネイティブTuxedo /Q構成パラメータを使用して実装されます。

TRANSIDおよびTRIGGERLEVEL

現行のリリースではtdqintra.descのみに記載され、考慮された/Q構成での値です。

QSPACENAME

/Qのために必要な新規引数で、そのQSPACEに定義することで、現在の/Qが保存されます。この引数は必須で、実際の/Qキューが物理的に格納されるQSPACENAMEと一致する必要があります。

4.8.4.2 CICS Runtime内のTDキュー・イントラパーティションに対する/Q構成

qmadminと/Q configurationの正確で詳細な情報は、 Tuxedoドキュメントの『ATMI /Qコンポーネントの使用』を参照してください。

CICS Runtimeで配布されるスクリプトmk_td_qm_config.shは、qspaceの作成およびその後TDイントラパーティション・キューに対して使用する/Qへのキューの作成と構成の例を示します。

このスクリプトは3つの環境変数を使用します。これらの環境変数は、環境に応じて設定する必要があります。

  • KIX_TD_QSPACE_DEVICE: TDキューの/Qデータベースを含む物理ファイルのファイル名を含める必要があります。
  • KIX_TD_QSPACE_NAME: キューを含む論理QSPACEの名前を含みます。
  • KIX_TD_QSPACE_IPCKEY: /Qのインスタンスで使用されるIPCに対してマシン上で一意である必要がある特定のキーを指します。

デバイス(KIX_TD_QSPACE_DEVICE)およびQSPACEの作成方法は標準であり、ここでは説明を省略します。

キューの構成については説明します。

キューを含むqspaceを開くためのqopen QspaceNameコマンドは、任意のキューを作成する前に発行する必要があります。QspaceNameは、これらのキューのリソース宣言でのQSPACENAMEと一致する必要があります。

qmadminを使用した対話型のキュー作成の例は次のとおりです。qmadminからの質問は標準のフォントで表示され、ユーザーが記入したエントリが太字で表示されています。

リスト4-24 qopenダイアログ
qopen TD_QSPACE
qcreate
Queue name: TEST
Queue order (priority, time, expiration, fifo, lifo): fifo
Out-of-ordering enqueuing (top, msgid, [default=none]): none
Retries [default=0]: 5
Retry delay in seconds [default=0]: 0
High limit for queue capacity warning (b for bytes used, B for blocks used,
% for percent used, m for messages [default=100%]): 5m
Reset (low) limit for queue capacity warning [default=0%]: 0m
Queue capacity command: "TDI_TRIGGER -t S049"

次に、スクリプトでのこの手動入力に相当するものを示します。

リスト4-25 qopenスクリプト

qopen TD_QSPACE

qcreate TEST fifo none 3 0 5m 0m "TDI_TRIGGER -t S049"

4.8.4.3 qopenパラメータ

TD_QSPACE

QspaceNameは、これらのキューのリソース宣言でのQSPACENAMEと一致する必要があります。

キュー名

キュー名は、リソース宣言での名前と完全に一致しなければなりません。

キュー順序

キューを読み込む場合のデフォルトのデキュー順序は、TDイントラ・ネイティブ動作をfifoに設定します。

順序無視のエンキュー

一部のアプリケーションはこれらのキューに書き込むことするにはネイティブ/Qインタフェースを使用しない場合、これは意味がありません。Runtime CICSのみではnoneに設定する使用方法があります。

再試行

キューを読み取って、UOWが中断された場合、メッセージがまたキューに移される回数を定義します。不正なメッセージのためATIトランザクションが失敗した場合、再実行の繰り返しを避けるために適切な数を設定します

この回数に達した場合、または設定がゼロであれば最初の中断のとき、メッセージはキューから削除され、更なる分析のためにエラー・キューに移されます。

再試行遅延時間

再試行がNullでない場合、記録をキューに戻されるまでの遅延を定義します。ロールバックの場合、Runtime CICSの推奨値はデフォルト値の「0」です。

キュー・キャパシティ警告の上方限度

これは、TDキューのさらに柔軟性のあるトリガー・レベルに等価のものです。TDキューと互換性を持たせるために、トリガー・レベルに設定し、メッセージ数で表現します。たとえば、トリガーを一時停止するには0mで、キュー内の5個のメッセージのトリガー・レベルのためには5mです。

キュー・キャパシティ警告のリセット(下方)限度

これは、上限のトリガーをリセットする前に達する必要がある下方レベルです。TDキューの動作と互換性を持たせるために、これを0 (QZERO) - CICSでのTDキューのリセット値 - に設定する必要があります。

キュー・キャパシティ・コマンド

これは、トリガー・レベルに達した場合に起動されるコマンドです。CICS Runtimeでは、TDI_TRIGGER -tb TRIDに設定する必要があります。TRIDはリソース構成のTRANSIDと一致する必要があるトリガーのトランザクションのトランザクション識別子です。

ヒント:

ATRサーバーはATIを処理するとき、トランザクションがQZEROに到達したかどうか、また成功したかロールバックしたかどうかを認識します。QZEROに到達しない場合、ソース・プラットフォームと同じ方法でトランザクションを再発行します。

ただし現在は、再試行回数がATIFACILITYパラメータに置き換わり、ロールバックされたTDキュー・レコードが再発行されるかどうかという事実がこれによって制御されます。

今では管理者が再発行の数を決定し、エラー・キュー上の障害メッセージを取得できるということは、ソースと比べると進歩です。

4.8.5 Tuxedo ubbconfigファイルでのARTTDQのアクティブ化

TDQ監視を有効にするには、ARTTDQサーバーをアクティブ化する必要があります。

リスト4-26 ubbconfigファイルでのARTTDQのアクティブ化
*SERVERS
…
ARTTDQ SRVGRP=GRP02
SRVID=40
MIN=1 MAX=1
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_tdq -e /home2/work9/demo/Logs/TUX/sysout/stderr_tdq -r -- -s KIXR -l SIMPAPP"

説明:

*SERVERS

サーバー・セクションの定義を示すTuxedo ubbconfigキーワードです。

SRVGRP

ARTTDQが属するTuxedoグループ名です。

SRVID

ARTTDQのTuxedoサーバーの識別子です。

MIN=1およびMAX=1

このサーバーのインスタンスは1つのみ実行可能であることを示します。

CLOPT

パラメータを含むサーバーに渡される引用符付きテキスト文字列です。

-o

次のファイルがサーバーの標準出力メッセージのために使用されることを示します。

-e

次のファイルがサーバーのエラー出力メッセージのために使用されることを示します。

-r

統計レポートを提供するために使用されるTuxedoパラメータです。

-s KIXR

トランザクションが実行されるCICS Runtime名がKIXRであることを示します。

-l SIMAPP

起動時にSIMAPPグループのコンポーネントだけが選択されることを示します。

4.9 一時記憶域(TS)キュー・プールを使用したCICSアプリケーションの実装

これらのトランザクションは、CICS一時記憶域キューに関連するEXEC CICSリクエストを含むCICSプログラムを使用します。

使用される文は、EXEC CICS WRITEQ TS ... END-EXEC、EXEC CICS READQ TS ... END-EXEC、EXEC CICS DELETEQ TS ... END-EXECです。

プログラムの少なくとも1つにこれらの文のいずれかが含まれ、キューがPOOLNAME (tsqmodel.desc)を使って定義されている場合は、他の設定を変更せずに、CICS Runtimeの新機能をインストールし、アクティブにします。

POOLを使用してTSキューを管理するには、次のステップを実行します。

  1. まず、TS QueueとPOOLを含むデータベース表を定義します。CICS Runtimeは現在、OracleデータベースとUDBをサポートしています

    CICS Runtimeには、このような表すべてを作成できるUNIXスクリプト、crtsptable_{Oracle|UDB}が用意されています。これらの表を作成するには、MT_DB_LOGIN環境変数を設定し、crtsptable_{Oracle|UDB}を実行します。MT_DB_LOGINを設定し、データベース接続情報を入力します。たとえば: DBUSER/DBPASSWD@DBSID。Oracleデータベース・ユーザーの例については、「リスト4-27」を参照してください。

  2. 続いて、UBBCONFIG *GROUPSセクションでOracleへの接続を確立するために、Tuxedo UBBCONFIGファイルを変更して、ARTTSQPが使用するサーバー・グループを変更します。
  3. 次に、ARTTSQP CICS Runtime Tuxedoサーバーをアクティブ化します。アクティブ化するには、このサーバーをUBBCONFIG SERVERSセクションに追加します。「リスト4‑28」を参照してください
  4. 最後に、Tuxedo tmadmin psr、およびpscコマンドを使用して、サーバーが実行されていること、新しいサービスが公開されていることを確認します。例については、「リスト4-29」を参照してください。

ARTTSQP_UDBを使用する場合、新規DB2サーバー/表のサーバーを再バインドするために、次の手順の実行が必要になることがあります。

  1. 環境変数MT_DB_LOGINを設定し、データベース接続情報を入力します。
  2. $KIXDIR/binに進みます
  3. 次を実行します。

    ../tools/bind.sh tspool_UDB.bnd

リスト4-27 ARTTSQPサーバーで使用されるサーバー・グループGRP02に関連するUBBCONFIG構成の例

*SERVERS
...
ARTTSQP SRVGRP=GRP02
SRVID=40
MIN=2 MAX=2
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_tsqp -e /home2/work9/demo/Logs/TUX/sysout/stderr_tsqp -r -- -L list1"
...

説明:

*GROUPS

TuxedoのUBBCONFIGキーワードで、サーバー・グループの定義を示します。

GRPNO

Tuxedoのグループ番号です。

TMSNAME

Tuxedo Transaction Manager Server実行可能ファイルの名前です。

OPENINFO

Oracle_XA Managerに送信されるパラメータです。

リスト4-28 UBBCONFIGファイルでのARTTSQPのアクティブ化
*SERVERS
...
ARTTSQP SRVGRP=GRP02
SRVID=40
MIN=2 MAX=2
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_tsqp -e /home2/work9/demo/Logs/TUX/sysout/stderr_tsqp -r -- -L list1"
...

説明:

*SERVERS

TuxedoのUBBCONFIGキーワードで、サーバー・セクションの定義を示します。

SRVGRP

ARTTSQPが属するTuxedoグループ名です。

SRVID

TuxedoサーバーARTTSQPの識別子です。

MIN=2およびMAX=2

このサーバーのインスタンスを2つ実行できることを示します(このサーバーでは、1つ以上のインスタンスを実行できます)。

CLOPT

パラメータを含むサーバーに渡される引用符付きテキスト文字列です。

-o

次のファイルがサーバーの標準出力メッセージのために使用されることを示します。

-e

次のファイルがサーバーのエラー出力メッセージのために使用されることを示します。

-r

統計レポートを提供するために使用されるTuxedoパラメータです。

-L

このサーバーによってロードされるグループのリストを示します。

リスト4-29 ARTTSQPサーバーおよびサービスのチェック
# tmadmin
 
...
 
> psr
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
--------- ---------- -------- -- ------ --------- ---------------
BBL 42444 KIXR 0 30 1500 ( IDLE )
TMS_ORA GRP02_TMS GRP02 30001 0 0 ( IDLE )
ARTTCPL 00001.00101 TCP00 101 0 0 ( IDLE )
TMS_ORA GRP02_TMS GRP02 30002 0 0 ( IDLE )
ARTADM 00011.00010 GRP01 10 0 0 ( IDLE )
ARTCNX QCNX015 GRP01 15 0 0 ( IDLE )
ARTSTRN QKIX110 GRP02 20 0 0 ( IDLE )
ARTSTRN QKIX110 GRP02 21 0 0 ( IDLE )
ARTTSQP 00012.00040 GRP02 40 0 0 ( IDLE )
ARTTSQ 00012.00045 GRP02 45 0 0 ( IDLE )
> psc -I 40
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
------------ ------------ --------- -------- -- ------- ------ ------
arttsqp_mib+ tsqp_mib_svc ARTTSQP GRP02 40 KIXR 0 AVAIL
TSPOOL_ADM tsqp_adm_svc ARTTSQP GRP02 40 KIXR 0 AVAIL
TSM00004_ADM tsqp_adm_svc ARTTSQP GRP02 40 KIXR 0 AVAIL
TSM00004_TS+ tsqp_svc ARTTSQP GRP02 40 KIXR 0 AVAIL
TSM00003_ADM tsqp_adm_svc ARTTSQP GRP02 40 KIXR 0 AVAIL
TSM00003_TS+ tsqp_svc ARTTSQP GRP02 40 KIXR 0 AVAIL
TSM00002_ADM tsqp_adm_svc ARTTSQP GRP02 40 KIXR 0 AVAIL
TSM00002_TS+ tsqp_svc ARTTSQP GRP02 40 KIXR 0 AVAIL
TSM00001_ADM tsqp_adm_svc ARTTSQP GRP02 40 KIXR 0 AVAIL
TSM00001_TS+ tsqp_svc ARTTSQP GRP02 40 KIXR 0 AVAIL
> quit
#

4.10 Distributed Program Link (DPL)の実装

いくつかの理由で、z/OS上では、Distributed Program Link機能を使用して、ローカルのCICSプログラム(クライアント・プログラム)が、リモートCICSリージョンにある別のCICSプログラム(サーバー・プログラム)を、EXEC CICS LINK文を介して呼び出せます。CICS Runtimeでは、移行リージョン間のMROのようなマルチCICSアーキテクチャで使用されるこの機能をサポートしています。

4.10.1 DPLが必要であることを検出する手順

UNIXで書かれたアプリケーションでDPLを使用したい場合を除き、z/OSアプリケーションのテクニカル特性をチェックします。

  1. CEDAシステム・トランザクションを使用して、z/OS上で、少なくとも1つのリモート・プログラムがz/OS CICS CSDファイルで定義されているかどうかをチェックします。そのようなプログラムでは、REMOTE ATRIBUTESセクションのフィールドの一部がファイルされています。

    リスト4-30 リモート・プログラムのチェック

    DEF PROGR
    OVERTYPE TO MODIFY CICS RELEASE = 0610
    CEDA DEFine PROGram( )
    PROGram ==>
    Group ==>
    DEscription ==>
    ....
    REMOTE ATTRIBUTES
    DYnamic ==> No No ! Yes
    REMOTESystem ==> XXXX
    REMOTEName ==> YYYYYYYY
    Transid ==> ZZZZ
    EXECUtionset ==> Dplsubset Fullapi ! Dplsubset

    ここでは、次のとおりです(CICSデフォルト値は下線で示されます):

    DYNAMIC(YES|NO)

    次のパラメータは、CICS LINK API内でオーバーライドされません。このフィールドがNOに設定され、次の3つのフィールドが空の場合、このフィールドはDPLの使用にのみ関連します。

    REMOTESYSTEM(name)

    リモートCICSリージョン名。空のフィールドは、DYNAMIC(YES)に関連しません

    REMOTENAME(name)

    リモート・サーバー・プログラム名。デフォルトがクライアント・プログラム名(PROGram ==>)であるため、空のフィールドはDYNAMIC(YES)に関連しません。

    TRANSID(name)

    リモート・ミラー・トランザクション。デフォルトがミラー・システム・トランザクションCSMIであるため、空のフィールドはDYNAMIC(YES)に関連しません。

    EXECUTIONSET(FULLAPI|DPLSUBSET)

    DPLは、完全なCICS APIでなく、サブセットのみを使用できます。DPLSUBSETパラメータは、CICS APIのDPLサブセットの明示的な使用を示しますが、このサブセットがエラーなしで非DPLのコンテキストでLINKを実行することができる場合もある点に注意してください。他方、このフィールドには、DPLコンテキストでFULLAPIが含まれる場合がありますが、非DPL APIが使用された場合、「無効なリクエスト・エラー」が発生しない保証はありません。

    ここまで説明してきたとおり、場合によっては、Remote Attributes宣言が存在しないか、不完全な場合があります。その理由は、これらのフィールドがデフォルト値の一部しか確立しないことであり、例の中で太字で示した、以前のパラメータの一部は、EXEC CICS LINK APIにはありません。

  2. そこで、プログラム内、EXEC CICS LINK APIの内部で、次の項目をチェックします。
    • この順序で呼び出されたプログラムの名前が、リモート属性が部分的または完全に通知された、CSDで定義されているプログラムの名前と一致するかどうか。
    • これらの文が、次のCICS LINK APIで斜体で示されているオプションのリモート・パラメータの少なくとも1つを含んでいるかどうか(他のフィールドはDPLに関連しません)。

リスト4-31 DPL用CICS LINK API

EXEC CICS LINK PROGRAM(…)
COMMAREA(…)
LENGTH(…)
DATALENGTH(…)
RETCODE(…)
SYSID(XXXX) : Remote CICS region name
SYNCONRETURN : Used for remote CICS syncpoint or rollback
TRANSID(XXXX) : Remote mirror transaction instead of the CSMI default
INPUTMSG(…)
INPUTMSGLEN(…)
END-EXEC

4.10.2 Tuxedo ubbconfigファイルの変更によるDPLの管理

プログラムの少なくとも1つがDPLを使用する場合は、他の設定を変更せずに、ARTDPLサーバーをインストールしてアクティブ化します。

このサーバーをアクティブにするには、ubbconfigファイルを変更して、Tuxedo ubbconfigファイルの*SERVERSセクションにこのサーバーを追加します。このサーバーは、トランザクション・サーバー(ARTSTRN、ARTSTR1、ARTATRN、ARTATR1)と同じサーバー・グループに属しています。

リスト4-32 ubbconfigファイルのARTDPLサーバーを記述している*SERVERSセクションの例。

*SERVERS
…
ARTDPL SRVGRP=GRP02
SRVID=500
CONV=N
MIN=1 MAX=1 RQADDR=QKIXDPL REPLYQ=Y
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_dpl -e /home2/work9/demo/Logs/TUX/sysout/stderr_dpl -r -- -s KIXD -l SIMPAPP"
…

説明:

*SERVERS

サーバー・セクションの定義を示すTuxedo ubbconfigキーワード。

SRVGRP

ARTDPLが属するTuxedoグループ名です。

SRVID

ARTDPLのTuxedoサーバーの識別子です。

CONV=N

このサーバーが非対話モードで動作していることを示します。

MIN=1およびMAX=1

このサーバーのインスタンスは1つのみ実行可能であることを示します。

REPLYQ=Y

このサーバーが応答することを示します。

RQADDR=QKIXDPL

レスポンスに使用されるTuxedoキューの名前。

CLOPT

パラメータを含むサーバーに渡される引用符付きテキスト文字列です。

-o

次のファイルがサーバーの標準出力メッセージのために使用されることを示します。

-e

次のファイルがサーバーのエラー出力メッセージのために使用されることを示します。

-r

統計レポートを提供するために使用されるTuxedoパラメータです。

-s KIXD

KIXDトランザクションが実行されるCICS Runtime名を示します。

-l SIMAPP

起動時にSIMPDPLグループのコンポーネントだけが選択されることを示します。

Tuxedo tmadmin psrおよびpscコマンドを使用して、このサーバーが実行され、新しいサービスが公開されていないことを確認します。

リスト4-33 ARTDPLサーバーをチェックするtmadminコマンド

# tmadmin
...
 
> psr
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
--------- ---------- -------- -- ------ --------- --------------
ARTDPL QKIXDPL GRP02 500 0 0 ( IDLE )
ARTATR1 00012.00300 GRP02 300 0 0 ( IDLE )
ARTSTR1 00012.00200 GRP02 200 0 0 ( IDLE )
BBL 200933 KIXR 0 5 250 ( IDLE )
TMS_QM GQUEUE_TMS GQUEUE 30001 0 0 ( IDLE )
TMS_ORA GRP02_TMS GRP02 30001 0 0 ( IDLE )
ARTTCPL 00001.00101 TCP00 101 0 0 ( IDLE )
TMS_QM GQUEUE_TMS GQUEUE 30002 0 0 ( IDLE )
TMS_ORA GRP02_TMS GRP02 30002 0 0 ( IDLE )
TMS_ORA GRP02_TMS GRP02 30003 0 0 ( IDLE )
TMQUEUE 01000.01010 GQUEUE 1010 0 0 ( IDLE )
ARTCNX QCNX015 GRP01 15 0 0 ( IDLE )
TMQFORWARD 01000.01020 GQUEUE 1020 0 0 ( IDLE )
ARTSTRN QKIX110 GRP02 20 0 0 ( IDLE )
ARTATRN QKIXATR GRP02 30 0 0 ( IDLE )
ARTTSQ 00012.00040 GRP02 40 0 0 ( IDLE )
 
> psc
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
------------ ------------ --------- -------- -- ------- ------ ------
TMS TMS TMS_QM GQUEUE 30001 KIXR 0 AVAIL
TMS TMS TMS_ORA GRP02 30001 KIXR 0 AVAIL
TMS TMS TMS_QM GQUEUE 30002 KIXR 0 AVAIL
TMS TMS TMS_ORA GRP02 30002 KIXR 0 AVAIL
TMS TMS TMS_ORA GRP02 30003 KIXR 0 AVAIL
ASYNC_QSPACE TMQUEUE TMQUEUE GQUEUE 1010 KIXR 0 AVAIL
authfail cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESF cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESN cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CSGM cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
disconnect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
connect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
SA03 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA02 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA01 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA00 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
ASYNC_QUEUE ASYNC_QUEUE ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA03 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA02 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA01 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA00 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
TSQUEUE tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
 
> quit
#

4.10.3 CICS Runtimeでのリモート・プログラムの宣言

EXEC CICS LINK文で呼び出される分散プログラムをアプリケーションが使用できるようにするには、これらのプログラムをCICS Runtimeに対して宣言する必要があります。

  1. CICS APIのDPLサブセットのみを使用できるREMOTEプログラムを宣言するには:
    • programs.descファイルで、REMOTESYSTEM (csv形式のデータセットの7番目のフィールド)をリモートのSYSID名(リスト4-32のサンプル内のKIXD)に設定します。

      デフォルトはlocal (empty field)で、これはFULL CICS APIを使用できるため、ローカル・プログラムが宣言されることを意味します

      このSimple Applicationの例では、RSSAT000RSSAT001がリモートで、RSSAT002RSSAT003がローカルだと想定すると、programs.desファイルは次のように設定されます。

      リスト4-34 Simple Application programs.descでのリモート・プログラムの構成
      #PROGRAM;GROUP;DESCRIPTION;LANGUAGE;EXECKEY;STATUS;REMOTESYSTEM;REMOTENAME
      RSSAT000;SIMPAPP;Home Menu Program of Simple Application;COBOL; ;ENABLE;KIXD
      RSSAT001;SIMPAPP;Customer Detailed Inf Program of Simple Application;COBOL; ;ENABLE;KIXD
      RSSAT002;SIMPAPP;Customer Maintenance Program of the Simple Application;COBOL; ;ENABLE
      RSSAT003;SIMPAPP;Customer List of the Simple Application;COBOL; ;ENABLE
  2. Tuxedoをシャットダウンして、再起動します。
  3. Tuxedo tmadmin psrおよびpscコマンドを使用して、DPLプログラムのための新しいサービスが、ARTDPL: KIXD_RSSAT0001およびKIXD_RSSAT0003によって公開および管理されていることを確認します。

    ノート:

    同名の問題を避けるために、これらの分散サービスの名前は、ubbconfigで定義されているTuxedo DOMAINIDと、その管理対象プログラムの名前から構成されます。

リスト4-35 tmadminコマンドによるDPLサービスのチェック

{deimos:work9}-/home2/work9/demo/Logs/TUX/sysout# tmadmin
...
 
> psr
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
--------- ---------- -------- -- ------ --------- ---------------
ARTDPL QKIXDPL GRP02 500 0 0 ( IDLE )
ARTATR1 00012.00300 GRP02 300 0 0 ( IDLE )
ARTSTR1 00012.00200 GRP02 200 0 0 ( IDLE )
BBL 200933 KIXR 0 5 250 ( IDLE )
TMS_QM GQUEUE_TMS GQUEUE 30001 0 0 ( IDLE )
TMS_ORA GRP02_TMS GRP02 30001 0 0 ( IDLE )
ARTTCPL 00001.00101 TCP00 101 0 0 ( IDLE )
TMS_QM GQUEUE_TMS GQUEUE 30002 0 0 ( IDLE )
TMS_ORA GRP02_TMS GRP02 30002 0 0 ( IDLE )
TMS_ORA GRP02_TMS GRP02 30003 0 0 ( IDLE )
TMQUEUE 01000.01010 GQUEUE 1010 0 0 ( IDLE )
ARTCNX QCNX015 GRP01 15 0 0 ( IDLE )
TMQFORWARD 01000.01020 GQUEUE 1020 0 0 ( IDLE )
ARTSTRN QKIX110 GRP02 20 0 0 ( IDLE )
ARTATRN QKIXATR GRP02 30 0 0 ( IDLE )
ARTTSQ 00012.00040 GRP02 40 0 0 ( IDLE )
 
> psc
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
------------ ------------ --------- -------- -- ------- ------ ------
KIXD_RSSAT0+ dplsvc ARTDPL GRP02 500 KIXR 0 AVAIL
KIXD_RSSAT0+ dplsvc ARTDPL GRP02 500 KIXR 0 AVAIL
TMS TMS TMS_QM GQUEUE 30001 KIXR 0 AVAIL
TMS TMS TMS_ORA GRP02 30001 KIXR 0 AVAIL
TMS TMS TMS_QM GQUEUE 30002 KIXR 0 AVAIL
TMS TMS TMS_ORA GRP02 30002 KIXR 0 AVAIL
TMS TMS TMS_ORA GRP02 30003 KIXR 0 AVAIL
ASYNC_QSPACE TMQUEUE TMQUEUE GQUEUE 1010 KIXR 0 AVAIL
authfail cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESF cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESN cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CSGM cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
disconnect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
connect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
SA03 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA01 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
SA00 kixsvc ARTSTRN GRP02 20 KIXR 0 AVAIL
ASYNC_QUEUE ASYNC_QUEUE ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA03 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA01 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
ASYNC_SA00 atrsvc ARTATRN GRP02 30 KIXR 0 AVAIL
TSM00004_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00003_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00002_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00001_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSM00000_TSQ tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
TSQUEUE tsqsvc ARTTSQ GRP02 40 KIXR 0 AVAIL
 
> quit
# .

リストされているサービスのスコープを、ARTDPL (SRVID=500)によって管理されるそれらだけに減らすには、Tuxedo pscコマンドに -i srvidパラメータを続けて使用し、表示を特定のサーバーIDに制限します。

この例では、すぐ上に表示されているように、ARTDPLサーバーのsrvidは500です。

リスト4-36 tmadminコマンドによる詳細モードでの特定のDPLサービスのチェック

# tmadmin
...
 
> verbose
Verbose now on.
 
> psc -i 500
Service Name: KIXD_RSSAT003
Service Type: USER
Routine Name: dplsvc
Prog Name: /home2/work9/KIXEDO/bin/ARTDPL
Queue Name: QKIXDPL
Process ID: 1327244, Machine ID: KIXR
Group ID: GRP02, Server ID: 500
Current Load: 50
Current Priority: 50
Current Trantime: 30
Current Blocktime: 0
Current BUFTYPECONV: 0
Requests Done: 0
Current status: AVAILABLE
 
Service Name: KIXD_RSSAT001
Service Type: USER
Routine Name: dplsvc
Prog Name: /home2/work9/KIXEDO/bin/ARTDPL
Queue Name: QKIXDPL
Process ID: 1327244, Machine ID: KIXR
Group ID: GRP02, Server ID: 500
Current Load: 50
Current Priority: 50
Current Trantime: 30
Current Blocktime: 0
Current BUFTYPECONV: 0
Requests Done: 0
Current status: AVAILABLE
 
> quit
#

4.11 CICS Common Work Area (CWA)の実装

z/OSでは、CWAは、プログラムがデータを相互に保存および交換するために使用できるCICSリージョンのために、このCICSリージョンが実行されているかぎりメモリー内に定義される共有記憶域です。

この領域は、CICS文EXEC CICS ADDRESS CWAが提供するポインタによってアドレッシングされます。アプリケーションにこのCICS文がある場合、CICS Runtime内にこの機能を実装する必要があります。

リスト4-37 COBOLのCWA使用例
LINKAGE SECTION.
01 COMMON-WORK-AREA.
03 APPL-1-ID PIC X(4).
03 APPL-1-PTR USAGE IS POINTER.
03 APPL-2-ID PIC X(4).
03 APPL-2-PTR USAGE IS POINTER.
PROCEDURE DIVISION.
. . .
END-EXEC.
* Set up addressability to the CWA
EXEC CICS ADDRESS
CWA(ADDRESS OF COMMON-WORK-AREA)
END-EXEC.

CICS ADDRESS CWAの後では、COMMON-WORK-AREAという名前のCOBOLグループのアドレスは、CICSによって割り当てられるCWAのアドレスに設定されますが、これは、COMMON-WORK-AREAがこのメモリー領域をマップおよび調整することを意味します。この共有メモリーの総量は、CICS起動時に固定および定義されます。

4.11.1 CICS RuntimeでCICS ADDRESS CWA機能をレプリケートする手順

  1. 実装されているメモリーのサイズは、z/OS CICS管理者に問い合わせてください。(参考までに、この値は、DFHSITのパラメータWRKAREAで定義されます。デフォルト値は512バイトで、サイズは0 - 3584バイトです)。別の方法は、CWAをアドレッシングしているプログラムに含まれるデータ・レコードの最大サイズを計算することです
  2. ~/.profile UNIXシステム・ファイルを変更して新しいCICS Runtime変数(KIX_CWA_SIZE)をエクスポートし、それをDFHSITWRKAREAにある値に設定します。この変数が宣言されない場合、デフォルト値は0で、認可される間隔は0 - 32760バイトになります。

    例:

    KIX_CWA_SIZE=512

  3. ~/.profile UNIXシステム・ファイルを変更して新しいCICS Runtime変数(KIX_CWA_IPCKEY)をエクスポートし、それをCWAとして使用されるクロス・メモリー・セグメントを定義するUnix IPCキーに指定します。

    例:

    KIX_CWA_ IPCKEY=200944

  4. これらの変更を有効にするには、Tuxedoを再起動します。

4.12 CICS Transaction Work Area (TWA)の実装

z/OSでは、TWAは、プログラムがデータを相互に保存および交換するために使用できるCICSリージョンのために、1つのCICSトランザクションの実行中にメモリー内に定義される共有記憶域です。つまり、このTWAには、トランザクションに参加しているプログラムのみがアクセスできます。この領域は、CICS文EXEC CICS ADDRESS TWAが提供するポインタを介してアドレッシングされます。アプリケーションにEXEC CICS ADDRESS TWA文がある場合、CICS Runtimeにこの機能を実装する必要があります。

リスト4-38 COBOLでのTWAの使用例
LINKAGE SECTION.
01 TRANSACTION-WORK-AREA.
03 APPL-1-ID PIC X(4).
03 APPL-1-PTR USAGE IS POINTER.
03 APPL-2-ID PIC X(4).
03 APPL-2-PTR USAGE IS POINTER.
PROCEDURE DIVISION.
. . .
END-EXEC.
* Set up addressability to the TWA
EXEC CICS ADDRESS
TWA(ADDRESS OF TRANSACTION-WORK-AREA)
END-EXEC.

CICS ADDRESS TWAの後では、TRANSACTION-WORK-AREAという名前のCOBOLグループのアドレスは、CICSによって割り当てられたTWAのアドレスに設定されますが、これは、TRANSACTION -WORK-AREAがこのメモリー領域をマップおよび調整することを意味します。この共有メモリーの総量は、z/OS CSD構成ファイルのフィールドTWasizeで、各トランザクションに対して定義されます。

次の画面には、SA00トランザクション・コードに対してTWasizeパラメータが122に設定される、z/OS CEDAシステム・トランザクションの結果が表示されます。

図4-3 z/OS cedaシステム・トランザクションの例


z/OS cedaシステム・トランザクションの例

CICS Runtimeでこの機能をレプリケートするには:

  1. TWAメモリーの必要量(TWasize>0)をレポートするには、CICS Runtime transactions.descファイルを変更します
  2. CICS ADDRESS TWA文を持つプログラムを使用する各トランザクションに対して、transactions.descファイルを変更して、そのTWasizeをこのcsv形式ファイルの16番目のフィールドで宣言します。

    表4-6 Simple Applicationの各トランザクション・コードに関連付けられているTWAサイズ値

    トランザクション TWAサイズ
    SA00 0
    SA01 100
    SA02 200
    SA03 300

    リスト4-39 transactions.descファイルのTWAの構成

    #Transaction;Group;Description;Program; ; ; ; ; ; ;Status; ; ; ;Tranclass ;TWA Size
    SA00;SIMPAPP;pg for simpapp;RSSAT000; ; ; ; ; ; ;ENABLED
    SA01;SIMPAPP;pg for simpapp;RSSAT001; ; ; ; ; ; ;ENABLED; ; ; ; ;100
    SA02;SIMPAPP;pg for simpapp;RSSAT002; ; ; ; ; ; ;ENABLED; ; ; ; ;200
    SA03;SIMPAPP;pg for simpapp;RSSAT003; ; ; ; ; ; ;ENABLED; ; ; ; ;300

    ノート:

    TWAサイズがゼロに等しいSA00トランザクションに対しては、何も示されません。
  3. CICS Runtime Tuxedoサーバーを再起動すると、トランザクション管理に関係するサーバー(ARTSTRN、ARTSTR1、ARTATRNとARTATR1)の異なるstderrファイルで変更を参照できます。

リスト4-40 stderr_strn TWAの例

|---------------------------------|
| TRANSACTIONS loaded : < 4> |
|----------------------------------------------|----|-|-|---|-|-|----------|-----|-|--------|-----|---|
| | | | |C|C| |R|R| | |T| | | |
|TRAN| GROUP | PROGRAM |ALIA|M|O|PRI|E|E| STATUS |TASK |R| TRAN | TWA |MAX|
| | | | |D|N| |S|S| |DATA |A| CLASS | SIZ |ACT|
| | | | |S|F| |S|T| |KEY |C| | |IVE|
|----|----------|------------------------------|----|-|-|---|-|-|----------|-----|-|--------|-----|---|
|SA00|SIMPAPP |RSSAT000 | |N|N|001|N|N|ENABLED |USER |Y| |00000|999|
|SA01|SIMPAPP |RSSAT001 | |N|N|001|N|N|ENABLED |USER |Y| |00100|999|
|SA02|SIMPAPP |RSSAT002 | |N|N|001|N|N|ENABLED |USER |Y| |00200|999|
|SA03|SIMPAPP |RSSAT003 | |N|N|001|N|N|ENABLED |USER |Y| |00300|999|

4.12.1 ARTDPLでのTWAのサポート

ARTDPLにより実行されたトランザクション内のプログラムは、次のステップでTWAにアクセスできるようになりました。

  1. ARTDPLトランザクションに必要なTWAサイズを構成するために、CICS Runtimeのtransactions.descファイルを変更します。
    リスト4-41 transactions.descファイルでのARTDPLのTWAの構成
    #Transaction;Group;Description;Program; ; ; ; ; ; ;Status; ; ; ;Tranclass ;TWA Size
    CPMI;SIMPAPP;pg for simpapp;DFHMIRS; ; ; ; ; ; ;ENABLED; ; ; ; ;100
    DFHMIRSは、インバウンド関数の送信を処理するCICS内の内部ミラー・プログラムです。CICS RTでは、このミラー・プログラムは、TWAが使用される場合に、トランザクション・リソース・ファイル内のリンク・プログラムの実行に使用するトランザクションの下で定義されている必要があります。リストでは、ARTDPLにより、CPMIという名前のトランザクションで、リモートのリンク・プログラムが実行され、そのTWAサイズは100に相当します。

    ノート:

    ユーザーは、アプリケーション・プログラムにDFHMIRSのような名前を付けることはできません
  2. CICS Runtime Tuxedoサーバーを再起動すると、ARTDPL stdoutファイルで変更が表示されます。
    リスト4-42 stdout_dpl TWAの例
    |---------------------------------|
    | TRANSACTIONS loaded : < 1> |
    |----------------------------------------------|----|-|-|---|-|-|----------|-----|-|--------|-----|---|
    | | | | |C|C| |R|R| | |T| | | |
    |TRAN| GROUP | PROGRAM |ALIA|M|O|PRI|E|E| STATUS |TASK |R| TRAN | TWA |MAX|
    | | | | |D|N| |S|S| |DATA |A| CLASS | SIZ |ACT|
    | | | | |S|F| |S|T| |KEY |C| | |IVE|
    |----|----------|------------------------------|----|-|-|---|-|-|----------|-----|-|--------|-----|---|
    |CPMI|SIMPAPP |DFHMIRS | |N|N|001|N|N|ENABLED |USER |Y| |00100|999|
    |-----------------------------------------------------------------------------------------------------|

4.13 WebSphere MQとの統合の実装

この章のトピックは、次のとおりです:

4.13.1 ARTCKTI — ART CICSトランザクション・トリガー・モニター(ARTCKTI)の使用

ART CICS Transaction Trigger Monitor (ARTCKTI)は、CICS CKTIトランザクションと同じ動作をします。1つまたは複数のWebSphere MQ開始キュー上でリスニングし、トリガー・イベントが発生するとトリガー・メッセージを取得し、トリガー・メッセージをターゲット・トランザクションに転送します。

4.13.1.1 ワーク・フロー

ARTCKTIは、スタンドアロンのOracle Tuxedoサーバーです。ARTCKTIサーバーは、次のように動作します。

  1. 1つまたは複数のWebSphere MQ開始キューをモニターします。

    1つのサーバー・インスタンスでは、同じWebSphere MQキュー・マネージャの範囲内のWebSphere MQ開始キューのみモニターできます。異なるWebSphere MQキュー・マネージャのキューは、別々のARTCKTIサーバー・インスタンスでモニターしてください。

  2. トリガー・メッセージが着信すると、ARTCKTIサーバーはメッセージを取得します。
  3. トリガー・メッセージからトランザクションIDを取得します。
  4. 構造MQTMCからMQTMC2にトリガー・メッセージを転送します

    MQTMCには多くのフィールドがあるため、構造をEXEC CICS START呼出しのパラメータとして送信すると、いつでも複雑になりすぎます。MQTMC2はCKTIで使用され、構造をデータとしてトリガー・モニターのSTARTリクエストに渡します。

  5. ターゲット・トランザクションを起動し、MQTMC2データを送信します。

    CICS CKTIトランザクションは、非同期呼出し(EXEC CICS START)を使用してターゲット・トランザクションを開始するため、ARTCKTIサーバーも、非同期呼び出し(Tuxedo tpacall)を使用してターゲット・トランザクションを開始します。

  6. ユーザー・トランザクションはCICS RETRIEVEによってトリガー・メッセージを取得し、WebSphere MQアプリケーション・キュー上で操作を実行します。

    ユーザー・トランザクションがメッセージを取得しないか、起動されたトランザクションが使用できない場合、WebSphere MQは、この条件ではトリガー・メッセージをもう送信しません。WebSphere MQ開始キューが再び開かれるか、新しいトリガー条件が満たされるまで、新しいトリガー・メッセージが発行されます。

次の図に、動作を示します。

図4-4 WebSphere MQトリガー条件


WebSphere MQトリガー条件

ノート:

デフォルトでは、ARTCKTIはクライアント・モードと特定のWebsphere MQバージョンで構築されます。ARTCKTIがサーバー・モードでWebsphere MQにアクセスする場合、またはWebsphere MQランタイムのバージョンが、デフォルトのARTCKTIを構築したときのバージョンより低い場合には、ARTCKTIサーバーを再構築する必要があります。詳細は、「ARTCKTIサーバーの再構築」を参照してください。
4.13.1.2 コマンドの構成

ARTCKTIは、ubbconfigファイル用に次のパラメータを受け入れます。

  • -i trigger_interval: メッセージがWebSphere MQ開始キューに着信するのをARTCKTIサーバーが待機する時間の最大値を指定します(単位はミリ秒)。
  • -s retry_interval: ARTCKTIがWebSphere MQキュー・マネージャに再接続するか、失敗時にWebSphere MQ開始キューを再オープンする場合の再試行間隔を指定します。
  • -m queue_manager_name : モニター対象のWebSphere MQキュー・マネージャの名前を指定します。
  • -q queue1,queue2,……: モニター対象のWebSphere MQ開始キューの名前を指定します。
4.13.1.3 WebSphere MQでART for CICSトランザクションをトリガーする構成

WebSphere MQは、1つ以上のメッセージがキューに配置されるときCICSトランザクションをトリガーできます。ART for CICSには、トリガー・モニターとしてARTCKTIサーバーが用意されています(CICS CKTIトランザクションと同等)。

MQ ManagerでART for CICSトランザクションをトリガーできるようにするには、MQ Manager構成でトリガーのキューおよびプロセスを適切に定義する必要があります。

リスト4-43 ART for CICSトランザクションをトリガーするサンプル構成

runmqsc MYMQM << EOF
 
DEFINE QLOCAL(INIT1) REPLACE LIKE(SYSTEM.DEFAULT.LOCAL.QUEUE) DESCR('INITIATION QUEUE')
DEFINE QLOCAL(APP1) REPLACE LIKE(SYSTEM.DEFAULT.LOCAL.QUEUE) DESCR('APPLICATION QUEUE') INITQ('INIT1') PROCESS('APP1.P') TRIGGER TRIGTYPE(FIRST)
DEFINE PROCESS(APP1.P) DESCR('PROCESS DEFINITION') APPLTYPE(UNIX) APPLICID('SA01')
 
DEFINE QLOCAL(APP2)
 
DEFINE CHANNEL(APP.C) CHLTYPE(SVRCONN)
DEFINE LISTENER(APP.L) TRPTYPE( TCP )
 
ALTER QMGR TRIGINT(0)
DEFINE QMODEL('SYSTEM.SAMPLE.REPLY') REPLACE DESCR('GENERAL REPLY QUEUE')
EOF

上の例では、INIT1がプロセスAPP1.Pに関連付けられたトリガー・キューとして定義されており、キューに配置されたFIRSTメッセージがトリガーに使用されることを指定しています。それに続くプロセス定義では、APPLTYPEをUNIXと定義し、ART for CICSトランザクションIDをトリガーするようにAPPLICIDとして指定しています。

この定義に基づいて、最初のメッセージがINIT1キューに配置されるとき、ARTCKTIトリガー・モニターがARTATRNサーバーでSTART TRANID('SA01')します。アプリケーション・トランザクションが実行されると通常、キューが進み、使用可能なメッセージがすべて処理されます。次に新しいメッセージがINIT1に配置されると、再びトリガーされます。

4.13.2 ART for CICSサーバーの再構築

CICSトランザクション・サーバーを再構築する前に、この項で説明するように、WebSphere MQ RM定義を準備する必要があります。ART for CICSトランザクション・サーバーが別のモードを使用してWebSphere MQにアクセスする場合は、この項で後述するタスクを実行し、サーバーを再構築した後でOracle Tuxedoをアップグレードする必要があります。

4.13.2.1 WebSphere MQ RM定義の作成

ローカルのWebSphere MQサーバーを使用する場合は、$TUXDIR/udataobj/RMファイルで次のように追加して、WebSphere MQ RM定義を作成します。

# For building TMS_MQM server to work with local MQ server
MQSeries_XA_RMI:MQRMIXASwitchDynamic: /opt/mqm/lib64/libmqmxa64.so /opt/mqm/lib64/libmqm.so
# For building ARTSTR*/ARTATR*/ARTDPL server
MQSeries_XA_RMI_COB:MQRMIXASwitch: -L${MQMDIR}/lib64 -lmqmxa64 -lmqmcb

ローカルのWebSphere MQクライアントを使用して、WebSphere MQサーバーにリモート接続する場合は、次のバージョンを使用します(RMファイルで重複するエントリを使用しない)。

# For building TMS_MQM server to work with local MQ client
MQSeries_XA_RMI:MQRMIXASwitchDynamic: /opt/mqm/lib64/libmqcxa64.so /opt/mqm/lib64/libmqic.so
# For building ARTSTR*/ARTATR*/ARTDPL server
MQSeries_XA_RMI_COB:MQRMIXASwitch: -L${MQMDIR}/lib64 -lmqcxa64 -lmqicb

ノート:

${MQMDIR}は、MQMのインストール・パスを示す環境変数です。
4.13.2.2 TMS_MQMサーバーの再構築

TMS_MQMサーバーを構築し、setenvで設定されているPATHに含まれるディレクトリに、正しい実行権限で配置します(たとえば、$TUXDIR/bin$KIXDIR/bin)。

buildtms -r MQSeries_XA_RMI -o TMS_MQM
4.13.2.3 ART for CICSトランザクション・サーバーの再構築

トランザクション・サーバーを構築し(ARTSTR*/ARTATR*/ARTDPL)、それを$KIXDIR/binディレクトリ、または$APPDIR以下のローカル・ディレクトリに配置します(ただし、ローカルの場合は正しい実行権限でsetenv$PATH定義に追加します)。例を参照してください。

ARTATRN

buildartcics -M -r Oracle_XA -r MQSeries_XA_RMI_COB -o ARTATRN_ORA_MQM

ノート:

  • -Mは「複数のRMを伴う」の意味です。
  • -rフラグには、リンクするRMを指定します。たとえば、-r Oracle_XAはOracle DBのRM定義を示し、-r MQSeries_XA_RMI_COBはCOBOLプログラムのMQ RMを示します。
4.13.2.4 ARTCKTIサーバーの再構築

MQで開始するトランザクション・サポートが必要な場合には、ARTCKTIサーバーを構築します。

一般的に、WebSphere MQのバージョンを変更した場合、またはMQサーバー・モードで使用する必要がある場合を除いて、デフォルトのARTCKTIの再構築は必要ありません。(デフォルトのバージョンは、WebSphere MQクライアント用です。)

ARTCKTIサーバーをビルドするには、$KIXDIR/binディレクトリへの書込み権限を持つOracle Tuxedo管理者として、次のコマンドを実行します。

buildserver -o $KIXDIR/bin/ARTCKTI -t -f "$KIXDIR/objs/ARTCKTI.o $KIXDIR/objs/list.o" -l "-L$MQMDIR/lib64 -lmqic_r"

上に示したのは、WebSphere MQクライアント用の構築です。ローカルにインストールしたWebSphere MQサーバーで使用する場合は、次に示すライブラリを使用します。

buildserver -o $KIXDIR/bin/ARTCKTI -t -f "$KIXDIR/objs/ARTCKTI.o $KIXDIR/objs/list.o" -l "-L$MQMDIR/lib64 -lmqm_r"

ノート:

$MQMDIRは、WebSphere MQがインストールされているパスです。

詳細は、「ARTCKTIの構成」を参照してください。

4.13.2.5 Oracle Tuxedo UBBCONFIGおよびOPENINFOの更新

ARTCKTIサーバーをTMSグループで構成する必要はありません。

ARTSTR*/ARTATR*/ARTDPLはTMSグループで構成する必要があり、TMSグループはMQMグループとして構成する必要があります。

リスト4-44 Oracle Tuxedo UBBCONFIGおよびOPENINFOの更新の例

*GROUPS
# For ARTCKTI
GRP01
GRPNO=10
ENVFILE="/xxx/envfile"
 
 
#For ARTSTR/ATR/DPL
GRP02
GRPNO=12
ENVFILE="/xxx/envfile "
TMSNAME=TMS_ORA
TMSCOUNT=2
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/SYSADM1/SYSADM1+SqlNet=ANA99C1O+SesTm=600+LogDir=/home/oracle/DRIVERMQ/deploy/CICS_RT/LOGS/xa+DbgFl=0x20"
MRM=Y
 
*RMS
RM_MQM
SRVGRP=GRP02
RMID=2
TMSNAME="TMS_MQM"
TMSCOUNT=2
# For local MQ connection: The OPENINFO only needs to configure RM name and MQ manager name as following:
OPENINFO="MQSeries_XA_RMI_COB: MYMQM"
# For remote MQ connection: The OPENINFO needs to configure as following:
OPENINFO="MQSeries_XA_RMI_COB:qmname=MYMQM,channel=APP.C,trptype=TCP,AXLIB=/home/bofzhu/zhubf/tuxedo/tux1213L31/lib/libtux.so,conname=10.182.73.205(8000),tpm=Tuxedo"
AUTO=Y
 
*SERVERS
ARTCKTI
SRVGRP=GRP00
SRVID=1010
GRACE=0 RESTART=Y CONV=N MAXGEN=10
# -m means MQ manager name, -q means MQ queue name
# Refer to ARTCKTI Configuration in Oracle Tuxedo Application Runtime for CICS Reference Guide
CLOPT="-A -- -m MYMQM -q INIT1"
 
#Add all required ART*_MQM servers (here ARTSTRN, ARTATRN, and ARTDPL are shown)
ARTATRN_ORA_MQM
SRVGRP=GRP02
SRVID=60
MIN=3 MAX=3
CLOPT="-o xxx -e xxx -r -- -s xxx -l xxx"
 
ARTSTRN_ORA_MQM
SRVGRP=GRP02
SRVID=65
MIN=2 MAX=2
CLOPT="-o xxx -e xxx -r -- -s xxx -l xxx"
 
ARTDPL_ORA_MQM
SRVGRP=GRP02
SRVID=70
MIN=2 MAX=2
CLOPT="-o xxx -e xxx -r -- -s xxx -l xxx"

4.13.3 MQOPEN/MQCLOSE呼出しのCICS Runtime Preprocessorの処理

WebSphere MQに正しく接続するためのシーケンスは、MQCONNMQOPENMQxxx (GET/PUT)、MQCLOSEおよびMQDISCです。メインフレームCICSでは、MQCONNおよびMQDISCは多くの場合、リソース管理機能としてCICSによって処理され、アプリケーションはMQOPEN/MQxxx/MQCLOSEを実行するだけです。

ART for CICSでこれをサポートするには、ART for CICSのプリプロセッサを使用してMQOPEN/MQCLOSE 呼出しをKIX_MQxxxxラッパーに変換し、それが内部でMQCONNおよびMQDISCを処理します。このアプローチで、ART for CICSの接続問題を処理し、必要に応じて再接続することもできます。プリプロセッサの出力をチェックし、KIX_MQxxxの呼出しがあることを確認します。

MQラッパーの場合、MQラッパーがCICSトランザクションをリサイクルするか、またはCICSトランザクション自体がそれをしない場合にMQ接続を解放します。prepro-cics.plは、スイッチMQ_wrapperを導入してMQラッパーを有効にします。各アプリケーション・サーバー(ARTSTR*/ARTATR*/ARTDPLなど)に対して、ターゲットのMQ Managerを指定するために、CLOPT -m queue_manager_nameが導入されています。MQラッパーはMQOPENより前にMQCONNECTを実行しますが、MQCONNECTはどのMQ Managerに接続すべきかを認識する必要がないからです。詳細は、「MQ_wrapper」「WebSphere MQキュー・マネージャ名」を参照してください。

4.13.4 文字セットのエンコード

ローカルのWebSphere MQを使用して、z/OSベースのMQ Managerにリモート接続する場合、EBCDICからASCIIへの変換は自動的に有効になりません。これは、次の例のようにMQGETオプションでMQGMO-CONVERTフラグを設定すると有効にできます。

リスト4‑45 MQGMO-CONVERTの例

COMPUTE MQGMO-OPTIONS = MQGMO-WAIT
+ MQGMO-SYNCPOINT
+ MQGMO-FAIL-IF-QUIESCING
+ MQGMO-CONVERT
END-COMPUTE.

MQPUTの場合、MQMD-FORMATMQFMT-STRINGに設定されていれば、ASCIIからEBCDICへの変換は自動的に行われます。例:

MOVE MQFMT-STRING TO MQMD-FORMAT

SENDERとしてチャネルを定義してローカルのWebSphere MQサーバーを使用する場合、チャネル定義でCONVERT (YES)を追加すれば、プログラムを変更せずにトランスコードを実行できます。

4.13.5 COMP-5をBINARYデータ型に再変更

Oracle Tuxedo ART Workbenchは、部分的にはメインフレームの数値データ型(BINARY/COMP)を、互換性のあるデータ型COMP-5(ネイティブ等価)に変更することよって、COBOLプログラムをターゲット環境に適応させます。これは、COBOLアプリケーションで透過的に行われます。

ただしLinux環境のWebsphere MQでは、MQ呼出しで渡されるパラメータにBINARY型を使用する必要があるため、これが原因で問題が発生する可能性があります。同じようなデータ型マッピングは、Pro*COBOLプリプロセッサによって実行されます。

したがって、コンパイルの最終段階でWebSphere MQインタフェース定義をCOMP-5からBINARYに戻してください。変更後のMQインタフェース定義の例(BINARYデータ型)を参照してください。

リスト4-46 変更後のMQインタフェース定義(BINARYデータ型)の例

01 QM-NAME PIC X(48) VALUE SPACES.
01 HCONN PIC S9(9) BINARY.
01 Q-HANDLE PIC S9(9) BINARY.
01 OPTIONS PIC S9(9) BINARY.
01 COMPLETION-CODE PIC S9(9) BINARY.
01 OPEN-CODE PIC S9(9) BINARY.
01 REASON-CODE PIC S9(9) BINARY.
01 CONN-REASON PIC S9(9) BINARY.
01 USER-DATA-LENGTH PIC S9(9) BINARY.
01 DATA-LENGTH PIC S9(9) BINARY.
01 TOTAL-NUM PIC S9(9) BINARY.

4.14 複数セッション管理を使用した実装

ART for CICSには、複数セッション管理機能があります。1つの3270ターミナルを介してART for CICSに接続する場合、前のトランザクションを終了せずにこのターミナルから様々なトランザクションを選択して実行し、アクティブなトランザクション間で切り替えることができます。

ノート:

  • 複数セッション管理機能では、対話型ユーザー・トランザクションはサポートされません。
  • デフォルト・ユーザーは、複数セッション管理機能が有効な場合、CESN/CSGMトランザクションのみを実行できます。
  • この機能が有効な場合、ユーザー・アプリケーションで[PA1]/[PA2]を使用できません。

4.14.1 アプリケーション・リスト用ユーザー・プラグインの作成

ART for CICSは、複数セッション管理の実行時にユーザーがアプリケーション・リストを取得および表示するためのDFHALSTというプログラム名のシステム・トランザクションを提供します。このトランザクションは、リストを取得するためにユーザー・プラグインを呼び出します。

このプラグインを提供し、DFHALISTが呼び出すことができるように正しいライブラリ・パスにライブラリを置く必要があります。このプラグインの詳細は、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』のCICS Runtimeのアプリケーション・リスト・トランザクションとの統合に関する項を参照してください。

4.14.2 CICS Runtime構成ファイルの構成

次の各項では、CICS Runtime構成ファイルを構成する方法について説明します。

4.14.2.1 トランザクション構成ファイル

アプリケーション・リスト・トランザクション(ALST)をtransactions.descで定義し、プログラムをDFHALSTに設定する必要があります。ARTSTRNサーバーはこのトランザクションをロードします。

ALST;SIMPAPP;Application list transaction;DFHALST

詳細は、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』のALST (アプリケーション・リスト・トランザクション)に関する項を参照してください

4.14.2.2 システム構成ファイル

ユーザーが接続したときにART for CICSによってCESNトランザクションが自動的に開始されるようにするには、system.descGMTRAN=CESNを構成する必要があります。

[kixr]

APPLID=DBDCkixR

GMTRAN=CESN

4.14.3 UBBCONFIGの構成

複数セッション管理を実行するには、セキュリティを有効にする必要があります。詳細は、「CICS Runtimeのセキュリティ構成」を参照してください。

次のサーバーをUBBCONFIGに構成する必要があります。例については、次のリストを参照してください。

  • ARTTCPL-tオプションを指定します。詳細は、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』のARTTCPL/ARTTCPHの構成に関する項を参照してください。
  • ARTCNXSYSIDを指定します。
  • ARTSRM (同じユーザーが異なるターミナルを介してART for CICSに接続することを防ぎます)。
  • ARTSTRN (アプリケーション・リスト・トランザクションおよびユーザー・トランザクションを実行します)。

リスト4-47 UBBCONFIGの構成例

* SERVERS
ARTTCPL
SRVGRP=TCP00
SRVID=101
CLOPT=" -- -M 4 -m 1 -L //hostname:34582 -n //hostname:34583 -t ALST"
 
ARTCNX
SRVGRP=GRP01
SRVID=15
CONV=Y
MIN=1 MAX=1 RQADDR=QCNX015 REPLYQ=Y
CLOPT="-o /home2/work9/demo/LOGS/sysout/stdout_cnx -e /home2/work9/demo /LOGS/sysout/stderr_cnx -r -- -s KIXR "
 
ARTSRM
SRVGRP=GRP02
SRVID=18
MIN=1 MAX=1
CLOPT="-o /home2/work9/demo/LOGS/sysout/stdout_srm -e /home2/work9/demoLOGS/sysout/stderr_srm -r -- -s KIXR -l SIMPAPP"
 
ARTSTRN
SRVGRP=GRP02
SRVID=20
CONV=Y
MIN=2 MAX=10 RQADDR=QKIX110 REPLYQ=Y
CLOPT="-o /home2/work9/demo/LOGS/sysout/stdout_strn -e /home2/work9/demo/LOGS/sysout/stderr_strn -r -- -s KIXR -l SIMPAPP"

4.14.4 セッションの開始、切替えおよび終了

アプリケーションを起動し、3270ターミナルを介してART for CICSに接続します。サインオンが完了すると、ART for CICSによりアプリケーション・リスト・トランザクション(ALST)が自動的に実行され、アプリケーション・リストが表示されます。

図4-5 ART for CICSアプリケーション・リスト・トランザクション(ALST)


ART for CICSアプリケーション・リスト・トランザクション(ALST)

4.14.4.1 セッションの開始

トランザクション(セッションとも呼ばれる)を開始するには、次のいずれかを実行します。

  • アクティブ化するセッションの左側のフィールドにカーソルを移動し、[Enter]を押します。DFHALSTによりセッションがアクティブ化され、表示がアプリケーション画面に切り替わります。
  • コマンド・フィールドに/sessidと入力し、[Enter]を押します。
4.14.4.2 セッションの切替え

ユーザー・トランザクション画面からアプリケーション・リスト・トランザクションに戻るには、[PA1]を押します。

次のアクティブなトランザクションに切り替えるには、[PA2]を押します。

4.14.4.3 セッションの終了

トランザクションを終了するには、ユーザー・トランザクションでTRANSIDパラメータを指定しないでCICS RETURNを発行すると、ART for CICSはトランザクションのセッションを終了します。

アプリケーション・リスト・トランザクションは終了できません。かわりに、ART for CICSから切断して終了する必要があります。

4.15 ART for CICS TCP/IPソケット・インタフェースの使用の実装

z/OSで、CICS TCP/IPソケット・インタフェースによってリモート・ユーザーはTCP/IPインターネット経由でCICSクライアント/サーバー・アプリケーションにアクセスできます。CICS TCP/IPには、TCP/IPネットワークで広く使用され、UNIXシステムおよび他のオペレーティング・システムに基づいたBerkeley Software Distribution 4.3ソケット・インタフェースの変種が用意されています。ソケット・インタフェースは、CICSアプリケーション・プログラムで接続の設定、データの送受信および一般的な通信制御の実行に使用できる一連の呼出しで構成されます。

ART for CICSでCICS TCP/IPソケット・インタフェースがサポートされるようになり、接続の両端をプログラミング可能な新規ピアツーピア・アプリケーションの開発時に使用できるようになりました。

CICSランタイム・サーバーARTCSKLは、ART for CICS TCP/IPソケット・リスナーです。クライアント・リクエストを受信すると、作業タスクにリクエストを渡して処理を依頼し、別のクライアント・リクエストを待機します。CICSランタイム・トランザクション・サーバーARTATRN/ARTATR1は、ユーザー作成トランザクションを開始および実行します。

ART for CICS TCP/IPソケット・インタフェースを使用して、これらのトランザクションを記述できます。ユーザー作成トランザクションでは、EXEC CICS RETRIEVEコマンドを使用してARTATRN/ARTATR1でソケットを使用できるようにし(出力パラメータを使用してtakesocket()を呼び出す必要があります)、write/read()を使用してデータを転送し、ソケットを閉じます。

  • ART for CICS TCP/IPソケットAPI
  • クライアント-リスナー-サーバー・アプリケーション・セット
  • ART for CICS TCP/IPリスナー(ARTCSKL)
  • 必要な構成

ノート:

  • ART for CICS TCP/IPでは接続指向(TCP)のサービスのみ提供され、IP (RAWソケット)プロトコルおよびコネクションレス(UDP)サービスはサポートされません。IPv4とIPv6の両方がサポートされます。
  • ARTATRN/ARTATR1で実行されるクライアント・アプリケーションおよびユーザー・トランザクションは、CでもCOBOL言語でも記述できます。すべてのサポートされるプラットフォーム上でCソケットAPIによって返されるerrnoおよびAIX/Solarisプラットフォーム上でCOBOLソケットAPIによって返されるerrnoは、メインフレームとは異なります。プログラムでerrno.hのマクロ定義を使用します。
  • ARTATRN/ARTATR1で実行されるクライアント・アプリケーションおよびユーザー・トランザクションは、CでもCOBOL言語でも記述できます。すべてのサポートされるプラットフォーム上でCソケットAPIによって返されるerrnoおよびAIX/Solarisプラットフォーム上でCOBOLソケットAPIによって返されるerrnoは、メインフレームとは異なります。プログラムでerrno.hのマクロ定義を使用します。
  • EXEC CICS STARTを使用した遅延間隔なしでのユーザー・トランザクションの開始のみサポートされます。
  • それらの(両端の)ピアツーピア・アプリケーションにはASCIIルーチンのみサポートされます。
  • サポートされるソケット・リスナーはARTCSKLのみで、ユーザー作成リスナーはサポートされません。
  • セキュリティ関数はサポートされません。
  • プラットフォームのエンディアンネスに依存するユーザー作成プログラムをLinuxプラットフォームに移行する場合、順序を考慮してコードを変更する必要があります(メインフレームではビッグ・エンディアンです)。他のプラットフォームに移行する場合はこの問題について考える必要はありません。

4.15.1 ART for CICS TCP/IPソケットAPI

CICS TCP/IPソケットAPIは、アプリケーション・プログラム間での次の重要な通信機能の実行を可能にするソケット呼出しの集まりです。

  • ネットワーク上の他のユーザーへの接続を設定および確立します
  • 他のユーザーとの間でデータを送受信します
  • 接続を閉じます

これらの基本的な機能に加えて、これらのAPIでは次のことも可能です。:

  • ネットワーク・システムに問い合せ、関連リソースの名前およびステータスを取得します
  • 必要に応じてシステム関数および制御関数を実行します

ART for CICSでは前述の関数もサポートされ、C APIおよび拡張COBOL APIのセットが提供されます。次の表に、サポートされるC APIをリストします。最後の3つの関数はART for CICSによって提供され、その他の関数ではOSソケット・ライブラリを直接使用できます。

表4-7 サポートされるC API

呼出し 書式 説明
accept()

int accept(int s, struct sockaddr_in *name,int *namelen)

サーバーはaccept()呼出しを発行し、クライアントからの接続リクエストを受け入れます。呼出しではsocket()の呼出しですでに作成され、listen()の呼出しによってマークされたソケットを使用します。
bind()

int bind(int s, struct sockaddr_in *name, int namelen)

bind()の呼出しでは、一意のローカル・ポートを既存のソケットにバインドします。socket()呼出しの正常完了時、新規ソケット記述子に関連付けられているポートはないことに注意してください。
close()

int close(int s)

close()の呼出しでソケットを停止し、ソケットに割り当てられているすべてのリソースを解放します。ソケットが開いているTCP接続を参照している場合、接続は閉じられます。入力データのキュー登録時にストリーム・ソケットが閉じられている場合、TCP接続は完全に閉じられるのではなく、リセットされます。
connect() int connect(int s, struct sockaddr_in *name, int namelen) connect()の呼出しでは、ローカル・ソケットとリモート・ソケットとの間の接続の確立を試みます。ストリーム・ソケットの場合、呼出しで2つのタスクが実行されます。
fcntl() signed int fcntl(int s, int cmd, int arg) fcntl()の呼出しでは、ソケットがブロッキング・モードか非ブロッキング・モードかを制御します。
gethostid() unsigned long gethostid() gethostid()では、ネットワーク・バイト・オーダーで現在のホストの一意の32ビット識別子を取得します。この値は、デフォルトのホームIPアドレスです。
gethostname() int gethostname(char *name, int namelen) gethostname()では、プログラムが実行されているホスト・プロセッサの名前が返されます。
getpeername() int getpeername(int s, struct sockaddr *name, int *namelen) getpeername()では、指定されたソケットに接続されたピアの名前を返します。
getsockname() int getsockname(int s, struct sockaddr_in *name, int *namelen) getsockname()の呼出しでは、nameパラメータによって示されたsockaddr構造体内のソケットの現在の名前を返します。
getsockopt() int getsockopt(int s, int level, int optname, char *optval, int *optlen) getsockopt()では、ソケットに関連付けられているオプションを取得します。
ioctl() int ioctl(int s, unsigned long cmd, char *arg) ioctl()の呼出しでは、ソケットの動作特性を制御します。
listen() int listen(int s, int backlog) listen()の呼出しでは、クライアント接続リクエストを受け入れる準備ができていることを示します。
read() int read(int s, char *buf, int len) read()の呼出しでは、指定された接続済ソケットでデータを読み取ります。
recv() - recv()の呼出しでは、指定されたソケットでデータを受信します。
recvfrom() int recvfrom(int s, char *buf, int len, int flags, struct sockaddr_in *name, int *namelen) recvfrom()の呼出しでは、指定されたソケットでデータを受信します。recvfrom()の呼出しは、接続済か未接続かに関係なく任意のデータグラム・ソケットに適用されます。
select() int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) select()の呼出しは、複数の処理が発生する可能性のあるプロセスで有用で、プログラムが1つまたは複数の処理の完了を待機できる必要があります。
send() int send(int s, char *msg, int len, int flags) send()では、接続済のソケットでデータを送信します。
sendto() int sendto(int s, char *msg, int len, int flags, struct sockaddr_in *to, int tolen) sendto()では、呼出しで指定されたアドレスにデータを送信します。
setsockopt() int setsockopt(int s, int level, int optname, char *optval, int *optlen) setsockopt()では、オプションを設定します。
shutdown() int shutdown(int s, int how) shutdown()の呼出しでは、全二重接続のすべてまたは一部を停止します。
socket() int socket(int domain, int type, int protocol) socket()の呼出しでは、通信のエンドポイントを作成し、エンドポイントを表すソケット記述子を返します。
write() int write(int s, char *buf, int len) write()では、接続済のソケットでデータを書き込みます。
getclientid() int getclientid(int domain, struct clientid) getclientid()の呼出しでは、TCP/IPアドレス空間に既知の呼出し元アプリケーションの識別子を返します。
initapi() int initapi(int max_sock, char *subtaskid) initapi()呼出しでは、アプリケーションをTCP/IPインタフェースに接続します。
takesocket() int takesocket(struct clientid *client_id, int hisdesc) takesocket()では、別のプログラムからソケットを取得します。

ノート:

takesocket()の呼出しはARTATRN/ARTATR1でのみ使用できます。givesocket()の呼出しはサポートされません。

サポートされる拡張COBOL APIを次に示します。

表4-8 サポートされる拡張COBOL API

呼出し 書式 説明
ACCEPT CALL 'EZASOKET' USING SOC-FUNCTION S NAME ERRNO RETCODE. サーバーはACCEPT呼出しを発行し、クライアントからの接続リクエストを受け入れます。
BIND CALL 'EZASOKET' USING SOC-FUNCTION S NAME ERRNO RETCODE. 一般的なサーバー・プログラムでは、SOCKETの呼出しの後にBINDの呼出しが続き、新規ソケットの作成のプロセスが完了します。
CLOSE CALL 'EZASOKET' USING SOC-FUNCTION S ERRNO RETCODE. CLOSEの呼出しではソケットを停止し、ソケットに割り当てられているすべてのリソースを解放します。
CONNECT CALL 'EZASOKET' USING SOC-FUNCTION S NAME ERRNO RETCODE. CONNECTの呼出しは、ローカル・ソケットとリモート・ソケットとの間に接続を確立するためにクライアントによって発行されます。
FCNTL CALL 'EZASOKET' USING SOC-FUNCTION S COMMAND REQARG ERRNO RETCODE. ソケットのブロッキング・モードを問い合わせることも、FCNTLの呼出しで記述されるFNDELAYフラグを使用して非ブロッキングに設定することもできます。
LISTEN CALL 'EZASOKET' USING SOC-FUNCTION S BACKLOG ERRNO RETCODE. LISTENの呼出しでは、次の処理を行います。
  • ソケットに対してBINDがまだ呼び出されていない場合はバインドを完了します。
  • 着信接続リクエスト用に指定された長さの接続リクエスト・キューを作成します。
READ CALL 'EZASOKET' USING SOC-FUNCTION S NBYTE BUF ERRNO RETCODE. READの呼出しでは、ソケットでデータを読み取ります。
RECV CALL 'EZASOKET' USING SOC-FUNCTION S FLAGS NBYTE BUF ERRNO RETCODE. RECVの呼出しでは、READ同様、記述子Sのソケットでデータを受信します。
RECVFROM CALL 'EZASOKET' USING SOC-FUNCTION S FLAGS NBYTE BUF NAME ERRNO RETCODE. RECVFROMの呼出しでは、記述子Sのソケットでデータを受信し、バッファに格納します。
SELECT CALL 'EZASOKET' USING SOC-FUNCTION MAXSOC TIMEOUT RSNDMSK WSNDMSK ESNDMSK RRETMSK WRETMSK ERETMSK ERRNO RETCODE. 複数のI/O処理が発生する可能性のあるプロセスでは、プログラムが1つまたは複数の処理の完了を待機できる必要があります。
SEND CALL 'EZASOKET' USING SOC-FUNCTION S FLAGS NBYTE BUF ERRNO RETCODE. SENDの呼出しでは、指定された接続済ソケットでデータを送信します。
SENDTO CALL 'EZASOKET' USING SOC-FUNCTION S FLAGS NBYTE BUF NAME ERRNO RETCODE. SENDTOは、宛先アドレス・パラメータが含まれている点以外SENDと同様です。
SHUTDOWN CALL 'EZASOKET' USING SOC-FUNCTION S HOW ERRNO RETCODE. SHUTDOWNの呼出しを使用して、一方向トラフィックを閉じると同時に反対方向のデータ転送を完了します。
SOCKET CALL 'EZASOKET' USING SOC-FUNCTION AF SOCTYPE PROTO ERRNO RETCODE. SOCKETの呼出しでは、通信のエンドポイントを作成し、エンドポイントを表すソケット記述子を返します。
WRITE CALL 'EZASOKET' USING SOC-FUNCTION S NBYTE BUF ERRNO RETCODE. WRITEの呼出しでは、接続済のソケットでデータを書き込みます。
GETCLIENTID CALL 'EZASOKET' USING SOC-FUNCTION CLIENT ERRNO RETCODE. GETCLIENTIDの呼出しでは、呼出し元プログラムでTCP/IPアドレス空間に既知の呼出し元アプリケーションの識別子を返します。
IINITAPI - INITAPIの呼出しでは、アプリケーションをTCP/IPインタフェースに接続します。
TAKESOCKET

WORKING-STORAGE SECTION.

01 SOC-FUNCTION PIC X(16) VALUE IS 'TAKESOCKET'.

01 SOCRECV PIC 9(4) BINARY.

01 CLIENT.

03 DOMAIN PIC 9(8) BINARY.

03 TASK PIC X(8)

03 NAME PIC X(8)

03 RESERVED PIC X(20).

01 ERRNO PIC 9(8) BINARY.

01 RETCODE PIC S9(8) BINARY.

PROCEDURE DIVISION.

CALL 'EZASOKET' USING SOC-FUNCTION SOCRECV CLIENT ERRNO RETCODE.

TAKESOCKETの呼出しでは、別のプログラムからソケットを取得し、新規ソケットを作成します。

ノート:

GETSOCKOPTIOCTLSETSOCKOPTおよびGIVESOCKETはサポートされません。

4.15.2 クライアント-リスナー-サーバー・アプリケーション・セット

次の図に、設定に関係するCICSランタイム・コマンドおよびソケット呼出しのシーケンスを示します。CICSランタイム・コマンドの先頭にはEXEC CICSが付いています。この図の他の番号付きアイテムはすべてART for CICS TCP/IP呼出しです。

図4-6 クライアント-リスナー-サーバー・アプリケーション・セット


クライアント-リスナー-サーバー・アプリケーション・セット

ここで、クライアントはOS/2オペレーティング・システムまたは各種UNIXオペレーティング・システムの1つ(AIX*など)でTCP/IPを実行しています。CICSランタイム・サーバーARTCSKLおよびARTATRN/ARTATR1プロセスは両方ともART for CICS TCP/IP下で実行されています。

4.15.2.1 クライアント呼出しシーケンス

図4-9 クライアント呼出しシーケンス

呼出し 説明
(1)INITAPI CICSアプリケーションをTCP/IPインタフェースに接続します。MAX-SOCKパラメータを使用して、アプリケーションで使用されるソケットの最大数を指定します。
(2)SOCKET これでソケットを取得します。次の3つのパラメータを使用してソケットを定義します。
  • ドメインまたはアドレッシング・ファミリ
  • ソケットのタイプ
  • プロトコル

CICS TCP/IPの場合、ドメインはTCP/IPインターネット・ドメイン(AF_INET)のみです。タイプは、ストリーム・ソケット(SOCK_STREAM)またはデータグラム・ソケット(SOCK_DGRAM)です。プロトコルは、TCPまたはUDPです。

プロトコルとして0を渡すと、デフォルト・プロトコルが選択されます。

成功の場合、SOCKETの呼出しはソケット記述子sを返します。これは常に小整数です。取得したソケットはローカルまたは宛先アドレスにまだアタッチされていないことに注意してください。

(3)CONNECT クライアント・アプリケーションはこれを使用してリモート・サーバーとの接続を確立します。この接続で使用するローカル・ソケットs(前述で取得)およびリモート・ソケットのアドレスとポート番号を定義する必要があります。システムでローカル・アドレスが指定されるため、CONNECTから正常に戻ったときにソケットは完全に定義され、TCP接続(ストリームの場合)またはUDP接続(データグラムの場合)に関連付けられています。
(4)WRITE 標準モードで実行される場合、これで最初のメッセージがARTCSKLに送信されます。標準モードのリスナーは、クライアントからの最初の伝送内のARTCSKL入力書式を必要とします。メッセージには、データの最初の4バイトとしてCICSトランザクション・コードが含まれています。バッファ・アドレスおよび送信するデータの長さも指定する必要があります。
(5)READ/WRITE これらの呼出しでは、サーバーとの対話が完了するまで続けられます。
(6)CLOSE これで指定したソケットが閉じられ、接続が終了されます。他のアプリケーションのためにソケット・リソースが解放されます。
4.15.2.2 リスナー呼出しシーケンス

リスナー・サーバーARTCSKLは、ART for CICS TCP/IPの一部として提供されます。図4-6に、ARTCSKLによって発行される呼出しを示します。クライアントおよびサーバーの呼出しシーケンスは、このシーケンスに則して準備する必要があります。詳細は、「ART for CICS TCP/IPリスナー(ARTCSKL)」を参照してください。

4.15.2.3 ARTATRN/ARTATR1呼出しシーケンスで実行されるユーザー・トランザクション

表4-10 ARTATRN/ARTATR1呼出しシーケンスで実行されるユーザー・トランザクション

呼出し 説明
(7)EXEC CICS RETRIEVE これで、リスナー・プログラムのEXEC CICS STARTコマンドによって渡されるデータを取得します。このデータには、ソケット記述子およびリスナー・クライアントID、オプションでクライアントからの追加データが含まれます。
(8)TAKESOCKET これで新たに作成されたソケットをリスナーから取得します。TAKESOCKETのパラメータで取得するソケット記述子およびリスナーのクライアントIDを指定する必要があります。この情報は、EXEC CICS RETRIEVEコマンドによって取得されます。
(9)READ/WRITE クライアントとの対話が完了するまで続けられます。
(10)CLOSE 接続を終了し、完了時にソケット・リソースを解放します。

4.15.3 ART for CICS TCP/IPリスナー(ARTCSKL)

この章のトピックは、次のとおりです:

4.15.3.1 説明
ARTCSKLはART for CICS TCP/IPソケットのリスナーで、CICS TCP/IPリスナーCSKLと同じ機能を実行できます。クライアント・リクエストを受信すると、作業タスクにリクエストを渡して処理を依頼し、別のクライアント・リクエストを待機します。ARTCSKLは標準モードまたはエンハンス・モードで実行できます。モードは、ART for CICS TCP/IPソケット・リスナー構成ファイル(listener.desc)のFORMATパラメータを介して設定できます。

ノート:

サポートされるソケット・リスナーはARTCSKLのみで、ユーザー作成リスナーはサポートされません。

図4-7 クライアント-リスナー-サーバー・アプリケーション・セット


クライアント-リスナー-サーバー・アプリケーション・セット

この図で示すように、クライアントAはすでにサーバーとの接続を確立しており、ARTATRN/ARTATR1で実行されるユーザー・トランザクションを作成しています。このため、サーバーはクライアントAのトランザクションの完了を待たずにクライアントBのリクエストを処理できます。このようにして複数のユーザー・トランザクションを開始できます。

ARTCSKLはこのアクティビティの一部をパラレルで実行するよう作成されており、着信接続リクエストを受信するポートを持つリスニング・ソケットがあります。接続リクエストを受信すると、ARTCSKLはこの接続のエンドポイントを表す新規ソケットを作成し、TCP/IPソケットのgivesocket/takesocket呼出しでアプリケーションに渡します。

リスナーは次の機能を実行します。

  • 適切なTCP/IP呼出しを発行して、構成ファイルで指定されたポートでリスニングし、クライアントによって発行される着信接続リクエストを待機します。ポート番号は、ART for CICS TCP/IPソケット・リスナー構成ファイル(listener.desc)で構成される必要があります。
  • 着信接続リクエストがあると、リスナーはこれを受け入れ、ARTATRN/ARTATR1サーバーに渡す新規ソケットを取得します。
  • 標準モードのリスナーは、新規接続の最初のメッセージ内の情報に基づいてユーザー・トランザクションを開始します。この情報の書式は、次の「ARTCSKL入力書式」に示されています。エンハンス・モードのリスナーの場合、ART for CICS TCP/IPソケット・リスナー構成ファイル(listener.desc)の情報に基づいてユーザー・トランザクションを開始します。
  • ユーザー・トランザクションが新規ソケットを取得するのを待ってから、クローズ呼出しを発行します。これが行われると、受信側アプリケーションがソケットの所有者となり、リスナーの対象ではなくなります。
4.15.3.2 ARTCSKL入力書式

標準モードのARTCSKLは、クライアントからの最初の伝送内の次の入力書式を必要とします。クライアントはレスポンスを待ってから後続の伝送を送信します。入力は大文字の場合と小文字の場合があります。カンマが必要です。

エンハンス・モードのARTCSKLにはこの入力書式は必要ありません。ART for CICSは、TCP/IPソケット・リスナー構成ファイル(listener.desc)からトランザクション情報を取得します。

図4-8 ARTCSKL入力書式


ARTCSKL入力書式

tran

リスナーが開始するトランザクションID(大文字)。このフィールドは、1文字から4文字までです。

client-in-data

オプション。アプリケーション・データ。このフィールドの最大長は40バイトです(35バイトに1バイトのフィラーと4バイトの開始タイプ)。

kc (大文字のKCのみサポートされます)

オプション。ART for CICSタスク制御用開始タイプ。大文字のKCのみがサポートされ、EXEC CICS STARTを使用して遅延間隔なしでユーザー・トランザクションが開始されることを示します。このフィールドが空白の場合、タスク制御(KC)を使用して即座に開始されます。

hhmmss (サポートされません)

これは、将来使用するために予約されています。

4.15.3.3 ARTCSKL出力書式

リスナーの出力には2つの異なる書式があります。1つは、標準リスナーを介して開始されたユーザー・トランザクション用(下のリスト4-48を参照)で、もう1つはエンハンスされたリスナーを介して開始されたユーザー・トランザクション用(下のリスト4-49を参照)です。

ユーザー・トランザクション・プログラムは、EXEC CICS RETRIEVE関数を使用してリスナーによって渡されたデータを取得し、IPv6ソケット・アドレス構造体を格納するために確保した記憶域を拡張します。EXEC CICS RETRIEVE関数で指定されたLENGTHには、リスナー出力書式を格納するために確保された記憶域の量が反映される必要があります。LENGTHが送信されたデータの量より小さい場合、LENGERRフラグが上げられます。HANDLE条件をコーディングすると、これを含めることができます。

ノート:

ART for CICS一時データ・キューを介した(ARTCSKLによる)出力はサポートされません。

リスト4-48 リスナー出力書式のC構造体 - 標準リスナー

struct sock_standard_tim { /* declaration of structure */
unsigned long give_take_socket; /* Socket being given */
char listen_name[8]; /* Listener name */
char listen_taskid[8]; /* Listener task id */
char client_in_data[35]; /* Client data */
char ote[1]; /* Threadsafe ind. @W1C */
union { /* Clients socket address */
struct sockaddr_in sin;
struct sockaddr_in6 sin6;
} sockaddr_in_parm;
char reserved2[68]; /* reserved */
};

リスト4-49 リスナー出力書式のC構造体 - エンハンスされたリスナー
struct sock_enhanced_tim { /* declaration of structure */
unsigned long give_take_socket; /* Socket being given */
char listen_name[8]; /* Listener name */
char listen_taskid[8]; /* Listener task id */
char client_in_data[35]; /* Client-in-data */
char ote[1]; /* Threadsafe ind. @W1C */
union { /* Clients socket address */
struct sockaddr_in sin;
struct sockaddr_in6 sin6;
} sockaddr_in_parm;
char reserved2[68]; /* reserved */
short client_in_data_length; /* Length of data recved */
char client_in_data_2; /* data from Client */
};

4.15.4 必要な構成

ART for CICS TCP/IPソケット・インタフェース関数を使用するには、次のようにします。

  • ART for CICS TCP/IPソケット・リスナー構成ファイル(listener.desc)にリソースを宣言します。詳細は、Oracle Tuxedo Application Runtime for CICSリファレンス・ガイドの「TCP/IPソケット・リスナー構成ファイル」(listener.desc)を参照してください。

  • CICSランタイム・サーバーARTCSKLおよびARTATRN/ARTATR1を構成します。CICSランタイム・サーバーARTCSKLおよびARTATRN/ARTATR1は同じマシン上で構成する必要があります。ARTCSKLおよびARTATRN/ARTATR1サーバーの詳細は、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』を参照してください

4.16 CICSリージョンの転送の実装

z/OSでは、ISSUE PASSコマンドを使用して、ターミナルに再接続しなくてもCICSリージョンを転送できます。ユーザーは、LOGONMSGを使用してデータ転送も実装できます。ISSUE PASSが呼び出されると、宛先リージョンのGMTRANが強制的に呼び出されます。

ART CICSも前述のシナリオをサポートします。次の構成が必要です。

4.16.1 ARTSRMサーバーの構成

ARTSRMを構成する必要があります。詳細は、ARTSRMの構成に関する項を参照してください。

4.16.2 環境変数の構成

環境変数ISC_ENABLEをYESに設定する必要があります。詳細は、ISC_ENABLEに関する項を参照してください。

4.16.3 CICS Runtime構成ファイルの宣言

次の構成が必要です。

4.16.3.1 system.desc

system.descでは、CICSリージョンの初期化パラメータを定義します。

リスト4-50 system.desc構成の例
[kixr]
APPLID=DBDCkixR
INITPARM=(ASINTP='Hello world')
[kixl]
APPLID=DBDCkixL
INITPARM=(ASINTP='Hello world')
GMTRAN=ISSS
LGNMSG=YES

この例では、2つのCICSリージョンが定義されています。SYSIDは、kixrおよびkixlとしてそれぞれ指定されています。kixlではGMTRAN=ISSSを指定しており、ユーザーがDBDCkixLにログインすると、トランザクションが自動的に起動されます。一方、kixrではGMTRANを指定していないため、デフォルトのCSGMが使用されます。kixlで指定されたLGNMSGにより、EXTRACT LOGONMSGISSUE PASSを使用したデータ転送機能が有効になります。system.descの詳細は、システム構成ファイルに関する項を参照してください。

4.16.3.2 transactions.descとprograms.desc

GMTRANが定義されている場合(CSGMCESNCESFなど、他のシステム・トランザクションではない)、トランザクション/プログラムをtransactions.desc/programs.descで構成し、ARTSTRN/ARTSTR1でロードする必要があります。transactions.desc/programs.descの詳細は、トランザクション構成ファイルに関する項およびプログラム構成ファイルに関する項を参照してください。

リスト4-51 transactions.desc構成およびprograms.desc構成の例
transactions.desc:
ISSS;SIMPAPPB;pg for simpapp;ISSPASSS
programs.desc:
ISSPASSS;SIMPAPPB;pg for simpapp;COBOL; ;ENABLED
4.16.3.3 terminals.desc (オプション)

この構成ファイルでは、ART CICSで使用可能なterminalを定義します。静的なLUNAMEを使用してART CICSにログオンする場合に、これは必須です。terminals.descの詳細は、ターミナル構成ファイルに関する項を参照してください。

リスト4-52 terminals.desc構成の例

[terminal]
name=0001
netname=CICS0001
group=SIMPAPP
[terminal]
name=0002
netname=CICS0002
group=SIMPAPP
4.16.3.4 UBB宣言

CICSリージョンの転送を実装するには、次の要件を満たす必要があります。

  • CICSリージョンごとにTMQUEUEを構成する必要があります。
  • ARTLOGNを構成する必要があります。
  • CICSリージョンごとに1つ以上のARTCNXを構成します。
  • ARTCNXで公開されるDDRを構成します(例については、次を参照)。

リスト4-53 DDR構成の例

GRP00
GRPNO=10
ENVFILE="/home2/work9/demo/config/tux/envfile"
 
GRP01
GRPNO=11
ENVFILE="/home2/work9/demo/config/tux/envfile"
GRP02
GRPNO=12
ENVFILE="/home2/work9/demo/config/tux/envfile"
 
GQUEKIXR
GRPNO=1010
TMSNAME=TMS_QM TMSCOUNT=2
OPENINFO="TUXEDO/QM: /home2/work9/demo/sysfile/kixrqspace:DBDCkixR"
GQUEKIXL
GRPNO=1020
TMSNAME=TMS_QM TMSCOUNT=2
OPENINFO="TUXEDO/QM: /home2/work9/demo/sysfile/kixlqspace:DBDCkixL"
...
TMQUEUE
SRVGRP=GQUEKIXR
SRVID=1110
RESTART=Y GRACE=0 CONV=N MAXGEN=10
CLOPT="-s DBDCkixR:TMQUEUE -- "
TMQUEUE
SRVGRP=GQUEKIXL
SRVID=1210
RESTART=Y GRACE=0 CONV=N MAXGEN=10
CLOPT="-s DBDCkixL:TMQUEUE -- "
 
ARTCNX
SRVGRP=GRP01
SRVID=15
CONV=Y
MIN=1 MAX=1 RQADDR=QCNX015 REPLYQ=Y
CLOPT="-o /home2/work9/demo /LOGS/sysout/stdout_cnx_15 -e /home2/work9/demo /LOGS/sysout/stderr_cnx_15 -r -- -s KIXR -l SIMPAPP"
ARTCNX
SRVGRP=GRP02
SRVID=16
CONV=Y
MIN=1 MAX=1 RQADDR=QCNX016 REPLYQ=Y
CLOPT="-o /home2/work9/demo /sysout/stdout_cnx_16 -e /home2/work9/demo /LOGS/sysout/stderr_cnx_16 -r -- -s KIXL -l SIMPAPP"
ARTLOGN
SRVGRP=GRP00
SRVID=18
CONV=Y
MIN=1 MAX=1 RQADDR=QLGN018 REPLYQ=Y
CLOPT="-o /home2/work9/demo /LOGS/sysout/stdout_logn -e /home2/work9/demo /LOGS/sysout/stderr_logn -r --"
 
...
*SERVICES
DEFAULT: SVCTIMEOUT=0 TRANTIME=80
connect ROUTING=CICSISC
disconnect ROUTING=CICSISC
inquire ROUTING=CICSISC
update ROUTING=CICSISC
CSGM ROUTING=CICSISC
CESN ROUTING=CICSISC
CESF ROUTING=CICSISC
authfail ROUTING=CICSISC
 
*ROUTING
CICSISC FIELD=CX_APPLID RANGES="'DBDCKIXR':GRP01,'DBDCKIXL':GRP02,*:GRP01" BUFTYPE="FML32"

ノート:

UBBでのDDR構成は必須です。DDRは、FMLフィールドCX_APPLIDにより、異なるCICSリージョン内のARTCNXにログイン・リクエストをルーティングします

ROUTING RANGESで構成されるAPPLIDは、大文字で指定する必要があります。

ARTでは、8100-8191のFML FIELD IDをDDR用に予約しています。

4.16.3.5 環境変数の宣言

CICSリージョンを転送するには、環境変数ISC_ENABLE=YESを設定します。

ARTLOGNが正常に起動したかどうかを確認するには、Tuxedo tmadmin psrおよびtmadmin psc を使用します。ARTCNXおよびTMQUEUEは、各リージョンに含まれています。

リスト4-54 環境変数宣言の例

/home2/work9/demo> tmadmin> tmadmin
...
 
> psr
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
--------- ---------- -------- -- ------ --------- ---------------
BBL 34790 KIXR 0 55 2750 ( IDLE )
TMS_QM GQUEKIXL_T+ GQUEKIXL 30001 0 0 ( IDLE )
TMS_QM GQUEKIXR_T+ GQUEKIXR 30001 0 0 ( IDLE )
ARTTCPL 00001.00101 TCP00 101 0 0 ( IDLE )
TMS_QM GQUEKIXL_T+ GQUEKIXL 30002 0 0 ( IDLE )
TMS_QM GQUEKIXR_T+ GQUEKIXR 30002 0 0 ( IDLE )
TMQUEUE 01020.01210 GQUEKIXL 1210 1 50 ( IDLE )
TMQUEUE 01010.01110 GQUEKIXR 1110 2 100 ( IDLE )
ARTADM 00011.00010 GRP01 10 0 0 ( IDLE )
ARTCNX QCNX015 GRP01 15 0 0 ( IDLE )
ARTCNX QCNX016 GRP02 16 0 0 ( IDLE )
ARTLOGN QLGN018 GRP00 18 0 0 ( IDLE )
ARTSTRN QKIX110 GRP12 20 0 0 ( IDLE )
...
> psc
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
------------ ------------ --------- -------- -- ------- ------ ------
DBDCkixL TMQUEUE TMQUEUE GQUEK+ 1210 KIXR 1 AVAIL
DBDCkixR TMQUEUE TMQUEUE GQUEK+ 1110 KIXR 2 AVAIL
disconnect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
connect cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
update cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
inquire cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
authfail cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESF cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CESN cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
CSGM cnxsvc ARTCNX GRP01 15 KIXR 0 AVAIL
disconnect cnxsvc ARTCNX GRP02 16 KIXR 0 AVAIL
connect cnxsvc ARTCNX GRP02 16 KIXR 0 AVAIL
update cnxsvc ARTCNX GRP02 16 KIXR 0 AVAIL
inquire cnxsvc ARTCNX GRP02 16 KIXR 0 AVAIL
authfail cnxsvc ARTCNX GRP02 16 KIXR 0 AVAIL
CESF cnxsvc ARTCNX GRP02 16 KIXR 0 AVAIL
CESN cnxsvc ARTCNX GRP02 16 KIXR 0 AVAIL
CSGM cnxsvc ARTCNX GRP02 16 KIXR 0 AVAIL
delsess lognsvc ARTLOGN GRP00 18 KIXR 0 AVAIL
gensess lognsvc ARTLOGN GRP00 18 KIXR 0 AVAIL
ART_LOGON lognsvc ARTLOGN GRP00 18 KIXR 0 AVAIL
ISSS strsvc ARTSTRN GRP12 25 KIXR 0 AVAIL
...

4.16.4 ART CICSへのログオン

正常に起動されると、ユーザーはART CICSに接続でき、ログオン画面が表示されて、ログオンするCICSリージョン(APPLID)の指定が要求されます。

図4-9 ログオン画面


ログオン画面

4.17 システム間通信の実装

ART CICS Runtimeでは、2つのz/OS相互通信機能の実装をサポートしています。

4.17.1 分散トランザクション処理(DTP)の実装

ART CICSでは、APPCマップおよびLUTYPE6.1プロトコルを介して、複数のART CICSリージョン内でのDTP接続をサポートしています。このため、DTP (APPC/LUTYPE6.1)の動詞を使用するCOBOLアプリケーションは、Oracle Tuxedo Application Rehosting Workbenchによる変換を受けた後、ART CICSに直接デプロイできます。

ART CICSはOracle TMAとの統合もサポートしており、APPCを介したART CICSリージョンとメインフレームCICSリージョン間のDTP接続も有効です。典型的なエンドツーエンドの使用例を、次に示します。

図4-10 典型的なエンドツーエンドの使用例


典型的なエンドツーエンドの使用例

このシナリオには、3つのART CICSリージョン(KIXAKIXBKIXC)があります。KIXAとKIXBはAPPCプロトコルを介して相互に通信し、KIXAとKIXCはLU61プロトコルを介して相互に通信します。

加えて、CICAという別のCICSリージョンがメインフレームにあり、KIXAまたはKIXBとAPPCプロトコルを介して通信します。

上の図に示すように、これらのリージョンで発生する対話は、次のとおりです。

  • ART CICSリージョン間の対話
    • KIXA内のターミナルからKIXBへ発行されるAPPC対話
      • KVA0 KIXB KVA5
      • KVA2 KIXB KVA5
    • KIXA内のターミナルからKIXCへ発行されるLU61対話
      • RV60 KIXC RV65
  • TMAを介したART CICSリージョンとメインフレームCICSリージョン間の対話
    • KIXA内のターミナルからCICAへ発行されるAPPCアウトバウンド対話
      • KVA0 CICA KVA5
      • KVA2 CICA KVA5
    • CICA内のターミナルからKIXBへ発行されるAPPCインバウンド対話
      • KVA0 CRM1 KVA5
      • KVA2 CRM1 KVA5

    ノート:

    CRM1はCICAからTMA LUへの接続です
4.17.1.1 構成

このシナリオでDTP接続が動作するために必要な構成を、次に示します。

4.17.1.1.1 system.descでのCICSリージョンの定義

system.desc構成ファイルでは、次のCICSリージョンが定義されます。

  • オープン・システム上の3つのART CICSリージョン
    • KIXA: APPC/LU61フロントエンド
    • KIXB: APPCバックエンド
    • KIXC: LU61バックエンド
  • メインフレーム上のCICSリージョン
    • CICA: APPCフロント/バックエンド

system.descの詳細は、システム構成ファイルに関する項を参照してください。

4.17.1.1.2 connections.descでの接続の定義

connection.desc構成ファイルでは、次の接続が定義されます。

  • KIXAでは、次の3つの接続が定義されます。
    • KIXAでは、3つの接続が定義されます。
    • KIXB: KIXBへの接続、プロトコルはAPPC
    • KIXC: KIXCへの接続、プロトコルはLU61
    • CICA: CICAへの接続、プロトコルはAPPC
  • KIXBでは、2つの接続が定義されます。
    • KIXA: KIXAへの接続、プロトコルはAPPC
    • CICA: CICAへの接続、プロトコルはAPPC
  • KIXCでは、1つの接続が定義されます。
    • KIXA: KIXAへの接続、プロトコルはLU61

    ノート:

    CICAは外部リージョンのため、CICAの接続定義はローカルでは存在しません。
    connections.descの詳細は、接続構成ファイルに関する項を参照してください。
4.17.1.1.3 programs.descでのプログラムの定義

programs.desc構成ファイルでは、次のプログラムが定義されます。

  • KIXA内の2つのプログラム
    • COVSATMC: view32を使用したAPPCクライアント
    • RVS61C: LU61クライアント
  • KIXB内の1つのプログラム
    • COVSATMS: view32を使用したAPPCサーバー
  • KIXC内の1つのプログラム
    • KIXC内の1つのプログラム
      • RVS61S: LU61サーバー

programs.descの詳細は、プログラム構成ファイルに関する項を参照してください。

4.17.1.1.4 transactions.descでのトランザクションの定義

transactions.desc構成ファイルでは、次のトランザクションが定義されます。

  • KIXA内の3つのトランザクション
    • KVA0: COVSATMC上のAPPCクライアント、同期レベル0
    • KVA2: COVSATMC上のAPPCクライアント、同期レベル2
    • RV60: RVS61C上のLU61クライアント
  • KIXB内の1つのトランザクション:
    • KVA5: COVSATMS上のAPPCサーバー
  • KIXC内の1つのトランザクション

    RV65: RVS61S上のLU61サーバー

transactions.descの詳細は、トランザクション構成ファイルに関する項を参照してください。

4.17.1.1.5 UBBCONFIG構成

UBBCONFIGファイルでは、次のものが構成されます。

  • KIXAARTSTRNサーバーと、transactions.descで定義される3つのサービス(KVA0KVA2RV60)
  • KIXCARTCTRNサーバーと、transactions.descで定義される1つのサービス(KIXC_RV65)
  • TMA統合用のGWSNAXゲートウェイ(CICA用)
ARTSTRNおよびARTCTRNの詳細は、CICSランタイム・サーバーに関する項を参照してください。

ノート:

UBBCONFIGでのARTCTRN構成では、CONV=Yを指定する必要があります。
4.17.1.1.6 DMCONFIG構成

DMCONFIGファイルでは、次のものが構成されます。

  • TMA統合用のリモート・ドメイン定義(CICA用)
  • CICA_KVA5サービスの外部からのインポート
  • KIXB_KVA5サービスの外部へのエクスポート

4.17.2 非同期処理の実装

z/OSでは、非同期処理は、リモート・システム上のトランザクションを起動するSTARTコマンドを参照します。ART CICS Runtimeでは、STARTコマンドとSYSIDオプションを使用してこの機能の実装をサポートしています。

次の各項では、実行する必要がある構成タスクについて説明します。

4.17.2.1 system.descでのリージョンの定義

system.desc構成ファイルでCICSリージョンを定義します。KIXRおよびKIXXという2つのリージョンを定義する例を、次に示します。DBDCkixRおよびDBDCKIXXは、それぞれのアプリケーション定義です。

リスト4-55 system.descでのリージョン定義の例

[KIXR]
APPLID=DBDCkixR
INITPARM=(ASINTP='Hello world')
[KIXX]
APPLID=DBDCKIXX
INITPARM=(ASINTP='Hello worldL')
4.17.2.2 ARTSRMサーバーの構成

ARTSRMサーバーを構成する必要があります。詳細は、ARTSRMの構成に関する項を参照してください。

4.17.2.3 UBBCONFIGファイルの変更

各CICSリージョンのUBBCONFIGファイルでARTATRNサーバーを構成する必要があります。

「system.descでのリージョンの定義」のトピックのリスト4-55に示されているように、KIXRおよびKIXXという2つのリージョンが定義されているものとします。構成の例を、次に示します。

リスト4-56 UBBCONFIGの変更例
…
*SERVERS
…
ARTATRN
SRVGRP=GRP02
SRVID=30
CONV=N
MIN=1 MAX=1 RQADDR=QKIXATR REPLYQ=Y
CLOPT="-o /u01/common/patches/yfli/KIX12110/test/CIT_ORA/strt/LOGS/sysout/stdout_atrn -e /u01/common/patches/yfli/KIX12110/test/CIT_ORA/strt/LOGS /sysout/stderr_atrn -r -- -s KIXR -l SIMPAPP"
ARTSRM SRVGRP= GRPX SRVID=36 MIN=1 MAX=1 RQADDR= QKIXATR REPLYQ=Y CLOPT="-o /u01/common/patches/yfli/KIX12110/test/CIT_ORA/strt/LOGS/sysout/stdout_srm -e /u01/common/patches/yfli/KIX12110/test/CIT_ORA/strt/LOGS/sysout/stderr_srm -r -- -s KIXR -l SIMPAPP "
ARTATRN
SRVGRP=GRPX
SRVID=35
CONV=N
MIN=1 MAX=1 RQADDR=QKIXATRX REPLYQ=Y
CLOPT="-o /u01/common/patches/yfli/KIX12110/test/CIT_ORA/strt/LOGS/sysout/stdout_atrn -e /u01/common/patches/yfli/KIX12110/test/CIT_ORA/strt/LOGS /sysout/stderr_atrn -r -- -s KIXX -l SIMPAPP"
ARTSRM SRVGRP= GRPX SRVID=36 MIN=1 MAX=1 RQADDR= QKIXATRX REPLYQ=Y CLOPT="-o /u01/common/patches/yfli/KIX12110/test/CIT_ORA/strt/LOGS/sysout/stdout_srm -e /u01/common/patches/yfli/KIX12110/test/CIT_ORA/strt/LOGS/sysout/stderr_srm -r -- -s KIXX -l SIMPAPP "
…
*SERVICES

4.17.3 同期処理の実装

ART CICS Runtimeでは、リモートCICSシステム上にある同期トランザクションの起動をサポートします。この機能を実装するには、次の構成が必要です。

4.17.3.1 環境変数の構成

ISC_ENABLE環境変数をYESに設定して、同期処理機能を有効にします。

4.17.3.2 system.descでのリージョンの定義

system.desc構成ファイルでCICSリージョンを定義します。KIXRおよびKIXXという2つのリージョンを定義する例を、次に示します。DBDCKIXRおよびDBDCKIXXは、それぞれのアプリケーション定義です。

リスト4-57 system.descでのリージョン定義の例

[KIXR]
APPLID=DBDCKIXR
[KIXX]
APPLID=DBDCKIXX
4.17.3.3 UBBCONFIGファイルの変更

UBBCONFIGファイルで次の構成を行います。

  • 各CICSリージョンのARTSTRNサーバー
  • DDRルーティング定義の適切な構成

「system.descでのリージョンの定義」のトピックのリスト4-57に示されているように、KIXRおよびKIXXという2つのリージョンが定義されているものとします

構成の例を、次に示します。

リスト4-58 UBBCONFIGの変更例

*GROUPS
GRPKIXR
GRPNO=11
TMSNAME="TMS_ORA"
TMSCOUNT=2
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/yfli/yfli+SqlNet=artkix+SesTm=600+LogDir=/LOGS/xa+DbgFl=0x20"
GRPKIXX
GRPNO=12
TMSNAME="TMS_ORA"
TMSCOUNT=2
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/yfli/yfli+SqlNet=artkix+SesTm=600+LogDir=/LOGS/xa+DbgFl=0x20"
 
*SERVERS
ARTSTRN
SRVGRP=GRPKIXR
SRVID=1101
CONV=Y
MIN=1 MAX=1 RQADDR=QKIXSTRR REPLYQ=Y
CLOPT="-- -s KIXR -l SIMPAPP"
 
ARTSTRN
SRVGRP=GRPKIXX
SRVID=1201
CONV=Y
MIN=1 MAX=1 RQADDR=QKIXSTRX REPLYQ=Y
CLOPT="-- -s KIXX -l SIMPAPP"
 
 
*SERVICES
DEFAULT: SVCTIMEOUT=0 TRANTIME=80
SB00 ROUTING=APPLID
SB01 ROUTING=APPLID
SB02 ROUTING=APPLID
SB03 ROUTING=APPLID
 
*ROUTING
APPLID FIELD=CX_APPLID RANGES="'DBDCKIXX':GRPKIXX,*:GRPKIXR" BUFTYPE="FML32"

この例では、KIXXリージョンからのリクエストはGRPKIXX内のARTSTRNにルーティングされ、他のすべてのリクエストはGRPKIXR内のARTSTRNにルーティングされます。

4.18 JCL/KSHのオンラインでの送信の実装

次の各項では、JCL/KSHジョブをオンラインで送信する方法について説明します。

4.18.1 JCL/KSHジョブのオンラインでの送信

z/OSで、CICSプログラムはWRITEQ TDコマンドでJCL/KSHジョブを送信し、TDQによってJCL/KSHジョブ文をJES内部リーダーに渡すことができます。ART CICS Runtimeでは、特別なTDQ定義と、TuxJESシステムによって通知される内部サービスを使用して、この機能をサポートします。

この機能を使用する前に、ART Batch Runtime and TuxJES環境が設定されている必要があります。詳細は、Tuxedo Job Enqueueing Service (TuxJES)の使用に関する項を参照してください。

4.18.1.1 UBBCONFIGファイルの設定

送信されたJCL/KSHジョブ文は、ARTTDQサーバーによってTuxJESに転送されます。このサーバーをアクティブ化するには、UBBCONFIGファイルの*SERVERSセクションでARTTDQを構成します。次に例を示します。

リスト4-59 UBBCONFIGでのARTTDQの構成の例

*SERVERS
…
ARTTDQ
SRVGRP=GRP02
SRVID=50
MIN=1 MAX=1
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_strn -e /home2/work9/demo/Logs/TUX/sysout/stderr_strn -r -- -s KIXR -L LIST1"
4.18.1.2 tdqextra.descの構成

JCL/KSH関数の送信を実装するには、tdqextra.desc構成ファイル内で次のフィールドを指定する必要があります。

  • BLOCKFORMAT: TuxJES内部リーダーへのインタフェースとして使用されるエクストラパーティション・キューの非ブロックまたはブロック・レコード書式。
  • INTRDR: TDQ定義を内部リーダーとして設定します。

例:

IRDR;SIMPAPP;ON LINE SUBMIT JOB;EXTRAQJ; ; ; ;V; ;32767;OUTPUT;DSN; ; ;Y;U;

説明:

Y

これが内部リーダーTDQであることを指定します。

U

ブロック書式がUNBLOCKEDであることを指定します。

ノート:

  • JCLジョブ・ファイルの場合: JCLジョブをTuxJESに送信するには、1つのJCL終了フラグ、"/*EOF"をTDQ INTRDRに書き込む必要があります。tdqextra.descでTDQに対してBLOCKFORMAT=Bが設定されている場合、2つの終了フラグ"/*EOF"をTDQに書き込む必要があります。
  • KSHジョブ・ファイルの場合: KSHジョブをTuxJESに送信するには、1つのKSH終了フラグ"#EOF"をTDQに書き込む必要があります。

詳細は、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』のTDキュー・エクストラ・パーティション構成ファイルに関する項を参照してください。

4.18.2 SPOOLによるJCL/KSHジョブのオンラインでの送信

z/OSで、CICSプログラムはSPOOLWRITEコマンドでJCL/KSHジョブを送信し、SPOOLでJCL/KSHジョブ文をJES内部リーダーに渡すことができます。ART for CICSでは、TuxJESシステムによって通知される内部サービスを使用して、この機能をサポートします。

この機能を使用する前に、ART Batch Runtime and TuxJES環境が設定されている必要があります。詳細は、Tuxedo Job Enqueueing Service (TuxJES)の使用に関する項を参照してください。

ノート:

終了フラグをSPOOLファイルに書き込み、JCL/KSHジョブを送信します。そうしないと、SPOOLに書き込まれたジョブ・ファイルは、EXEC CICS SPOOLCLOSEが使用されると自動的にJCLジョブ・ファイルとしてTuxJESに送信されます。
  • JCLジョブ・ファイルの場合: JCLジョブをTuxJESに送信するには、1つのJCL終了フラグ"/*EOF"をSPOOLファイルに書き込む必要があります。
  • KSHジョブ・ファイルの場合: KSHジョブをTuxJESに送信するには、1つのKSH終了フラグ"#EOF"をSPOOLファイルに書き込む必要があります。
4.18.2.1 SPOOL関連の環境変数の構成

次の環境変数を構成します。

  • KIX_SPOOL_JOB_AUTO_SUBMIT=YES
  • KIX_SPOOL_OUTPUT_DIR=${APPHOME}/spool

詳細は、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』KIX_SPOOL_JOB_AUTO_SUBMITに関する項およびKIX_SPOOL_OUTPUT_DIRに関する項を参照してください。

4.19 ART for CICS制御ユーティリティの実装

ART for CICSには、ART for BatchからCICS関連のリソースを追跡および管理するためのartcicsutilユーティリティが用意されています。常にART for Batchジョブによってトリガーされます。ART for Batchジョブは、1つのコマンドでファイルの開閉、CICSトランザクションの有効化/無効化、CICSトランザクションの開始などを行えます。

artcicsutilには、ART for CICSを制御するために2つのモードのコマンド・セットがあります。エンドツーエンド・モード(IPCPコマンド・セットとCAFCコマンド・セット)と対話型モード(対話型コマンド・セット)です。各コマンド・セットのサポートされるすべてのサブコマンドについては、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』のartcicsutilに関する項を参照してください。

ノート:

  • artcicsutilはART for CICSサーバーARTSRMと連携する必要があります。artcicsutilは、CICSリソース関連の処理を一元化するトリガーです。ARTSRMはART for CICSでの各CICSリージョンのポータルで、ARTSRMがすべての処理の実行を担います。
  • この機能を使用する前に、ART Batch Runtime and TuxJES環境が設定されている必要があります。詳細は、「Tuxedo Job Enqueueing Service (TuxJES)の使用」を参照してください

ART for CICS制御ユーティリティの実装には、一般的なユースケースがあります。

4.19.1 ユースケース1: エンドツーエンド・モード(IPCPコマンド・セット)でのART for CICS制御ユーティリティの実装

次のワークフローに従って、エンドツーエンド・モードでartcicsutilユーティリティを実装します(ここでは例としてIPCPコマンド・セットを使用します)。

4.19.1.1 ART for Workbenchを使用したJCLからKSHへの変換

IPCPコマンド・セットを含むJCLファイルがあるとします(例として次のリストを参照してください)。

リスト4-60 IPCPサブコマンドを含むJCLの例
//IPCPEXP4 JOB 0001,'IPCP',CLASS=A
//IPCP01 EXEC PGM=IPCPBTCH,PARM='CICS CC ONLY=CICS3'
//STEPLIB DD DSN=IPCPvn.LOADLIB,DISP=SHR
//IPCPCDS DD DSN=IPCPvn.COMMAND.DATASET,DISP=SHR
//AUDIT DD SYSOUT=X
//SYSIN DD *
INIT KC HEL1

このJCLでは、IPCPプログラムIPCPBTCHが内部で発行され(EXEC PGM=IPCPBTCH)、ターゲットCICSリージョンがCICS3と設定され(EXEC PARM='CICS CC ONLY=CICS3')、CICSトランザクションHEL1がターゲットCICSリージョンで開始されます(INIT KC HEL1)。このケースでは、IPCPサブコマンドをEXEC PARMとJCL SYSIN DDの両方で発行できます。

ART for Workbenchを使用して、このJCLファイルを次のKSHファイルに変換します。

リスト4-61 ART for Workbenchによって変換されたKSH

#!/usr/bin/ksh
 
m_JobBegin -j IPCPEXP4 -s START -v 2.0 -c A
while true ;
do
m_PhaseBegin
case ${CURRENT_LABEL} in
(START)
# ********************************************************//
JUMP_LABEL= IPCPEXP4
;;
(IPCPEXP4)
m_FileAssign -d SHR IPCPCDS ${DATA}/XXXX.IPCP.CICS.IPCPCNTL
m_OutputAssign -c "*" AUDIT
m_FileAssign -i SYSIN
artcicsutil -t IPCPBTCH "CICS CC ONLY=CICS3"
JUMP_LABEL=END_JOB
;;
(END_JOB)
break
;;
(*)
m_RcSet ${MT_RC_ABORT:-S999} "Unknown label : ${CURRENT_LABEL}"
break
;;
esac
m_PhaseEnd
done
m_JobEnd
#@(#)---------------------------------------------------------------------

このKSH(artcicsutil -t IPCPBTCH "CICS CC ONLY=CICS3"サブコマンドを参照)では、プログラムIPCPBTCHartcicsutilに変換され、EXEC PARMが位置パラメータとしてartcicsutilに渡され、その他のすべてのサブコマンド(SYSIN DDに含まれている)が、artcicsutilが直接アクセスできるローカル・ファイルとしてART for Batchによって格納されます。-tオプションを使用してコマンド・セットのタイプが指定され、その値はIPCPBTCH (IPCPコマンド・セット)に設定されています。

4.19.1.2 CICSランタイム・ドメインにおけるUBBCONFIGの構成

UBBCONFIGで、次のサーバーを設定します。

  • ARTSRM (必須)

    ARTSRMartcicsutilユーティリティのプロキシで、UBBCONFIGで構成する必要があります。対応するシステム構成ファイル(system.desc)も構成する必要があります。詳細は、「リソース・ファイルの構成」を参照してください。

    各ART for CICSリージョンでARTSRMを構成する必要があります。

  • ARTATRN (オプション)

IPCPコマンド・セットのコマンドINIT KCまたはENAB/DISA KC、またはCAFCコマンド・セットのSTRTをJCLファイルで使用する場合、UBBCONFIGARTATRNを設定する必要があります。ターゲット・トランザクションをトランザクション構成ファイル(transactions.desc)およびプログラム構成ファイル(programs.desc)で定義する必要もあります。詳細は、「リソース・ファイルの構成」を参照してください。

ARTATRNを使用する場合、各ART for CICSリージョンでARTATRNを構成する必要があります。

例として、次のリストを参照してください。artcicsutilが発行するリクエストはすべて、まずARTSRMによって受信されるため、ARTSRMサーバーは必須です。その後ARTSRMはプロキシとして動作し、ターゲットCICSサーバーにこれらのリクエストの処理を依頼します。JCLでINIT KCサブコマンドが使用されるため(「ART for Workbenchを使用したJCLからKSHへの変換」のトピックのリスト4-60を参照)、ARTATRNサーバーも指定します。INIT KCサブコマンドのターゲットCICSトランザクションは、ARTATRNサーバーにデプロイされたものです。

リスト4-62 CICSランタイム・ドメインにおけるUBBCONFIGの構成の例(サーバーARTSRMおよびARTATRN)
*SERVERS
...
ARTATRN
SRVGRP=GRP02
SRVID=30
MIN=1 MAX=1
CLOPT="-o /home2/work9/demo/cics/LOGS/sysout/stdout_atrn -e /home2/work9/demo/cics/LOGS/sysout/stderr_atrn -r -- -s KIXR -l SIMPAPP"
 
ARTSRM
SRVGRP=GRP02
SRVID=25
CLOPT="-o /home2/work9/demo/cics/LOGS/sysout/stdout_srm -e /home2/work9/demo/cics/LOGS/sysout/stderr_srm -r -- -s KIXR -l SIMPAPP"
...
4.19.1.3 リソース・ファイルの構成

次のリソース・ファイルを構成します。

  • システム構成ファイル(system.desc)

    これは必須です。例については、次のリストを参照してください。CICSランタイム・リージョンCICS3を構成します。このCICS3がJCLファイルで指定されるためです(「ART for Workbenchを使用したJCLからKSHへの変換」のトピックのリスト4-60にあるEXEC PGM=IPCPBTCH,PARM='CICS CC ONLY=CICS3'サブコマンドを参照)。

  • トランザクション構成ファイル(transactions.desc)およびプログラム構成ファイル(programs.desc)

    これらはオプションです。IPCPコマンド・セットのコマンドINIT KCまたはCAFCコマンド・セットのSTRTがJCLファイルで使用されるため、ARTATRNが必要です。ターゲット・トランザクションをターゲット構成ファイル(transactions.desc)およびプログラム構成ファイル(programs.desc)で定義する必要があります。

  • VSAM構成ファイル(desc.vsam)

    これはオプションです。IPCPコマンド・セットのコマンドOPEN/CLOS DBがJCLファイルで使用されるため、このVSAM構成ファイル(desc.vsam)を構成する必要があります。

リスト4-63 システム構成ファイルの構成の例

[KIXA]
APPLID=CICS1
[KIXB]
APPLID=CICS2
[KIXR]
APPLID=CICS3
4.19.1.4 ART for CICSドメインおよびART for BatchドメインでのDMCONFIGの構成

エンドツーエンド・モードの場合、DMCONFIGを構成します。キー・サービス・エントリ$(APPLID)_CICS_CTRLをART for CICSドメイン(リスト4-64の太字のCICS3_CICS_CTRLを参照)とART for Batchドメイン(リスト4-65の太字のCICS3_CICS_CTRLを参照)との間でエクスポート/インポートします。このサービスは、構成されている各ARTSRM (ARTSRMは各ART for CICSリージョンで構成)によって通知されます。接頭辞CICS3は、ターゲットCICSリージョンのAPPLIDです。

ノート:

${APPLID}は大文字である必要があります。

リスト4-64 ART for CICSドメインでのDMCONFIGの構成の例

*DM_RESOURCES
VERSION=U22
 
*DM_LOCAL
CICS1 GWGRP="GWGRP1"
TYPE=TDOMAIN
ACCESSPOINTID="CICSAP1"
DMTLOGDEV="/home/work9/demo/cics/config/tux/DMTLOG1"
DMTLOGNAME="DMTLOG1"
CONNECTION_POLICY="ON_STARTUP"
*DM_REMOTE
#
BATCH1
TYPE=TDOMAIN
ACCESSPOINTID="BATCHAP1"
*DM_TDOMAIN
CICS1 NWADDR="//optiplex:8301"
BATCH1 NWADDR="//optiplex:8401"
 
*DM_EXPORT
CICS3_CICS_CTRL RACCESSPOINT=BATCH1
*DM_IMPORT

リスト4-65 ART for BatchドメインでのDMCONFIGの構成の例

*DM_RESOURCES
VERSION=U22
 
*DM_LOCAL
BATCH1 GWGRP="GWGRP1"
TYPE=TDOMAIN
ACCESSPOINTID="BATCHAP1"
DMTLOGDEV="/home/work9/demo/jes/config/tux/DMTLOG1"
DMTLOGNAME="DMTLOG1"
CONNECTION_POLICY="ON_STARTUP"
 
*DM_REMOTE
#
CICS1 TYPE=TDOMAIN
ACCESSPOINTID="CICSAP1"
*DM_TDOMAIN
CICS1 NWADDR="//optiplex:8301"
BATCH1 NWADDR="//optiplex:8401"
 
*DM_EXPORT
 
*DM_IMPORT
CICS3_CICS_CTRL
*DM_ROUTING

4.19.2 ユースケース2: 対話型モード(対話型コマンド・セット)でのART for CICS制御ユーティリティの実装

このユースケースでは、対話型モードでartcicsutilユーティリティを起動する方法を示します。この例では、トランザクションEQDQが開始されます。

リスト4-66 対話型モードでのartcicsutilユーティリティの起動の例
> artcicsutil -t native
> start EQDQ
start trans:
transaction ' EQDQ'
trmid ''
from ''
start trans done.

4.20 CICSランタイム・アプリケーション・データの出力の実装

ART CICS Runtimeでは、2つの方法でアプリケーション・データをCICS 3270プリンタに出力できます。

4.20.1 全般的な構成

どちらの方法を使用して出力を実装する場合も、まず、次の構成タスクを実行する必要があります。

  1. typeterms.descでプリンタ・ターミナル定義を構成します。次に例を示します。

    リスト4-67 typeterms.descでのプリンタ・ターミナル定義の構成の例

    [typeterm]
    name=IBM-3287-1
    color=YES
    defscreencolumn=80
    defscreenrow=24
    description="IBM 327x family printer"
    hilight=YES
    logonmsg=NO
    outline=NO
    swastatus=ENABLED
    uctran=NO
    userarealen=100

    ノート:

    ART CICSでは、プリンタの代替サイズをサポートしません。そのため、IBM-3287-1の場合、typeterms.descで、scrnsize=alternatealtscreenrowおよびaltscreencolumnという属性を定義しないでください
  2. プリンタのトランザクションを、同時に実行されることがないクラスに構成します。

    例:

    TRCLASS1;UNIGRP; A tranclass bidon for UNIGRP; 1
  3. transactions.descで、プリンタ・プログラム定義をARTSTR1プログラム・グループに構成します。

    例:

    PRNT;UNIGRP;pg for ARTSTR1; PRNTPROG; ; ; ; ; ; ;ENABLED; ; ; ;TRCLASS1
  4. programs.descで、プリンタ・プログラムをARTSTR1プログラム・グループに構成します。

    例:

    PRNTPROG;UNIGRP;pg for UNIGRP;COBOL; ;ENABLED

  5. terminals.descでプリンタ・ターミナルを定義して、プリンタLUNAMEおよびTERMIDを指定します

    例:

    [terminal]

    name=PRT1

    netname=CICSPRT1

    group=UNIGRP

  6. UBBCONFIGCLOPT -lオプションを使用して、プリンタ・プログラム・グループをARTSTR1プログラム・グループに構成します

    例:

    CLOPT="-o stdout_str1 -e stderr_str1 -r -- -s KIXR - UNIGRP"
  7. 次のいずれかを実行して、プリンタ・デバイスを指定します。
    • プリンタ・ターミナルとしてwc3270クライアントを使用している場合、ターミナル・タイプをIBM-3287-1に構成します

      例:

      -tn IBM-3287-1

    • プリンタ・ターミナルとしてPCOMクライアントを使用している場合、次の図に示すように、Telnet3270インタフェースでLUNAMEを構成し、「セッション・パラメータ」インタフェースで「セッション・タイプ」「プリンタ」に設定します。

図4-11 LUNAMEの構成


LUNAMEの構成

図4-12 PCOMセッション・タイプの設定


PCOMセッション・タイプの設定

4.20.2 STARTコマンドによる出力の実装

次の図は、STARTコマンドによる出力を示しています

図4-13 STARTコマンドによる出力


STARTコマンドによる出力

上の図は、典型的な使用例を示しています。このようなシナリオでのSTARTコマンドによる出力の実装手順は、次のとおりです。

  1. Pcommターミナルが外部のプリンタ・デバイスに接続するように構成します。
  2. 以前に指定したLUNAMEを使用して、プリンタ・ターミナルからART TCPへの接続を確立します。
  3. ディスプレイ・ターミナルからART CICSへの接続を確立し、ディスプレイ・ターミナルからトランザクションAを開始します。
  4. トランザクションAはSTARTコマンドにより非同期トランザクションBを起動し、TERMIDを以前に定義したLUNAMEの1つとして指定します。
  5. トランザクションBはBMSまたはターミナル制御コマンドを起動し、コマンド・アプリケーション・データをプリンタ・ターミナルに送信します。最後に、プリンタ・ターミナルが、接続されている外部プリンタ・デバイスに出力用の印刷ジョブを送信します。

4.20.3 一時データによる出力の実装

一時データによる出力を実装するには、次の操作を行います。

  1. tdqintra.descATIFACILITYおよびFACILITYIDを次のように構成します。
    リスト4-68 tdqintra.descでのATIFACILITYおよびFACILITYIDの構成例
    # TDQUEUE;GROUP;DESCRIPTION;RECOVSTATUS;TRANSID;TRIGGERLEVEL;USERID;WAIT;WAITACTION;QSPACENAME;TRT;ATIFACILITY;FACILITYID
    MTI1;SIMPAPP;TDQ FOR PRINTER;;BBBB;1;;;;;;T;PRT2
  2. terminals.descでPRT2を定義します
    例:
    [terminal]
    name=PRT2
    netname=CICSPRT2
    group=UNIGRP
  3. ART CICSの開始後、PCOMM (LUNAME= CICSPRT2で指定されたプリンタ)とART CICSの間で接続を確立します。
  4. ATIユーザーの場合、次のように/Qを構成します。
    qcreate MTI1 fifo none 2 30 1m 0m "TDI_TRIGGER -q queue_name -d space_name"

    ATIトリガー・レベルに達すると、TDI_TRIGGERクライアントが起動され、-qオプションと-dオプションがART CICSに通知して、queue_nameおよびspace_nameに関連するトランザクションがターミナルPRT2で開始します。

4.21 CICSアプリケーションからのWebサービスの呼出しの実装

ART CICSでは、INVOKE WEBSERVICEコマンドを使用した、CICSアプリケーションからのWebサービスの呼出しをサポートしています。この機能を実装するには、次の項で説明する構成タスクを実行する必要があります。

4.21.1 WSDLファイルのMIFへの変換およびCOPYBOOKの生成

Oracle SALTコマンド・ユーティリティwsdlcvtを使用して、WSDLファイルをOracle Tuxedoメタデータ・リポジトリ入力ファイル(MIF)に変換します。COPYBOOKを生成するには、-Cオプションを指定します。詳細は、「Oracle SALTアプリケーションの構成」.を参照してください。

4.21.2 COPYBOOKからのRECORD定義の生成

cpy2recordツールを使用して、前のステップで生成したCOPYBOOKからRECORD定義を生成し、RECORDの環境変数をエクスポートします。詳細は、RECORD型バッファの使用に関する項.を参照してください

4.21.3 SALTおよびメタデータ・リポジトリの構成

(Oracle Tuxedo SALTユーティリティwsloadcfを使用して) SALT構成ファイルを作成し、(tmloadreposを使用して)サービス情報をOracle Tuxedoサービス・メタデータ・リポジトリにロードします。詳細は、「Oracle SALTアプリケーションの構成」.を参照してください

4.21.4 webservice.descの構成

webservice.desc構成ファイルにサービス・セクションを追加し、webservice.descREQUESTおよびRESPONSEを指定します。次のリストに例を示します。

リスト4-69 webservice.desc構成の例

[DFH0XCMNOperation]
REQUEST=DFH0XCMNOperation
RESPONSE=DFH0XCMNOperationResponse
TRANSACTION=N

4.21.5 UBBCONFIGの変更

UBBCONFIGファイルでTMMETADATAサーバーおよびGWWSサーバーを構成します。次のリストに例を示します。

リスト4-70 UBBCONFIGでTMMETADATAおよびGWWSを追加する例

*SERVERS
...
TMMETADATA SRVGRP=GROUP2 SRVID=2 CLOPT="-A -- -f pmu.repos"
GWWS SRVGRP=GROUP2 SRVID=3 CLOPT="-A -r -- -iGWWS1"

4.22 HTTPクライアントとしてのCICSの実装

Oracle Tuxedo Application Runtime for CICSでは、CICSがHTTPクライアントとして動作することがサポートされています。インターネットに接続するには、CICS WEB動詞を使用します。この機能を実装するには、次のようにします。

4.22.1 SALTでのRESTアウトバウンド・サービスの定義

Tuxedo SALTデプロイメント・ファイルで、アクセスする各HTTPエンドポイントに対してRESTアウトバウンド・サービスを構成します。("Service"要素の) "outputbuffer"を"CARRAY"に設定し、"enableCustomHTTPHeaders"および"enableHTTPRequestLine"プロパティを指定してWEB WRITE/READ HTTPHEADERWEB EXTRACT HTTPMETHOD/QUERYSTRING/などのサポートを有効にする必要があります。次のリストに例を示します。

また、WSDFおよびMetadata構成など、その他必要なTuxedo SALT構成を定義してロードする必要があります。詳細は、SALTデプロイメント・ファイル・リファレンスを参照してください。

リスト4-71 SALTでのRESTアウトバウンド・サービスの定義の例

<GWInstance id="GWWS1">
<Outbound>
<HTTP>
<Service name="TOUPPOST"
content-type="XML"
method="POST"
address="http://demobox:8080/ARTCICS/DEMOS/TOUPSVR"
outputbuffer="CARRAY"/>
</HTTP>
</Outbound>
<Properties>
<Property name="enableMultiEncoding" value="true"/>
<Property name="enableCustomHTTPHeaders" value="true"/>
<Property name="enableHTTPRequestLine" value="true"/>
</Properties>

4.22.2 URIMAP構成ファイルurimaps.descの構成

URIMAP構成ファイルurimaps.descにエントリを追加します。例:

TOUPPOST;SIMPAPP; demo test; ENABLED ; /ARTCICS/DEMOS/TOUPSVR; HTTP ; CLIENT; demobox; 8080; ; TOUPPOST

4.22.3 UBBCONFIGの変更

ユーザー・プログラムを実行するようにARTトランザクション・サーバーを構成し、Tuxedo SALTのUBBCONFIGTMMETADATAおよびGWWSを構成します。例:

リスト4-72 UBBCONFIGの変更例

ARTSTRN
SRVGRP=GRP02
SRVID=20
CONV=Y
MIN=1 MAX=1
CLOPT="-o /home/demo/restclnt/LOGS/sysout/stdout_strn -e /home/demo/restclnt/LOGS/sysout/stderr_strn -r -- -s KIXR -l SIMPAPP"
……
TMMETADATA SRVGRP=GROUP2 SRVID=2 CLOPT="-A -- -f artcics.repos"
GWWS SRVGRP=GROUP2 SRVID=3 CLOPT="-A -r -- -iGWWS1"

4.23 HTTPサーバーとしてのCICSの実装

Oracle Tuxedo Application Runtime for CICSでは、HTTPサーバーとしてのCICSがサポートされています。HTTPクライアントは、HTTPを介してOracle Tuxedo Application Runtime for CICSプログラムをコールできます。この機能を実装するには、次のようにします。

4.23.1 SALTでのRESTインバウンド・サービスの定義

Tuxedo SALTデプロイメント・ファイルで、HTTPクライアントに公開するRESTインバウンド・サービスを構成します。("Method"要素の) "inputbuffer"を"CARRAY"に設定し、"enableCustomHTTPHeaders"および"enableHTTPRequestLine"プロパティを指定してWEB WRITE/READ HTTPHEADERWEB EXTRACT HTTPMETHOD /QUERYSTRING/...などのサポートを有効にする必要があります。次のリストに例を示します。

また、WSDFおよびMetadata構成など、その他必要なTuxedo SALT構成を定義してロードする必要があります。詳細は、「SALTデプロイメント・ファイル・リファレンス」を参照してください。

リスト4-73 SALTでのRESTインバウンド・サービスの定義の例

<GWInstance id="GWWS1">
<Inbound>
<HTTP>
<Network http="demobox:8080"/>
<Service name="ARTCICS/DEMOS/TOUPSVR">
<Method name="POST" service="KIXR_TOUPSVR" inputbuffer="CARRAY"/>
</Service>
</HTTP>
</Inbound>
<Properties>
<Property name="enableMultiEncoding" value="true"/>
<Property name="enableCustomHTTPHeaders" value="true"/>
<Property name="enableHTTPRequestLine" value="true"/>
</Properties>
</GWInstance>

4.23.2 UBBCONFIGの変更

ユーザーWeb認識プログラムを実行するようにARTDPLを構成し、Tuxedo SALTのUBBCONFIGTMMETADATAおよびGWWSを構成します。例:

リスト4-74 UBBCONFIGの変更例

ARTDPL
SRVGRP=GRP02
SRVID=60
MIN=1 MAX=1
CLOPT="-o /home/demo/restsvr/LOGS/sysout/stdout_dpl -e /home/demo/restsvr/LOGS/sysout/stderr_dpl -r -- -s KIXR -l SIMPAPP"
……
TMMETADATA SRVGRP=GROUP2 SRVID=2 CLOPT="-A -- -f artcics.repos"
GWWS SRVGRP=GROUP2 SRVID=3 CLOPT="-A -r -- -iGWWS1"

4.24 ART for CICSアプリケーション・サーバーのカスタマイズ済コールバック・サポートの実装

Oracle Tuxedo Application Runtime for CICSでは、カスタマイズ済の関数をサーバー起動時にロードし、サーバー終了時にその関数をアンロードすることによって、1つ以上のART for CICSアプリケーション・サーバーを拡張できます。この機能を実装するには、次のようにします。

  • 共有ライブラリlibkixcallback.soの作成
  • 動的なロードのためのカスタマイズ済Cライブラリのインクルード

    この機能を実装する典型的なユースケースがいくつかあります。

  • ユースケース1: サーバー起動時に共有メモリーを作成
  • ユースケース2: サーバー起動時にデータベース表を開く

ノート:

この機能をサポートしているART for CICSアプリケーション・サーバーは、ARTSTR1/NARTATR1/NARTCTR1/NARTWTR1/NARTDPLおよびARTDPL_XNのみです

4.24.1 共有ライブラリlibkixcallback.soの作成

libkixcallback.soという共有ライブラリを必ず1つだけ作成し、その共有ライブラリで次の2つのコールバック関数を宣言する必要があります。

ノート:

多くのアプリケーション・サーバーを拡張できますが、コールバック関数はすべて同じ共有ライブラリに置く必要があります。

この共有ライブラリは、CICS Runtime製品がインストールされているディレクトリの下に置くことをお薦めします。(このディレクトリの宣言には、環境変数$KIXDIRが使用されます。通常は、$KIXDIR/libディレクトリです。)これを行ったら、Oracle Tuxedo Application Runtime for CICSが更新中または移行中の場合には、このディレクトリからこの共有ライブラリを削除しないでください。

Oracle Tuxedo Application Runtime for CICSには、artkixcallback.hというユーザー・ヘッダーが用意されており(ディレクトリ$KIXDIR/includeに発行されます)、共有ライブラリの開発に便利です。ヘッダー・ファイル内部、次の列挙を定義します。

リスト4-75 ユーザー・ヘッダー・ファイルartkixcallback.h

typedef enum artkix_svrtype
{
e_ARTKIX_STR1, // for Synchronous Transaction server type
e_ARTKIX_STRN,
e_ARTKIX_ATR1, // this is for Asynchronous Transaction servers type
e_ARTKIX_ATRN,
e_ARTKIX_CTR1, // for Converse Management server type
e_ARTKIX_CTRN,
e_ARTKIX_WTR1, // for Non-3270s Terminal server type
e_ARTKIX_WTRN,
e_ARTKIX_DPL // for Distributed Program Link server type
} ARTKIX_SVRTYPE;
4.24.1.1 int ARTKIX__svrinit_callback(ARTKIX_SRVINIT_PARA*) (サーバー起動時)

ART for CICSアプリケーション・サーバーは、起動時に次の関数を呼び出します。

Input: input引数は、次の構造体へのポインタです。

リスト4-76 構造体
typedef struct artkix_svrinfo_t
{
long tux_svr_grpno;
/* this is the server's group id. */
long tux_svr_id;
/* this is the server's id. */
char kix_applid[8];
/* this is the server's applid. */
char kix_sysid[4];
/* this is the server's sysid. */
ARTKIX_SVRTYPE kix_svrtype;
/* this is the server's type. */
int tux_svr_argc;
const char ** tux_svr_argv;
/* these are command line options to be passed to server when it is activated. */
} ARTKIX_SRVINIT_PARA;

出力: なし

リターン・コード: 起動に成功するとゼロを返します。失敗した場合はゼロ以外を返します(この場合、サーバーは起動できません)。

4.24.1.2 void ARTKIX__svrdone_callback() (サーバー停止時)

ART for CICSアプリケーション・サーバーは、停止時に次の関数を呼び出します。

入力: なし

出力: なし

リターン・コード: なし

4.24.2 動的なロードのためのカスタマイズ済Cライブラリのインクルード

Linux/Solarisの場合は、$LD_LIBRARY_PATHにカスタマイズ済Cライブラリをインクルードします(AIXの場合は$LIBPATH)。このライブラリは、実行時に動的にロードされます。

ART for CICSアプリケーション・サーバーがカスタマイズ済の共有ライブラリを前述のパスで見つけられない場合、この機能は無効になりますが、サーバーは正常に起動します。

4.24.3 ユースケース1: サーバー起動時に共有メモリーを作成

ARTDPLサーバーの起動時に使用される共有メモリーを作成する場合は、libkixcallback.soという名前で共有ライブラリを作成する必要があります。これは、2つのコールバック関数をエクスポートし、$KIXDIR/lib/ディレクトリにある拡張共有ライブラリを置き換えます。詳細は、「共有ライブラリlibkixcallback.soの作成」を参照してください。

ARTDPLサーバーを起動すると、まず$KIXDIR/libの下にあるこの拡張共有ライブラリが検索されます。見つからなければ、Linux/Solarisの場合は$LD_LIBRARY_PATH (AIXの場合は$LIBPATH)の検索を続行します。この共有ライブラリが見つかると、ARTDPLサーバーでロードされます。

このサーバー起動時に、共有ライブラリを作成できます。関数が失敗した場合は、ゼロ以外が返されてARTDPLサーバーが起動に失敗します。成功した場合は、ゼロが返されてARTDPLサーバーが通常どおりに起動します。

4.24.4 ユースケース2: サーバー起動時にデータベース表を開く

ARTDPLサーバーの起動時に、Linuxプラットフォームでデータベース表の一部を開きたい場合は、libkixcallback.soという名前の共有ライブラリを作成します。それによって2つのコールバック関数がエクスポートされ、このC共有ライブラリのパス名が$LD_LIBRARY_PATH環境変数に含まれていることが確認されます。詳細は、「共有ライブラリlibkixcallback.soの作成」を参照してください。

ARTDPLサーバーを起動すると、まず$KIXDIR/libの下にあるこのカスタマイズ済共有ライブラリが検索されます。見つからなければ、$LD_LIBRARY_PATHの検索を続行します。この共有ライブラリが見つかると、ARTDPLサーバーでロードされます。

共有ライブラリを開始するとき、データベース表を開くことができます。関数が失敗した場合は、ゼロ以外が返されてARTDPLサーバーが起動に失敗します。成功した場合は、ゼロが返されてARTDPLサーバーが通常どおりに起動します。

4.25 リソースベースの認可の実装

ART for CICSにはセキュリティ・フレームワークが用意されているため、顧客は外部セキュリティ・マネージャとの統合を選択できます。このフレームワークを使用すると、トランザクションでリソースにアクセスする際、ART for CICSで認可チェックが実行されます。たとえば、CICS WRITEQ TSコマンドを発行すると、まずTSキューへの書込み権限があるかどうかがART for CICSによって外部セキュリティ・マネージャに確認されます。

リソースベースの認可を有効にするには、次のようにします。

  • 環境変数KIX_RESSECAまたはYに設定します
    • KIX_RESSEC=A: トランザクションでリソースにアクセスする際、リソースベースの認可が実行されます。これはすべてのトランザクションに適用されます。
    • KIX_RESSEC=Y: トランザクションでリソースにアクセスする際、リソースベースの認可が実行されます。これは、transactions.descRESSEC=Yが指定されたトランザクションにのみ適用されます。

    詳細は、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』のKIX_RESSECに関する項を参照してください。

  • KIX_RESSEC=Yを設定する場合、transactions.descでリソースベースの認可をチェックするトランザクションに対してRESSEC=Yを構成します。

    詳細は、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』のトランザクション構成ファイルに関する項を参照してください。

  • デフォルト認可関数をカスタマイズした関数に置き換えます。

    ART for CICSには、CheckResourceAuth.gntという名前のデフォルトの認可関数があります(ART for CICSインストール・ディレクトリ)。外部ESMと統合するには、デフォルトのCheckResourceAuth.gntをカスタマイズした関数に置き換える必要があります。

    関数インタフェースは、「外部セキュリティ・マネージャとの統合」にリストされています。

  • UBBCONFIGでTuxedoセキュリティを有効にします。

    Tuxedoセキュリティを有効にします。たとえば、UBBCONFIGXAUTHSVRを構成し、LDAPベースの認証および認可を有効にします。

    詳細は、『Oracle Tuxedoファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』のXAUTHSVR(5)に関する項を参照してください

リスト4-77 UBBCONFIGでのTuxedoセキュリティの有効化

*RESOURCES
SECURITY ACL
AUTHSVC "..AUTHSVC"
OPTIONS EXT_AA, EXT_MON
 
*GROUPS
AUTHGRP
GRPNO=25
*SERVERS
XAUTHSVR SRVGRP=AUTHGRP
SRVID=5
MIN=1 MAX=1
CLOPT="-A -- -n /opt/oracle/CICS_RT/atnldap -z /opt/oracle/CICS_RT/atzldap"

4.26 CICSランタイムでのCOBOLプログラム・デバッグの実装

CICSランタイムでCOBOLプログラムのデバッグを実装する代表的なユースケースがいくつかあります。

1つのトランザクション内でXCTLまたはLINK (ローカル)も発行できます。

詳細は、「CICSランタイムでのCOBOLプログラムのデバッグおよびエラー処理」および『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』の「デバッグ構成ファイル」を参照してください。

次の各項では、各ユースケースについて詳しく説明します。

4.26.1 ユースケース1: 2人のユーザーが2つのCOBOLプログラムをそれぞれデバッグします。

ART for CICSユーザーAがCOBOL Program1をデバッグし、ART for CICSユーザーBがCOBOL Program2をデバッグする場合、2人のユーザーは次のようにする必要があります。

  1. COBOLデバッグ情報をkix_cobol_dbg.cfg構成ファイルに追加します。

    myAnimSrvID1;;;;; Program1

    myAnimSrvID2;;;;; Program2

  2. animコマンドラインを入力します。
    • ユーザーAは、自分のターミナルから次のコマンドラインを入力します。

      anim %XmyAnimSrvID1

    • ユーザーBは、自分のターミナルから次のコマンドラインを入力します。

      anim %XmyAnimSrvID2

  3. ユーザーAおよびBは、animユーティリティを起動したLinuxアカウントと同じアカウントで独自のART for CICSアプリケーション・サーバーを起動するか、ART for CICSサーバーを再起動せずにデバッグ構成リソース・ファイルを動的に変更します。

    ノート:

    ART for CICSサーバーを起動するLinuxユーザー・アカウントは、animコマンドラインを実行するLinuxユーザー・アカウントと同じである必要があります。animユーティリティで指定されるANIMSRVIDのみがデバッグされます。

4.26.2 ユースケース2: 1人のユーザーが1つのトランザクション内の2つのCOBOLプログラムをデバッグします。

1人のART for CICSユーザーが1つのトランザクション内の2つの異なるCOBOLプログラムをデバッグする(たとえば、ART for CICSユーザーがCOBOL Program1とCOBOL Program2をデバッグし、両方のプログラムが同一トランザクションにある)場合、次のようにします。

  1. COBOLデバッグ情報をkix_cobol_dbg.cfg構成ファイルに追加します。

    myAnimSrvID1;;;;transaction1;

  2. 次のコマンドラインを1つのターミナルで入力すると、両方のプログラムをデバッグできます。

    anim %XmyAnimSrvID1

4.26.3 ユースケース3: 1人のユーザーが2つのプログラムをSTART TRANSIDでデバッグします。

1人のART for CICSユーザーが2つの異なるCOBOLプログラムをSTART TRANSIDコマンドでデバッグする場合、次のようにします。

  1. COBOLデバッグ情報をkix_cobol_dbg.cfg構成ファイルに追加します。

    myAnimSrvID1;;;;; program1

    myAnimSrvID2;;;;; program2

  2. 次のコマンドラインをそれぞれ別のターミナルで入力します。

    anim %XmyAnimSrvID1

    anim %XmyAnimSrvID2

    これらの2つのプログラムがART for CICSアプリケーション・サーバーによって起動されると、ユーザーは2つのプログラムをそれぞれ別のターミナルでデバッグできます。

4.26.4 ユースケース4: 1人のユーザーが2つのプログラムをLINK(リモート)でデバッグします。

1人のART for CICSユーザーが2つの異なるCOBOLプログラムをLINKコマンドでデバッグする場合、次のようにします。

  1. 次のCOBOLデバッグ情報をkix_cobol_dbg.cfg構成ファイルに追加します。

    anim %XmyAnimSrvID1

    anim %XmyAnimSrvID2

  2. 次のコマンドラインをそれぞれ別のターミナルで入力します。

2つのプログラムがART for CICSアプリケーション・サーバーによって起動されると、ユーザーは2つのプログラムをそれぞれ別のターミナルでデバッグできます。

4.27 CICSランタイム・ログ

この章の内容は次のとおりです。

4.27.1 Tuxedoシステム・ログ

他のTuxedoアプリケーションと同様に、CICS Runtimeは、専用のシステム・ログに特定のイベントと問題を記録するTuxedoによって管理されます。

このログは、名前がTuxedo ubbconfigファイルのシステム変数ULOGPFXに含まれる標準Tuxedoユーザー・ログ(ULOG)です。

例:

ULOGPFX="/home2/work9/demo/Logs/TUX/log/ULOG"

4.28 CICSランタイム・サーバー・ログ

Tuxedo ubbconfigファイルでサービスを宣言する場合、各サーバーでは、CLOPTオプションが次の2つのファイルを含むように定義されています。

  • -oオプション: stdout(通常のメッセージ)

    このファイルの名前はstdout_<server name>で、ART接頭辞はありません。

    たとえば: ARTSTRNサーバーには、stdout_strnという名前の標準出力があります。

  • -e オプション: stderr(エラー・メッセージ)

    このファイルの名前はstderr_<server name>で、ART接頭辞はありません。

    たとえば: ARTSTRNサーバーには、stderr_strnという名前のエラー出力があります。

各CICSランタイム・サーバー用の異なるstdoutとstderrメッセージ・ファイルは、次のとおりです。

表4-11 サーバー別メッセージ・ファイル

サーバー名 -o標準出力ファイル -e標準エラー・ファイル
ARTTCPL stdout_tcp stderr_tcp
ARTCNX stdout_cnx stderr_cnx
ARTSTRN stdout_strn stderr_strn
ARTSTR1 stdout_str1 stderr_str1
ARTATRN stdout_atrn stderr_atrn
ARTATR1 stdout_atr1 stderr_atr1
ARTTSQ stdout_tsq stderr_tsq
ARTDPL stdout_dpl stderr_dpl

ノート:

サーバーのstderrファイルには、マウントされているすべての構成ファイルが記述されます。stderrファイルには、サーバーがブートされるときに発生した問題に関するエラー・メッセージだけでなく、ロードされている様々なリソースに関する情報も含まれています。具体的には、次の情報があります。
  • 各CICSランタイム・サーバーの-l listパラメータに応じてインストールされたリソースのグループ。
  • 正常にインストールされ、各.desc構成ファイルの指定に応じて使用可能なリソース(インストールされていても使用できないリソースもあります)。

リスト4-78 起動直後のARTSTRNサーバーのstdout_strnの例

Groups loaded: <0001>
|----------|
| GROUP |
|----------|
|SIMPAPP |
|----------|
ARTSTRN: Read config done
|---------------------------------------------------|
| TRANCLASS loaded : < 2> |
|---------------------------------------------------|
| TRANCLASS | GROUP |MAXACTIVE|
|------------------------------|----------|---------|
|TRCLASS1 |SIMPAPP | 001|
|TRCLASS2 |SIMPAPP | 002|
|---------------------------------------------------|
|--------------------------------------------------|
| PROGRAMS loaded : < 4> |
|------------------------------------------------------------------|
| PROGRAM | GROUP |LANGUAGE|EXEC| STATUS |
| | | |KEY | |
|------------------------------|----------|--------|----|----------|
|RSSAT000 |SIMPAPP |COBOL |USER|ENABLED |
|RSSAT001 |SIMPAPP |COBOL |USER|ENABLED |
|RSSAT002 |SIMPAPP |COBOL |USER|ENABLED |
|RSSAT003 |SIMPAPP |COBOL |USER|ENABLED |
|------------------------------------------------------------------|
|---------------------------------|
| TRANSACTIONS loaded : < 4> |
|----------------------------------------------|----|-|-|---|-|-|----------|-----|-|--------|-----|---|
| | | | |C|C| |R|R| | |T| | | |
|TRAN| GROUP | PROGRAM |ALIA|M|O|PRI|E|E| STATUS |TASK |R| TRAN | TWA |MAX|
| | | | |D|N| |S|S| |DATA |A| CLASS | SIZ |ACT|
| | | | |S|F| |S|T| |KEY |C| | |IVE|
|----|----------|------------------------------|----|-|-|---|-|-|----------|-----|-|--------|-----|---|
|SA00|SIMPAPP |RSSAT000 | |N|N|001|N|N|ENABLED |USER |Y| |00000|999|
|SA01|SIMPAPP |RSSAT001 | |N|N|001|N|N|ENABLED |USER |Y| |00000|999|
|SA02|SIMPAPP |RSSAT002 | |N|N|001|N|N|ENABLED |USER |Y| |00000|999|
|SA03|SIMPAPP |RSSAT003 | |N|N|001|N|N|ENABLED |USER |Y| |00000|999|
|-----------------------------------------------------------------------------------------------------|
Warning: zero TSQMODEL loaded!!
FILES<FILE> lineNo(1) skipping Record: Group not to load
FILES<FIC3> lineNo(4) skipping Record: Group not to load

この例では次の点に注意してください。

  • -lオプションで、1つのグループ(SIMPAPP)が選択されています
  • transactions、tranclasses、programsおよびtsqmodelsの、4つの構成ファイルが使用されています。
  • これらのリソースのロード成功に関する情報(警告: ゼロ個のTSQMODELがロードされました)。
  • .descファイルでは、ロードされたリソースの詳細、その明示的な特性(名前、グループ、説明など)、さらにデフォルト/暗黙の値ですら使用されていますが、空白が記入されたフィールドが残っています。

4.29 プログラムの無効化と有効化

場合により、システムに大幅に影響を与えるプログラムで問題が発生し、エンド・ユーザーによる実行を禁止することによって、プログラムを緊急に除去する必要があります。当面のところ、これは一時的にシステムを安定させる助けになり、機能障害を解析および解決するための時間を提供します。

z/OS上と同様に、CICS Runtimeではプログラムを無効にすることができます。プログラムは無効にするには、CICS Runtime構成ファイルprograms.descを変更します。このファイルには専用のフィールド(STATUSフィールド)があり、プログラムがDISABLEDかENABLED(デフォルトのステータス)かを示します。

『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』のCICSリソース情報の動的管理に関する項も参照してください

4.29.1 プログラムの無効化

トランザクションを有効から無効に切り替えるには、このcsvファイルの7番目のフィールドを変更し、以前の値を、暗黙的(「 」空白)または明示的なENABLEDステータスから、明示的なDISABLEDステータスに変更する必要があります。

CICS Runtime Tuxedoサーバーをシャットダウンしてブートすると、1つ以上のプログラムの変更が有効になります。

プログラムを無効にする場合、それを使用する人がいると、アプリケーションがCICSエラーを処理する方法に応じて、エラー・メッセージが表示されます。

リスト4-79 programs.descでDISABLEDに設定されたサンプルSimple Application SA02 COBOLプログラム

#PROGRAM;GROUP;DESCRIPTION;LANGUAGE; ; ;STATUS
RSSAT000;SIMPAPP; Home Menu Program of the Simple Application ;COBOL
RSSAT001;SIMPAPP; Customer Detailed Information Program of the Simple Application ;COBOL; ; ;ENABLED;
RSSAT002;SIMPAPP; Customer Maintenance Program of the Simple Application;COBOL; ; ;DISABLED;
RSSAT003;SIMPAPP; Customer List of the Simple Application ;COBOL

4.29.2 プログラムの有効化

プログラムを有効化するために必要なのは、反対の操作をすることだけであり、STATUSフィールドをDISABLEDからENABLED、または「 」(少なくとも1つのスペース)に変更します。

CICS Runtime Tuxedoサーバーを停止して再起動すると、1つ以上のプログラムの変更が有効になります。

4.29.3 プログラム・ステータスの変更チェック

異なるトランザクション・サーバーまたはCICS Runtimeのログを確認すると、stderr_*ログで、変更されたステータスの変更に気づきます。

このサーバーの起動直後のログは、このプログラムが無効にされていることを(斜体で)示しています。

リスト4-80 プログラム・ステータスを示すログ・レポート

Groups loaded: <0001>
|----------|
| GROUP |
|----------|
|SIMPAPP |
|----------|
ARTSTRN: Read config done
|---------------------------------------------------|
| TRANCLASS loaded : < 2> |
|---------------------------------------------------|
| TRANCLASS | GROUP |MAXACTIVE|
|------------------------------|----------|---------|
|TRCLASS1 |SIMPAPP | 001|
|TRCLASS2 |SIMPAPP | 002|
|---------------------------------------------------|
|--------------------------------------------------|
| PROGRAMS loaded : < 4> |
|------------------------------------------------------------------|
| PROGRAM | GROUP |LANGUAGE|EXEC| STATUS |
| | | |KEY | |
|------------------------------|----------|--------|----|----------|
|RSSAT000 |SIMPAPP |COBOL |USER|ENABLED |
|RSSAT001 |SIMPAPP |COBOL |USER|ENABLED |
|RSSAT002 |SIMPAPP |COBOL |USER|DISABLED |
|RSSAT003 |SIMPAPP |COBOL |USER|ENABLED |
|------------------------------------------------------------------|
|---------------------------------|
| TRANSACTIONS loaded : < 4> |
|----------------------------------------------|----|-|-|---|-|-|----------|-----|-|--------|-----|---|
| | | | |C|C| |R|R| | |T| | | |
|TRAN| GROUP | PROGRAM |ALIA|M|O|PRI|E|E| STATUS |TASK |R| TRAN | TWA |MAX|
| | | | |D|N| |S|S| |DATA |A| CLASS | SIZ |ACT|
| | | | |S|F| |S|T| |KEY |C| | |IVE|
|----|----------|------------------------------|----|-|-|---|-|-|----------|-----|-|--------|-----|---|
|SA00|SIMPAPP |RSSAT000 | |N|N|001|N|N|ENABLED |USER |Y| |00000|999|
|SA01|SIMPAPP |RSSAT001 | |N|N|001|N|N|ENABLED |USER |Y| |00000|999|
|SA02|SIMPAPP |RSSAT002 | |N|N|001|N|N| ENABLED |USER |Y| |00000|999|
|SA03|SIMPAPP |RSSAT003 | |N|N|001|N|N|ENABLED |USER |Y| |00000|999|
|-----------------------------------------------------------------------------------------------------|
Warning: zero TSQMODEL loaded!!

4.29.4 CICS Runtime用のアプリケーションの削除と追加

場合により、アプリケーションのすべてのコンポーネントを、特定のマシンから完全に削除するか、別のマシンに移動したいことがあります。アプリケーションで使用するすべてのリソースが、そのアプリケーション専用の1つ以上のリソース・グループで定義されている場合、CICS Runtimeでこれらのグループを抑制し、最終的に別の場所にインストールするだけで十分です。

各CICS Runtime Tuxedoサーバーは、CLOPTオプションの-lパラメータの後に含まれる、起動時に選択およびインストールされるグループのリストを読み取ります。アプリケーションに対してグループを削除または追加するには、各CICS Runtime Tuxedoサーバーに対して、このリストからグループを削除または追加すれば十分です。

1つ以上のプログラムでの変更は、CICS Runtime Tuxedoサーバーを停止して再起動すると有効になります。

リスト4-81 ARTSTRNサーバーにおけるアプリケーションの例
ARTSTRN SRVGRP=GRP02
SRVID=20
CONV=Y
MIN=1 MAX=1 RQADDR=QKIX110 REPLYQ=Y
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_strn
-e /home2/work9/demo/Logs/TUX/sysout/stderr_strn -r -- -
s KIXR -l SIMPAPP"

1つ以上のグループを追加する場合、以前に定義されたグループに対し、新しいグループを「:」文字で区切って連結する必要があります。

リスト4-82 ARTSTRNサーバーでgroup1とgroup2を追加する例
ARTSTRN SRVGRP=GRP02
SRVID=20
CONV=Y
MIN=1 MAX=1 RQADDR=QKIX110 REPLYQ=Y
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_strn
-e /home2/work9/demo/Logs/TUX/sysout/stderr_strn -r -- -
s KIXR -l SIMPAPP:GROUP1:GROUP2"

リスト4-83 ARTSTRNサーバーでgroup1を削除する例

ARTSTRN SRVGRP=GRP02
SRVID=20
CONV=Y
MIN=1 MAX=1 RQADDR=QKIX110 REPLYQ=Y
CLOPT="-o /home2/work9/demo/Logs/TUX/sysout/stdout_strn
-e /home2/work9/demo/Logs/TUX/sysout/stderr_strn -r -- -
s KIXR -l SIMPAPP:GROUP2"

ノート:

  • グループが削除されても、これらのグループのすべてのリソースは、論理的に抑制されているだけです。物理的にも抑制する場合、CICSランタイム・リソース構成ファイルで、グループ名を含んでいるすべての行を削除する必要があります。
  • グループが追加される場合、このグループのすべてのリソースが、異なるCICSランタイム・リソース構成ファイルの、そのグループ名配下に存在する必要があります。将来の問題を避けるために、他アプリケーションのグループ内ですでに宣言されているため、グループ内でリソースを省略または宣言しないでください。
  • グループを追加または削除する場合、各CICSランタイム・サーバーで、同じグループのリストを示すように注意します。

4.30 CICS RuntimeのCプログラム・サポート

ART CICSでは、CICSアプリケーションをC言語で実装して実行できます。

4.30.1 CICS RuntimeでのCプログラムの実行

各CプログラムはCOBOLプログラムとしてロードされ、COBOLランタイムで実行されるため、CICS Cプログラム・サポートは、COBOL製品に依存します。

4.30.2 Cプログラミングの制限と要件

ART CICSにおけるCICS/Cサポートの制約と要件を、次にリストします。

  • 非構造化例外処理に関連するEXEC CICSコマンドはサポートされません。これには、次のコマンドが含まれます。
    • HANDLE ABEND
    • HANDLE AID
    • HANDLE CONDITION
    • IGNORE CONDITION
    • PUSH HANDLE
    • POP HANDLE
  • Cアプリケーションでは、すべてのEXEC CICSコマンドは、NOHANDLEまたはRESPオプションが指定されているものとして処理されます。
  • Cアプリケーションでは、すべてのEXEC CICSコマンドは、NOHANDLEまたはRESPオプションが指定されているものとして処理されます。
  • Linuxでは、ファイル名と語は大文字と小文字が区別されます。Cソース・ファイルでヘッダー・ファイル名が小文字で指定されていて、ファイル・システムではこの名前が大文字で指定されている場合、コンパイル時にエラーが発生します。
  • パック10進数データはサポートされません。
  • マクロ内でのCICSコマンドの使用はサポートされません。
  • 大文字と小文字が混在するCICSキーワードがサポートされます。
  • CICSで固定長の文字列が想定される場合(プログラム名、マップ名、キュー名など)、文字列の長さが想定される長さより短い場合は、必要な長さになるまで空白を追加する必要があります。
  • フィールド名で変数を定義しないように注意してください。このような操作を行うと、Cコンパイラが異常終了します。
  • /**/を使用して単一行のコメントを表します。EXEC CICSコマンドの中央にコメントを置かないでください。
  • ART CICSでは、argcargvおよびenvpはサポートされません
  • ART CICSでは、2つの方法でCOMMAREAにアクセスできます。
    • ADDRESS COMMAREA
    • ART CICSプリプロセッサが自動的に宣言するexternグローバル・ポインタ__commptrを指定します。__commptrはシステムによる予約済で、ユーザーは他の用途で定義できません。
  • ART CICSでは、2つの方法でEIBにアクセスできます。
    • ADDRESS EIB
    • ART CICSプリプロセッサが自動的に宣言するexternグローバル・ポインタ__eibptrを指定します。__eibptrはシステムによる予約済で、ユーザーは他の用途で定義できません。
  • EIB宣言は#ifndef行と#endif行で囲まれていますが、すべての変換済ファイルに含まれるわけではありません。ART CICSは、EIB内のすべてのフィールド定義を含めるために、ヘッダー・ファイルdfheiblk.hを公開しています。変換された各ファイルはこのヘッダー・ファイルをインクルードすることのみ必要であり、すべての処理はプリプロセッサによって自動的に実行されます。
  • BMS画面属性定義: CバージョンのDFHBMSCAファイルおよびDFHAIDファイルがCICSによって提供されており、BMSの使用時にはアプリケーション・プログラマによってインクルードされる可能性があります。
  • C標準ライブラリの文字列処理関数では、終端文字マーカーとしてNULL文字を使用します。CICSではNULLを終端文字マーカーとして認識しないため、CICSデータ・エリアを操作するstrcmpなど、C関数を使用する場合は、その点に注意する必要があります。
  • C標準ライブラリの文字列処理関数では、終端文字マーカーとしてNULL文字を使用します。CICSではNULLを終端文字マーカーとして認識しないため、CICSデータ・エリアを操作するstrcmpなど、C関数を使用する場合は、その点に注意する必要があります。
  • ART CICSには、cics.hで宣言されるiscics()も用意されていますが、ユーザーはmakefileを変更してヘッダー・ファイル・パスをインクルードすることのみ必要です。
  • EXEC CICSは全体を1行で指定します。
  • 1行に複数のCICSコマンドを指定することはサポートされません。
  • #pragmaは自動的にコメントに変換されます。
  • C関数のexit()はreturnに変換されます。
  • C関数のmain()、そのパラメータ・リストおよびカッコは1行で指定します。例:

    void main(int argc, char **argv)

  • COMMAREAはポインタである必要があります。ART CICSでは、構造体の指定は、値ではなくポインタのみがサポートされます。

4.30.3 CからEIBへのアクセス

EXECインタフェース・ブロック(EIB)のアドレスは、引数としてC main関数に渡されません。しかし、ユーザーは次の2つの方法を使用して、EIBのアドレスを取得できます。

  • ADDRESS EIBの使用
  • EIBを指すグローバル・ポインタ__eibptrの使用

4.30.4 CからCOMMAREAへのアクセス

COMMAREAのアドレスは、引数としてC main関数に渡されません。しかし、ユーザーは次の2つの方法を使用して、COMMAREAのアドレスを取得できます。
  • ADDRESS COMMAREAの使用
  • COMMAREAを指すグローバル・ポインタ__commptrの使用

4.30.5 CICSコマンド・トランスレータ

ART CICSには、CICS/COBOL API変換用のprepro-cics-C.plがあります。prepro-cics-C.plの詳細は、prepro-cics-C.plに関する項を参照してください。

4.30.6 Cプログラムのコンパイル

CプログラムをCOBOLランタイムで確実にロードするためには、gcc/g++ではなくCOBOLコンパイラを使用してCプログラムをビルドしてください。

cobを使用して、Cソース・コードを呼出し可能な共有オブジェクトとしてコンパイルします。動的ライブラリには、Cソース・ファイル名と同じ名前で大文字の名前が必要です。

例:
CPYINC=../includes
cob -z,CC zample_treated.c -o ZAMPLE.so -CC -I${CPYINC}