ユーザー・ガイド

     前  次    新規ウィンドウで目次を開く  新規ウィンドウで索引を開く  PDFとして表示 - 新規ウィンドウ  Adobe Readerを入手 - 新規ウィンドウ
コンテンツはここから始まります

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

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

 


z/OS Simple Applicationの紹介

概要

このアプリケーションは、もともと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は、作成、変更および削除のような一連の古典的な機能を使用して企業の顧客を管理します。

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

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

マップセット

表4-1 Simple Applicationのマップセット
名前
説明
RSSAM00
顧客保守エントリ・メニュー
RSSAM01
顧客データ問合せ画面
RSSAM02
顧客データ保守画面(顧客の作成、更新および削除)
RSSAM03
顧客リスト画面

プログラム

表4-2 Simple Applicationプログラム
名前
説明
RSSAT000
顧客保守エントリ・プログラム
RSSAT001
顧客データ問合せプログラム
RSSAT002
顧客データ保守プログラム(新規顧客、顧客更新および顧客削除)
RSSAT003
顧客リスト・プログラム

トランザクション・コード

表4-3 Simple Applicationのトランザクション・コード
名前
説明
SA00
メイン・エントリ・トランザクション・コード(プログラムRSSAT000)
SA01
顧客問合せ(プログラムRSSAT001)
SA02
顧客保守(プログラムRSSAT002)
SA03
顧客リスト(プログラムRSSAT003)

VSAMファイル

表4-4 Simple Application VSAMファイル
DDName
DataSetName
説明
ODCSF0
PJ01AAA.SS.VSAM.CUSTOMER
VSAM主要顧客ファイル

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

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

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

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

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

COBOLプログラム・ファイル

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

マップセット・ファイル

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

CICS Runtimeの構成

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

これらのリソースを構成する手順:

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

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

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

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

注: これらの構成ファイルでは、「#」で始まる行はコメントとみなされ、CICS Runtimeによって処理されません

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

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であることを意味します。

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変数を受け入れないため、このファイルには完全に展開したパスを指定する必要があります。

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プログラムからこのファイルにアクセスするために認識されている唯一のファイル名でもあります。
ISAM移行済ファイルを宣言する手順:
  1. 以前に定義されたプログラムで使用されたすべてのVSAM/ISAMファイルを記述する新しい変数が存在しなければ追加して、Tuxedo envfileを変更します。
  2. このSimple Applicationの例では、次の行を入力する必要があります(説明を簡単にするため、ファイルの場所をubbconfig、envfileおよびtuxconfigファイルと同じ場所に指定しましたが、これは必須でありません)。

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

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

リスト4-4 Simple ApplicationのISAMファイル宣言
#DDname;Accessor;DSNOrganization;Format;MaxRecordLength;KeyStart;KeyLength
ODCSF0;ASG_ ODCSF0;I;F;266;1;6

ここで:

ODCSF0

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

RM_ODCSF0

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

I

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

F

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

266

最大レコード長。

1

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

6

キー長。

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

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

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

  3. 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 and MAX=1

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

REPLYQ=Y

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

RQADDR=QCNX015

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

CLOPT

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

-o

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

-e

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

-r

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

-s KIXR

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

-l SIMAPP

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

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実行可能ファイルの名前。

 


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

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
#

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
#

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. 図4-1 Simple Applicationトランザクション・コード入力


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

  5. アプリケーションのメイン・メニューが表示されます。
  6. 図4-2 Simple Applicationメイン・メニュー


    Simple Applicationメイン・メニュー

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

 


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

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

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

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

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-5

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

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

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

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

 


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

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

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

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

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

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

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

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

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

順次トランザクションの場合の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 and MAX=1

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

CLOPT

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

-o

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

-e

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

-r

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

-s

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

-l SIMAPP

SIMAPPグループのトランザクションだけが選択されることを示します。
注: CICSランタイム・トランザクション・サーバー(ARTSTRN、ARTSTR1、ARTATRNおよびARTATR1)はすべて、同じCICSランタイム・トランザクション・グループ・サーバーを共有しており、ubbconfigサーバー・グループ・セクション(*GROUPS)を変更する必要はありません。

tranclasses.descファイルの変更

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

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

  1. トランザクション・クラスの名前(必須)
  2. CICSランタイム・グループ名(必須)
  3. トランザクション・クラスの短い説明(オプション、少なくとも1つの空白)
  4. RUNを行う同じトランザクションの最大数(MAXACTIVE)。
注: MAXACTIVEパラメータは、バイナリ・スイッチのようなものと理解できます。

例:

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つの最後の定義はオプションです。それらがなくても意味は同じです。

transactions.descファイルの変更

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

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

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

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

変更が済むと、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
注:

ARTSTR1構成の確認

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
#

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
#

 


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

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

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

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

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

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

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

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

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

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

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

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

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

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

 


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

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

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を使用してリクエストを再ディスパッチします。

/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サーバー

Tuxedo /Qの作成

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

  1. スクリプトを使用する前に、UNIX ~./.profileファイル内で、次のものを定義およびエクスポートします。
  1. コマンド行からmkqmconfig.shを実行して、Tuxedo /Q機能を作成します。

Tuxedo /Qキュー管理のためのTuxedo ubbconfigファイルの変更

  1. GQUEUEサーバー・グループを、ubbconfigファイルの*GROUPセクションに追加する必要があります。
  2. リスト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絶対パスを示します。
  1. それから、2台のサーバー、TMQUEUETMQFORWARDを、ubbconfigファイルの*SERVERSセクションに追加する必要があります。
  2. リスト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
#

 


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

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

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

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

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

ここで:

*SERVERS

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

SRVGRP

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

SRVID

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

MIN=1 and 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#

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

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

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

KIX_TS_DIR=${HOME}/trf/KIXTSDIR

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

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

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

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

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

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

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

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

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

  1. スクリプトを使用する前に、UNIX ~./.profileファイルから、次のものを定義およびエクスポートします。
  1. 変数の設定が完了したら、crtstable_Oracleスクリプトを実行します。
  2. 続いて、Tuxedo ubbconfigファイルを変更して、*GROUPSセクションでOracleへの接続を確立するためにARTTSQによって使用されるサーバー・グループを変更します。
  3. リスト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に送信します。
  1. Tuxedo psrおよびpscコマンドを使用して、Oracleが使用できることを確認します。3台の新しいサーバーと3つの新しいサービスが示されるはずです。
  2. リスト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
    #

 


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

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

一時データ管理

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

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

以下のことができます。

注: このドキュメントでは、特別にイントラパーティションTDキューに集中します。

イントラパーティション一時データ・キュー

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

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

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

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

回復不能

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

物理的にリカバリ可能

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

論理的にリカバリ可能

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

自動的トランザクションの初期化(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コマンドは新しいタスクをトリガーしません。

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

Tuxedo /Q

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

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

アーキテクチャ設計

表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フラグを追加することにより実行されます。

トリガー

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

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

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

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

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

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と一致する必要があります。

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)および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"

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 -t TRIDに設定する必要があります。TRIDはリソース構成のTRANSIDと一致する必要があるトリガーのトランザクションのトランザクション識別子です。

ヒント: ATRサーバーはATIを処理するとき、トランザクションがQZEROに到達したかどうか、また成功したかロールバックしたかどうかを認識します。QZEROに到達しない場合、ソース・プラットフォームと同じ方法でトランザクションを再発行します。
しかし、今では再試行回数が、ATIFACILITYパラメータに取ってかわり、ロールバックされたTDキュー・レコードが再発行されるかどうかという事実を制御します。
今では管理者が再発行の数を決定し、エラー・キュー上の障害メッセージを取得できるということは、ソースと比べると進歩です。

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 and MAX=1

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

CLOPT

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

-o

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

-e

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

-r

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

-s KIXR

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

-l SIMAPP

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

 


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

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

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

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

POOLを使って、TSキューを管理するには、次の手順を実行します。

  1. まず、TS QueueとPOOLを含むデータベース表を定義します。CICS Runtimeは現在、OracleデータベースとUDBをサポートしています。
  2. CICS Runtimeには、このような表すべてを作成できるUNIXスクリプト、crtsptable_{Oracle|UDB}が用意されています。これらの表を作成するには、MT_DB_LOGIN環境変数を設定し、crtsptable_{Oracle|UDB}を実行します。MT_DB_LOGINを設定し、データベース接続情報を入力します。このファイルの例は、次のとおりです。DBUSER/DBPASSWD@DBSID。Oracleデータベース・ユーザーの例については、「リスト4-27」を参照してください。

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

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

  1. 環境変数MT_DB_LOGINを設定し、データベース接続情報を入力します。
  2. $KIXDIR/binに進みます。
  3. 次のコマンドを実行します。
  4. ../tools/bind.sh tspool_UDB.bnd
    リスト4-27 ARTTSQPサーバーで使用されるサーバー・グループGRP02に関連するUBBCONFIG構成の例
    *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-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
#

 


Distributed Program Link (DPL)の実装

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

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

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

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

  1. そこで、プログラム内、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

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 and 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
#

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によって公開および管理されていることを確認します。
  4. 注: 同名の問題を避けるために、これらの分散サービスの名前は、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
    # .

切り詰められた値が表示されている場合に、その完全な詳細を参照するには、Tuxedo verboseコマンドを使用します。

リストされているサービスのスコープを、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
#

 


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起動時に固定および定義されます。

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バイトになります。
  3. 例:

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

       KIX_CWA_ IPCKEY=200944
  6. これらの変更を有効にするには、Tuxedoを再起動します。

 


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番目のフィールドで宣言します。
  3. 表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トランザクションに対しては、何も示されません。
  4. CICS Runtime Tuxedoサーバーを再起動すると、トランザクション管理に関係するサーバー(ARTSTRN、ARTSTR1、ARTATRNとARTATR1)の異なるstderrファイルで変更を参照できます。
  5. リスト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|

ARTDPLでのTWAのサポート

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

  1. ARTDPLトランザクションに必要なTWASizeを構成するために、CICS Runtimeのtransactions.descファイルを変更します。
  2. リスト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のような名前を付けることはできません。
  1. CICS Runtime Tuxedoサーバーを再起動すると、ARTDPL stdoutファイルで変更が表示されます。
  2. リスト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|
    |-----------------------------------------------------------------------------------------------------|

 


WebSphere MQとの統合の実装

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

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

ワーク・フロー

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

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

  3. トリガー・メッセージが着信すると、ARTCKTIサーバーはメッセージを取得します。
  4. トリガー・メッセージからトランザクションIDを取得します。
  5. 構造MQTMCからMQTMC2にトリガー・メッセージを転送します。
  6. MQTMCには多くのフィールドがあるため、構造をEXEC CICS START呼出しのパラメータとして送信すると、いつでも複雑になりすぎます。MQTMC2はCKTIで使用され、構造をデータとしてトリガー・モニターのSTARTリクエストに渡します。

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

  9. ユーザー・トランザクションはCICS RETRIEVEによってトリガー・メッセージを取得し、WebSphere MQアプリケーション・キュー上で操作を実行します。
  10. ユーザー・トランザクションがメッセージを取得しないか、起動されたトランザクションが使用できない場合、WebSphere MQは、この条件ではトリガー・メッセージをもう送信しません。WebSphere MQ開始キューが再び開かれるか、新しいトリガー条件が満たされるまで、新しいトリガー・メッセージが発行されます。

    図4-4に、動作を示します。

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


    WebSphere MQトリガー条件

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

コマンドの構成

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

WebSphere MQでART for CICSトランザクションをトリガーする構成

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

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

リスト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に配置されると、再びトリガーされます。

ART for CICSサーバーの再構築

サーバーを再構築する前に、次のことが必要です

ART for CICSトランザクション・サーバーが別のモードを使用してWebSphere MQにアクセスする場合は、次のようにする必要があります。

上のサーバーを再構築した後で、次のことが必要です

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のインストール・パスを示す環境変数です。

TMS_MQMサーバーの再構築

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

buildtms -r MQSeries_XA_RMI -o TMS_MQM

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
注:

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の構成」を参照してください。

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"

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キュー・マネージャ名」を参照してください。

キャラクタ・セットのエンコード

ローカルの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)を追加すれば、プログラムを変更せずにトランスコードを実行できます。

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.

 


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

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

注:

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

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

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

CICS Runtime構成ファイルの構成

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

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

ALST;SIMPAPP;Application list transaction;DFHALST

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

システム構成ファイル

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

[kixr]
APPLID=DBDCkixR
GMTRAN=CESN

UBBCONFIGの構成

複数セッション管理を実行するには、セキュリティを有効にする必要があります。詳細は、『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』「セキュリティ構成」を参照してください。

次のサーバーをUBBCONFIGに構成する必要があります。例は、表4-47を参照してください。

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

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

WebSphere MQトリガー条件

セッションの開始

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

セッションの切替え

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

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

セッションの終了

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

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

 


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

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

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

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

表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()の呼出しはサポートされません。

表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 NAME PIC X(8).
03 TASK 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-5に、設定に関係するCICSランタイム・コマンドおよびソケット呼出しのシーケンスを示します。CICSランタイム・コマンドの先頭にはEXEC CICSが付いています。この図の他の番号付きアイテムはすべてART for CICS TCP/IP呼出しです。

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

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

図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
これで指定したソケットが閉じられ、接続が終了されます。他のアプリケーションのためにソケット・リソースが解放されます。

リスナー呼出しシーケンス

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

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
接続を終了し、完了時にソケット・リソースを解放します。

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

説明

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

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

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

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

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

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

ARTCSKL入力書式

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

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

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

tran

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

client-in-data

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

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

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

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

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

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        */
};

必要な構成

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

 


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

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

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

ARTSRMサーバーの構成

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

環境変数の構成

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

CICS Runtime構成ファイルの宣言

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の詳細は、システム構成ファイルに関する項を参照してください。

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

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

UBBの宣言

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

注: UBBでのDDR構成は必須です。DDRは、FMLフィールドCX_APPLIDにより、異なるCICSリージョン内のARTCNXにログイン・リクエストをルーティングします。
注: ROUTING RANGESで構成されるAPPLIDは、大文字で指定する必要があります。
注: ARTでは、8100-8191のFML FIELD IDをDDR用に予約しています。

環境変数の宣言

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
...

ART CICSへのログオン

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

図4-6 ログオン画面

ログオン画面

 


システム間通信の実装

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

分散トランザクション処理(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-7 典型的なエンドツーエンドの使用例

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

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

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

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

注: CRM1はCICAからTMA LUへの接続です。

構成

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

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

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

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

connections.descでの接続の定義

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

注: CICAは外部リージョンのため、CICAの接続定義はローカルでは存在しません。

connections.descの詳細は、接続構成ファイルに関する項を参照してください。

programs.descでのプログラムの定義

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

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

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

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

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

UBBCONFIG構成

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

ARTSTRNおよびARTCTRNの詳細は、CICSランタイム・サーバーに関する項を参照してください。

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

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

非同期処理の実装

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

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

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')

ARTSRMサーバーの構成

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

UBBCONFIGファイルの変更

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

リスト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

同期処理の実装

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

環境変数の構成

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

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

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

リスト4-57 system.descでのリージョン定義の例
[KIXR]
      APPLID=DBDCKIXR
[KIXX]
      APPLID=DBDCKIXX

UBBCONFIGファイルの変更

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

リスト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にルーティングされます。

 


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

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)の使用に関する項を参照してください。

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"

tdqextra.descの構成

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

例:

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

ここで:

Y

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

U

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

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

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に送信されます。

SPOOL関連の環境変数の構成

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

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

 


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に関する項を参照してください。

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

注:

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

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

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

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

リスト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コマンド・セット)に設定されています。

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

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

例については、「リスト4-62」を参照してください。artcicsutilが発行するリクエストはすべて、まずARTSRMによって受信されるため、ARTSRMサーバーは必須です。その後ARTSRMはプロキシとして動作し、ターゲットCICSサーバーにこれらのリクエストの処理を依頼します。JCLでINIT KCサブコマンドが使用されるため(リスト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"
...

リソース・ファイルの構成

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

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

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

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

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

 


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

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

全般的な構成

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

  1. typeterms.descでプリンタ・ターミナル定義を構成します。次に例を示します。
  2. リスト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という属性を定義しないでください。
  1. プリンタのトランザクションを、同時に実行されることがないクラスに構成します。
  2. 例:

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

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

    PRNTPROG;UNIGRP;pg for UNIGRP;COBOL; ;ENABLED
  7. terminals.descでプリンタ・ターミナルを定義して、プリンタLUNAMEおよびTERMIDを指定します。
  8. 例:

    [terminal]
    name=PRT1
    netname=CICSPRT1
    group=UNIGRP
  9. UBBCONFIGCLOPT -lオプションを使用して、プリンタ・プログラム・グループをARTSTR1プログラム・グループに構成します。
  10. 例:

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

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


      LUNAMEの構成

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


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

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

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

STARTコマンドによる出力

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

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

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

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

  1. tdqintra.descATIFACILITYおよびFACILITYIDを次のように構成します。
  2. リスト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
  3. terminals.descでPRT2を定義します。
  4. 例:

    [terminal]
    name=PRT2
    netname=CICSPRT2
    group=UNIGRP
  5. ART CICSの開始後、PCOMM (LUNAME= CICSPRT2で指定されたプリンタ)とART CICSの間で接続を確立します。
  6. ATIユーザーの場合、次のように/Qを構成します。
  7. 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で開始します。

 


CICSアプリケーションからのWebサービスの呼出しの実装

ART CICSでは、INVOKE WEBSERVICEコマンドを使用した、CICSアプリケーションからのWebサービスの呼出しをサポートしています。この機能を実装するには、次の項で説明する構成タスクを実行する必要があります。

WSDLファイルのMIFへの変換およびCOPYBOOKの生成

Oracle SALTコマンド・ユーティリティwsdlcvtを使用して、WSDLファイルをOracle Tuxedoメタデータ・リポジトリ入力ファイル(MIF)に変換します。COPYBOOKを生成するには、-Cオプションを指定します。詳細は、 Oracle SALTアプリケーションの構成を参照してください。

COPYBOOKからのRECORD定義の生成

cpy2recordツールを使用して、前の手順で生成したCOPYBOOKからRECORD定義を生成し、RECORDの環境変数をエクスポートします。詳細は、「RECORD型バッファの使用」を参照してください。

SALTおよびメタデータ・リポジトリの構成

(Oracle Tuxedo SALTユーティリティwsloadcfを使用して) SALT構成ファイルを作成し、(tmloadreposを使用して)サービス情報をOracle Tuxedoサービス・メタデータ・リポジトリにロードします。詳細は、「Oracle SALTアプリケーションの構成」を参照してください。

webservice.descの構成

webservice.desc構成ファイルにサービス・セクションを追加し、webservice.descREQUESTおよびRESPONSEを指定します。リスト4-69に例を示します。

リスト4-69 webservice.desc構成の例
[DFH0XCMNOperation]
      REQUEST=DFH0XCMNOperation
      RESPONSE=DFH0XCMNOperationResponse
      TRANSACTION=N

UBBCONFIGの変更

UBBCONFIGファイルでTMMETADATAサーバーおよびGWWSサーバーを構成します。リスト4-70に例を示します。

リスト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"

 


ART for CICSアプリケーション・サーバーのカスタマイズ済コールバック・サポートの実装

Oracle Tuxedo Application Runtime for CICSでは、カスタマイズ済の関数をサーバー起動時にロードし、サーバー終了時にその関数をアンロードすることによって、1つ以上のART for CICSアプリケーション・サーバーを拡張できます。この機能を実装するには、次のようにします。

この機能を実装する典型的なユースケースがいくつかあります。

注: この機能をサポートしているART for CICSアプリケーション・サーバーは、ARTSTR1/NARTATR1/NARTCTR1/NARTWTR1/NARTDPLおよびARTDPL_XNのみです。

共有ライブラリ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-71 ユーザー・ヘッダー・ファイル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;

int ARTKIX__svrinit_callback(ARTKIX_SRVINIT_PARA*) (サーバー起動時)

ART for CICSアプリケーション・サーバーは、起動時に次の関数を呼び出します。

Input: input引数は、次の構造体へのポインタです。

リスト4-72 構造体
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; 

出力: なし

リターン・コード: 起動に成功するとゼロを返します。失敗した場合はゼロ以外を返します(この場合、サーバーは起動できません)。

void ARTKIX__svrdone_callback() (サーバー停止時)

ART for CICSアプリケーション・サーバーは、停止時に次の関数を呼び出します。

入力: なし

出力: なし

リターン・コード: なし

動的なロードのためのカスタマイズ済Cライブラリのインクルード

Linux/Solarisの場合は、$LD_LIBRARY_PATHにカスタマイズ済Cライブラリをインクルードします(AIXの場合は$LIBPATH)。このライブラリは、実行時に動的にロードされます。

ART for CICSアプリケーション・サーバーがカスタマイズ済の共有ライブラリを上のパスで見つけられない場合、この機能は無効になりますが、サーバーは正常に起動します。

ユースケース1: サーバー起動時に共有メモリーを作成

ARTDPLサーバーの起動時に使用される共有メモリーを作成する場合は、libkixcallback.soという名前で共有ライブラリを作成する必要があります。これは、2つのコールバック関数をエクスポートし、$KIXDIR/lib/ディレクトリにある拡張共有ライブラリを置き換えます。詳細は、「共有ライブラリlibkixcallback.soの作成」を参照してください。

ARTDPLサーバーを起動すると、まず$KIXDIR/libの下にあるこの拡張共有ライブラリが検索されます。見つからなければ、Linux/Solarisの場合は$LD_LIBRARY_PATH (AIXの場合は$LIBPATH)の検索を続行します。この共有ライブラリが見つかると、ARTDPLサーバーでロードされます。

このサーバー起動時に、共有ライブラリを作成できます。関数が失敗した場合は、ゼロ以外が返されてARTDPLサーバーが起動に失敗します。成功した場合は、ゼロが返されてARTDPLサーバーが通常どおりに起動します。

ユースケース2: サーバー起動時にデータベース表を開く

ARTDPLサーバーの起動時に、Linuxプラットフォームでデータベース表の一部を開きたい場合は、libkixcallback.soという名前の共有ライブラリを作成します。それによって2つのコールバック関数がエクスポートされ、このC共有ライブラリのパス名が$LD_LIBRARY_PATH環境変数に含まれていることが確認されます。詳細は、「共有ライブラリlibkixcallback.soの作成」を参照してください。

ARTDPLサーバーを起動すると、まず$KIXDIR/libの下にあるこのカスタマイズ済共有ライブラリが検索されます。見つからなければ、$LD_LIBRARY_PATHの検索を続行します。この共有ライブラリが見つかると、ARTDPLサーバーでロードされます。

共有ライブラリを開始するとき、データベース表を開くことができます。関数が失敗した場合は、ゼロ以外が返されてARTDPLサーバーが起動に失敗します。成功した場合は、ゼロが返されてARTDPLサーバーが通常どおりに起動します。

 


リソースベースの認可の実装

ART for CICSにはセキュリティ・フレームワークが用意されているため、顧客は外部セキュリティ・マネージャとの統合を選択できます。このフレームワークを使用すると、トランザクションでリソースにアクセスする際、ART for CICSで認可チェックが実行されます。たとえば、CICS WRITEQ TSコマンドを発行すると、まずTSキューへの書込み権限があるかどうかがART for CICSによって外部セキュリティ・マネージャに確認されます。

リソースベースの認可を有効にするには、次のようにします。

 


CICSランタイムでのCOBOLプログラム・デバッグの実装

CICSランタイムでCOBOLプログラムのデバッグを実装する代表的なユースケースがいくつかあります。

詳細は、『Oracle Tuxedo Application Runtime for CICSユーザー・ガイド』CICSでのCOBOLプログラムのデバッグおよびエラー処理に関する項および『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』デバッグ構成ファイルに関する項を参照してください。

ユースケース1: 2人のユーザーが2つのCOBOLプログラムをそれぞれデバッグします。

ART for CICSユーザーAがCOBOL Program1をデバッグし、ART for CICSユーザーBがCOBOL Program2をデバッグする場合、2人のユーザーは次のようにする必要があります。

  1. COBOLデバッグ情報をkix_cobol_dbg.cfg構成ファイルに追加します。
  2. myAnimSrvID1;;;;; Program1
    myAnimSrvID2;;;;; Program2
  3. animコマンドラインを入力します。
  1. ユーザーAおよびBは、animユーティリティを起動したLinuxアカウントと同じアカウントで独自のART for CICSアプリケーション・サーバーを起動するか、ART for CICSサーバーを再起動せずにデバッグ構成リソース・ファイルを動的に変更します。
  2. 注: ART for CICSサーバーを起動するLinuxユーザー・アカウントは、animコマンドラインを実行するLinuxユーザー・アカウントと同じである必要があります。animユーティリティで指定されるANIMSRVIDのみがデバッグされます。

ユースケース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構成ファイルに追加します。
  2. myAnimSrvID1;;;;transaction1; 
  3. 次のコマンドラインを1つのターミナルで入力すると、両方のプログラムをデバッグできます。
  4. anim %XmyAnimSrvID1

ユースケース3: 1人のユーザーが2つのプログラムをSTART TRANSIDでデバッグします。

1人のART for CICSユーザーが2つの異なるプログラムをSTART TRANSIDコマンドでデバッグする場合、次のようにします。

  1. COBOLデバッグ情報をkix_cobol_dbg.cfg構成ファイルに追加します。
  2. myAnimSrvID1;;;;; program1
    myAnimSrvID2;;;;; program2
  3. 次のコマンドラインをそれぞれ別のターミナルで入力します。
  4. anim %XmyAnimSrvID1
    anim %XmyAnimSrvID2

これらの2つのプログラムがART for CICSアプリケーション・サーバーによって起動されると、ユーザーは2つのプログラムをそれぞれ別のターミナルでデバッグできます。

ユースケース4: 1人のユーザーが2つのプログラムをLINK(リモート)でデバッグします。

1人のART for CICSユーザーが2つの異なるプログラムをLINKコマンドでデバッグする場合、次のようにします。

  1. 次のCOBOLデバッグ情報をkix_cobol_dbg.cfg構成ファイルに追加します。
  2. myAnimSrvID1;;;;; program1
    myAnimSrvID2;;;;; program2
  3. 次のコマンドラインをそれぞれ別のターミナルで入力します。
  4. anim %XmyAnimSrvID1
    anim %XmyAnimSrvID2

2つのプログラムがART for CICSアプリケーション・サーバーによって起動されると、ユーザーは2つのプログラムをそれぞれ別のターミナルでデバッグできます。

 


CICSランタイム・ログ

Tuxedoシステム・ログ

他のTuxedoアプリケーションと同様に、CICS Runtimeは、専用のシステム・ログに特定のイベントと問題を記録するTuxedoによって管理されます。

このログは、名前がTuxedo ubbconfigファイルのシステム変数ULOGPFXに含まれる標準Tuxedoユーザー・ログ(ULOG)です。

例:

ULOGPFX="/home2/work9/demo/Logs/TUX/log/ULOG"

 


CICSランタイム・サーバー・ログ

Tuxedo ubbconfigファイルでサービスを宣言する場合、各サーバーでは、CLOPTオプションが次の2つのファイルを含むように定義されています。

各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ファイルには、サーバーがブートされるときに発生した問題に関するエラー・メッセージだけでなく、ロードされている様々なリソースに関する情報も含まれています。具体的には、次の情報があります。

この例では次の点に注意してください。

 


プログラムの無効化と有効化

場合により、システムに大幅に影響を与えるプログラムで問題が発生し、エンド・ユーザーによる実行を禁止することによって、プログラムを緊急に除去する必要があります。当面のところ、これは一時的にシステムを安定させる助けになり、機能障害を解析および解決するための時間を提供します。

z/OS上と同様に、CICS Runtimeではプログラムを無効にすることができます。プログラムは無効にするには、CICS Runtime構成ファイルprograms.descを変更します。このファイルには専用のフィールド(STATUSフィールド)があり、プログラムがDISABLEDかENABLED(デフォルトのステータス)かを示します。

『Oracle Tuxedo Application Runtime for CICSリファレンス・ガイド』CICSリソース情報の動的管理に関する項も参照してください。

プログラムの無効化

トランザクションを有効から無効に切り替えるには、このcsvファイルの7番目のフィールドを変更し、以前の値を、暗黙的(「 」空白)または明示的なENABLEDステータスから、明示的なDISABLEDステータスに変更する必要があります。

CICS Runtime Tuxedoサーバーをシャットダウンしてブートすると、1つ以上のプログラムの変更が有効になります。

プログラムを無効にする場合、それを使用する人がいると、アプリケーションがCICSエラーを処理する方法に応じて、エラー・メッセージが表示されます。

リスト4-75 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

プログラムの有効化

プログラムを有効化するために必要なのは、反対の操作をすることだけであり、STATUSフィールドをDISABLEDからENABLED、または「 」(少なくとも1つのスペース)に変更します。

CICS Runtime Tuxedoサーバーを停止して再起動すると、1つ以上のプログラムの変更が有効になります。

プログラム・ステータスの変更チェック

異なるトランザクション・サーバーまたはCICS Runtimeのログを確認すると、stderr_*ログで、変更されたステータスの変更に気づきます。

このサーバーの起動直後のログは、このプログラムが無効にされていることを(斜体で)示しています。

リスト4-76 プログラム・ステータスを示すログ・レポート
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!!

CICS Runtime用のアプリケーションの削除と追加

場合により、アプリケーションのすべてのコンポーネントを、特定のマシンから完全に削除するか、別のマシンに移動したいことがあります。アプリケーションで使用するすべてのリソースが、そのアプリケーション専用の1つ以上のリソース・グループで定義されている場合、CICS Runtimeでこれらのグループを抑制し、最終的に別の場所にインストールするだけで十分です。

各CICS Runtime Tuxedoサーバーは、CLOPTオプションの-lパラメータの後に含まれる、起動時に選択およびインストールされるグループのリストを読み取ります。アプリケーションに対してグループを削除または追加するには、各CICS Runtime Tuxedoサーバーに対して、このリストからグループを削除または追加すれば十分です。

1つ以上のプログラムでの変更は、CICS Runtime Tuxedoサーバーを停止して再起動すると有効になります。

リスト4-77 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-78 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"

グループを削除する場合、-lリストから存在するグループを削除し、残りのグループの間に「:」文字を1つだけ残します。

リスト4-79 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 RuntimeのCプログラム・サポート

ART CICSでは、CICSアプリケーションをC言語で実装して実行できます。

CICS RuntimeでのCプログラムの実行

各CプログラムはCOBOLプログラムとしてロードされ、COBOLランタイムで実行されるため、CICS Cプログラム・サポートは、COBOL製品に依存します。

Cプログラミングの制限と要件

ART CICSにおけるCICS/Cサポートの制約と要件を、次にリストします。

CからEIBへのアクセス

EXECインタフェース・ブロック(EIB)のアドレスは、引数としてC main関数に渡されません。しかし、ユーザーは次の2つの方法を使用して、EIBのアドレスを取得できます。

CからCOMMAREAへのアクセス

COMMAREAのアドレスは、引数としてC main関数に渡されません。しかし、ユーザーは次の2つの方法を使用して、COMMAREAのアドレスを取得できます。

CICSコマンド・トランスレータ

ART CICSには、CICS/COBOL API変換用のprepro-cics-C.plがあります。prepro-cics-C.plの詳細は、 prepro-cics-C.plに関する項を参照してください。

Cプログラムのコンパイル

CプログラムをCOBOLランタイムで確実にロードするためには、gcc/g++ではなくCOBOLコンパイラを使用してCプログラムをビルドしてください。

cobを使用して、Cソース・コードを呼出し可能な共有オブジェクトとしてコンパイルします。動的ライブラリには、Cソース・ファイル名と同じ名前で大文字の名前が必要です。

例:

CPYINC=../includes
cob -z,CC  zample_treated.c  -o ZAMPLE.so -CC -I${CPYINC}

  先頭に戻る       前  次