|
Oracle Tuxedo Application Runtime for IMS (Tuxedo ART for IMS)リファレンス・ガイドでは、Tuxedo ART for IMSソフトウェアとともに配布されるシステム・プロセスおよびコマンドについて説明します。
表 1は、ARTIMSユーティリティの一覧を示しています。
MFSGEN: ARTICTLサーバーのバイナリ制御ブロック・ジェネレータ。
このユーティリティは、ART MFSの開発に使用します。ユーザーが記述した制御文をMFSバイナリ制御ブロックに変換します。
図 1は、MFSGENワークフローを示しています。

mfsgen [-options…] files
-l
-d dir
*.MSGおよび*.FMT)およびリスト・ファイルなどすべての出力ファイルを格納するターゲット・ディレクトリとして既存のディレクトリを指定します。 これは、デフォルトで<current directory>/formatです。
FILE.MSG
FILE.FMT
FILE.lst
0
1
2
ソース・ファイルfile.mfsを変換するには、次のコマンドを使用します。
$mfsgen file1.mfs file.mfs file3.mfs
| 注意: | 入力ファイル.mfs接尾辞は必須ではありません。 |
chgcobol.sh: ARTIMSに対してMicroFocusとCOBOL-ITの間を切り替えるために使用されるシェル・スクリプト。
chgcobol.shは、IMS_RTルートchgcobol.sh [mf|cit]の下で実行する必要があります。
MicroFocusとCOBOL-ITの両方を同じホストにインストールでき、相互に切り替えることができます。MicroFocusとCOBOL-ITの間の切り替えには、chgcobol.shを使用します。COBOLランタイムに切り替えるには、最初にARTIMSアプリケーションを停止する必要があります。
cit
mf
./chgcobol.sh
./chgcobol.sh mf
DFSRRC00: ARTIBMPまたはARTIBMPTサーバーをアクティブ化するために使用されるユーティリティ。
DFSRRC00は、DFSRRC00入力を待機しているARTIBMP/ARTIBMPTサーバーをアクティブ化するために使用されます。DFSRRC00パラメータは、ワークベンチによってJCLから変換されたスクリプトから渡された文字列です。現在、文字列に含まれるサブパラメータでサポートされているものは、5つのみです("BMP, ${MBR}, ${PSB}, ${IN}, ${CKPTID}")。文字列内の残りのサブパラメータは無視されます。
| 注意: | 将来の使用に備えて、16個の追加のパラメータが予約されていますが、現在サポートされていません。 |
DFSRRC00 "BMP,${MBR},${PSB},${IN},,,,,${CKPTID},,,,,,,,,,,,"BMP
${MBR}
${PSB}
{IN}
{CKPTID}
| 注意: | ${MBR}が空の場合、DFSRRC00はエラーによってすぐに終了します。 |
| 注意: | ${IN}が空の場合、ARTIBMP/ARTIBMP_ORAにリクエストが送信され、BMPプログラムが呼び出されます。 |
| 注意: | ${IN}が空でない場合、ARTIBMPTにリクエストが送信され、トランザクション・コードが${IN}であるトランザクション指向BMPプログラムが呼び出されます。 |
prepro-ims.pl: z/OS上のCプログラムを、ART IMSで実行可能な形式に変換するために使用されるユーティリティ。
prepro-ims.plは、z/OS上のCプログラムを、ART IMSで実行可能な形式に変換するために使用されます。ファイルの変換に失敗した場合、障害情報および障害の原因となったソース・ファイルの行がstderrに出力されます。完了すると、サマリーがstdoutに報告されます。
#pragma runoptsの行と他のブラグマ・ディレクティブをコメント化します。
IBM IMSの下で呼び出された場合、env(IMS)は適切な動作環境を確立し、plist(IMS)は適切なパラメータ・リストを確立します。それは、ARTIMSランタイムでは不要であり、削除する必要があります。
関数ctdli()/aibtdli()は、引数リストに後続のNULLを追加することで再構築されました。このNULLは、ARTIMS引数リストの終わりを示すために使用されます。aibtdli()では、parmcountパラメータが削除されます。
関数main()引数リストは削除されました(argc、argv、envpなど)。メインフレームでは、IMSはグローバル・リストおよびそのリストを定義するマクロを使用します。ARTIMSでは、__getcb(int)関数が、PCBリストを取得するためのGETメソッドとして実装されています。
exit()関数は、 __art_ims_return ()という名前に変更されました。IBM IMSドキュメントによれば、プログラムが処理するメッセージがない場合、mainから返すか、またはexit()を呼び出すことでIMSに制御が返されます。exit()によって、コンテナ・サーバーが予期せずに終了した場合、__art_ims_return ()関数が使用され、制御をコンテナ・サーバーに返すための手助けをします。
表 2は、処理ルールの例を示しています。
| 注意: | prepro-ims.plは、メインフレームからオープン・システムへの一部の汎用Cの移植を処理できません。 |
makefile を手動で変更し、他の従属Cファイルを追加する必要があります。ctdli/aibtdliの呼出しはサポートされていません。gmakeを使用する必要があります。ims.hなど)をメインフレームからオープン・システムにコピーする必要があります。 prepro-ims.pl -i source-file -o dest-file [-m yourmakefile]
prepro-ims.plのパラメータ、終了コード、およびサポート・モードを、それぞれ表 3、表 4および表 5に示します。
ソース・プログラムはリスト1に類似したものになります。
/* #pragma runopts(env(IMS), plist(IMS)) */
#include <ims.h>
#include <stdio.h>
#define n 20 /* I/O area size - Application dependent */
typedef struct {PCB_STRUCT(10)} PCB_10_TYPE;
int main()
{
static const char func_GU[4] = "GU ";
static const char func_ISRT[4] = "ISRT";
char ssa_name[] = "ORDER ORDER (ORDERKEY = 666666)";
int rc;
char msg_seg_io_area[n];
char db_seg_io_area[n];
char alt_msg_seg_out[n];
PCB_STRUCT_8_TYPE *alt_pcb;
PCB_10_TYPE *db_pcb;
IO_PCB_TYPE *io_pcb;
io_pcb = (IO_PCB_TYPE *)__pcblist[0];
alt_pcb = __pcblist[1];
db_pcb = (PCB_10_TYPE *)__pcblist[2];
..
/* get first message segment from message area */
rc = ctdli(func_GU, io_pcb, msg_seg_io_area, NULL);
..
/* get the data from the database having the specified key value */
rc = ctdli(func_GU, db_pcb, db_seg_io_area, ssa_name, NULL);
..
/* build output message in program's I/O area */
rc = ctdli(func_ISRT, alt_pcb, alt_msg_seg_out, NULL);
..
}
odbastop: z/OS上のODBAプロキシを停止するために使用されるオープン・システム・ツール。
オープン・システム上でodbastopを使用して、z/OS上で実行されているODBAプロキシを停止します。
odbastop -l host -p port -c cmd
STOPROXY: z/OS上のODBAプロキシを停止するために使用します。
z/OS上でSTOPROXYを使用して、z/OS上で実行されているODBAプロキシを停止します。
USER.ODBA.JCL(STOPROXY) JCLを変更し、それを送信してODBAプロキシを停止します。詳細は、Oracle Tuxedo Application Runtime for IMSユーザーズ・ガイドのODBAプロキシの使用方法に関する項を参照してください。
ARTIMSでは、DL/Iは、動的にロードされるライブラリのグループ内に実装されます。サポート対象のDL/I機能は、次のとおりです。
表 6は、サポート対象のDL/Iインタフェースを示しています。
CBLTDLI: OS/39におけるIMS/TMでのDL/I呼出しの0エントリ。
ARTIMSでは、CBLTDLIは、DLIライブラリのエントリとして機能する関数です。CBLTDLIは、それに渡された関数コードに基づいて適切な関数を呼び出します。
関数コード(GUなど)、I/O PCBまたは代替PCB、I/O領域、MOD
AIBTDLIは、z/OSにおけるIMS/TMでのDL/I呼出しのエントリです。ARTIMSでは、AIBTDLIは、DL/Iライブラリのエントリとして機能する関数です。AIBTDLIは、AIBマスクで指定されているPCB名に従ってPCBアドレスを取得し、見つかったPCBアドレスとともにそれに渡された関数コードに基づいて適切な関数を呼び出します。
関数呼び出し(GUなど)、AIBマスク、I/O領域、入力または出力バッファ。表 7は、AIBマスク・パラメータを示しています。
AIBマスク・フィールドAIBRSNM1におけるPCB名の指定の詳細なルールは、次のとおりです。
$appname.psb構成ファイル内のlabel=で構成する必要があり、AIBマスクで適切に指定されている必要があります。各代替PCBの名前(ラベル)は、1つのPSB内(つまり、1つの$appname.psbファイル内)で一意である必要があります。
$appname.psb構成ファイル内のlabel=で構成する必要があり、AIBマスクで適切に指定されている必要があります。各DB PCBの名前(ラベル)は、1つのPSB内(つまり、1つの$appname.psbファイル内)で一意である必要があります。
ARTIMSでは、CTDLIは、DLIライブラリのエントリとして機能する関数です。CTDLIは、それに渡された関数コードに基づいて適切な関数を呼び出します。
関数呼び出し(GUなど)、PCB (I/O PCBまたは代替PCB)、I/O領域、入力または出力バッファ。
op引数は、実行するDL/I関数を指定します。ctdli()呼出し形式は、選択した関数によって異なります。詳細は、「CBLTDLI」を参照してください。
| 注意: | CTDLIを使用する場合、SSAパラメータは、ポインタ・パラメータである必要があります。 |
DL/Iは、受信メッセージの処理およびIMS/TMでのPCBに対する送信メッセージの構築を担当します。ARTIMSでは、Tuxedoインフラストラクチャはメッセージ・キューおよびメッセージ配信を担当するため、受信メッセージの処理には現在のリクエスト・メッセージのみが含まれます。DLIライブラリは、COBOLアプリケーションからのリクエストに基づいて最初および後続のセグメント(FMLフィールド)を取得できます。送信メッセージを構築するために、各PCBは中間記憶域として関連するメッセージ・バッファ(FML)を持っており、メッセージが送信される前にそのメッセージ・データがそこに格納されます。メッセージ処理用の詳細なAPIを、表 8に示します。
GU: IMS/TM環境のメッセージ・キューから最初のセグメントを取得するために使用されます。
GUは、メッセージ・キューの最初のセグメントを取得するために使用されます。会話型トランザクションの場合、メッセージの最初のセグメントは常にSPAです。 ARTIMSでは、シミュレートされたGU呼出しが、処理中のメッセージのFMLバッファの最初のフィールドを取得するために使用されます。会話型トランザクションの場合、GU呼出しは、常にSPAのフィールドを取得し、それ以外の場合はユーザー・データの最初のフィールドを取得します。
'AD': 関数パラメータが無効です。関数呼出しがCBLTDLIに指定されていないか、無効な関数呼び出し名がCBLTDLIに指定されています。
GN: IMS/TM環境のメッセージ・キューから後続のセグメントを取得するために使用されます。
最後のセグメントが取得された後、GN呼出しは、QDステータス・コードがPCBで返されるという結果になります。ARTIMSでは、シミュレートされたGN呼出しが使用されて、処理中のメッセージのFMLバッファで次のフィールドが取得されます。
'AD': 関数パラメータが無効です。関数呼出しがCBLTDLIに指定されていないか、無効な関数呼び出し名がCBLTDLIに指定されています。
ISRT: IMS/TMにおいて指定されているPCBに関連付けられているメッセージにセグメントを追加するために使用されます。
ARTIMSでは、シミュレートされたISRT呼出しは、指定されているPCBに関連付けられているFMLバッファに、CARRAYタイプのフィールドを追加するために使用されます。会話型トランザクションの場合、最初のセグメントは常にSPAです。
I/O PCB or alternate PCB or AIB, I/O Area, MOD
'AD': 関数パラメータが無効です。関数呼出しがCBLTDLIに指定されていないか、無効な関数呼び出し名がCBLTDLIに指定されています。
'XA': リクエストに応答した後に、そのリクエストを別のトランザクションに転送しようとしています。
'XB': リクエストを別のトランザクションに転送した後に、それに応答しようとしています。
'XC': Z1ビットが0ではありません。それは予約済であり、常に0として保持されます。
PURG: そのメッセージが低速PCBに対して完了したことをIMS/TMに通知するために使用されます。
PURG呼出しは正常ですが、送信されなかったか、メッセージが高速PCBに対してただちに送信されました。
I/O領域がPURG呼出しに提供されている場合、PURG呼出しもISRT呼出しとして機能します。つまり、PURGは、PCBに関連付けられている(現在の)メッセージを完了としてマークし、I/O領域のデータを次のメッセージの最初のセグメントとしてISRTします。最終結果は、ISRT呼出しが後に続くI/O領域のないPURG呼出しと同じです。
ARTIMSでは、シミュレートされたPURG呼出しは、低速PCBに対して関連付けられたメッセージが完了したとマークするため、または高速PCBに対して関連付けられたメッセージを送信するために使用されます。ただし、I/Oバッファが指定されている場合は、単一のPCBに対する複数の保留メッセージはサポートされていないため、それは無視され、したがってMODも無視されます。ただし、ステータス・コードはカスタマ・プログラムによってチェックされるため、この場合、特別なステータス・コードは追加されません。
I/O PCB or alternate PCB or AIB, I/O Area (optional), MOD (optional)
'AD': 関数パラメータが無効です。関数呼出しがCBLTDLIに指定されていないか、無効な関数呼び出し名がCBLTDLIに指定されています。
'A3': 宛先が設定されていないが、それに対してPURGが呼び出される変更可能なTP PCB。
CHNG: IMS/TMにおいてPCB内の宛先を変更するために使用されます。
ARTIMSでは、シミュレートされたCHNGが、代替PCBの別のサービス名(のみ)を指定します。宛先トランザクション名は、8バイト以下であり、その制限を超えている場合、それは8までに切り捨てられます。後続の空白も削除されます。トランザクション名は、それがimstrans.descファイルに存在し、かつ正しい構成である場合に、有効として評価されます。
1つのTuxedoドメイン内の1つのトランザクション・コードが、異なるドメインの他のサービスに切り替えるように設計されている場合、切り替えられるトランザクション・コードは、[imstrans.desc]構成ファイルで有効なトランザクションとして定義されている必要がありますが、それをそのクラスの制御で公開しないでください。
プログラム切替えの場合、新しいターゲットは別のトランザクション・コードです。会話型プログラム切替えの場合、ARTIMSでは、元のコードおよびターゲット・コードのspaサイズに制限はありません。
Alternate PCB or AIB、宛先トランザクション・コード
'AD': 関数パラメータが無効です。宛先が指定されていません。関数呼出しが無効です。
'A2': PCBが変更可能でないか、ISRT操作がすでに実行されています。
'QH': 代替PCBに指定するトランザクションが空白であるか無効です。
CMD: プログラムでIMSコマンドを発行可能にするために使用されます。
IMSコマンドを送信または発行し、応答メッセージの最初のセグメントを取得します。
CMDは、IMSコマンドを発行するために使用されます。これは、すべてのサポートされているIMSコマンドを処理できると想定されるインタフェースにIMSコマンドを転送します。CMD呼出しは、そのインタフェースによってIMSコマンドが処理されるまで待ち、その応答メッセージの最初のフィールドを取得します。
/DIS TRAN、/DIS PGM、および/DIS USERコマンドのみがサポートされています。これらのコマンドがCMD APIによって発行されると、関連するタイトル・セグメントがI/O領域を介して返され、それには、後続のセグメントの各フィールドの意味が記述されています。
- /DISP TRAN: Tuxedoで取得可能なトランザクション関連情報がI/O領域内に返されます。返されるセグメントは(llzz部分を除く)、CUR_TRAN CUR_QCNTです。
- /DISP user: Tuxedoで取得可能なユーザー関連情報が返されます。返されるセグメントは(llzz部分を除く)、CUR_USER CUR_TRANです。
- /DISP PGM: Tuxedoで取得可能なプログラム関連情報が返されます。返されるセグメントは(llzz部分を除く)、CUR_PGM CUR_TRANです。
| 注意: | 現在、前述の3つのコマンドでは他のすべてのパラメータは無視されます。前述の3つのサポートされているもの以外のコマンドがCMD呼出しによって発行されると、応答セグメントなしで成功ステータスが返されます。 |
'bb': 成功(2つの空白)。ただし、応答セグメントはありません。
'CC': 1つまたは複数の応答セグメントが生成されました。
'CH': AOIコマンド・インタフェースがシステム・エラーを検出し、そのコマンドを処理できなかったため、発行したCMD呼出しはIMSによって無視されます。IMSの処理は続行されます。
GCMD: CMDコマンドの応答メッセージの2番目および後続のセグメントを取得します。
GCMDは、アプリケーション・プログラムによってCMD呼出しを使用してIMSコマンドが処理されるときに、IMS TMから2番目および後続の応答セグメントを取得します。返されるセグメントそれぞれには、前述の"CMD"呼出しのタイトル・セグメントに応じたフィールドが含まれます。最後のセグメントが取得された後に、GCMD呼出しは、"QD"ステータス・コードがPCBで返されるという結果になります。
I/O PCB or AIB, I/O Area
'bb': セグメントは正常に取得されました(2つの空白)。
DLIライブラリは、MPPまたはBMPプログラムから発行されたデータベース処理を実行します。これは、指定されたセグメント検索基準に応じた1つの特定のセグメントの取得および保持、特定のセグメントの更新、特定の位置へのセグメントの挿入、特定のセグメントの削除などを実行できます。データベース処理の詳細なAPIを、表 9に示します。
GU/GHU: 現在の位置(存在する場合)またはデータベースの先頭から基準(存在する場合)を満たす最初のセグメントを取得(および保持)します。
GUは、指定されているSSAを満たし、順次処理の開始位置を確立する最初のセグメントを取得するために使用されます。GUの検索開始位置は、データベースの先頭(つまり、ルート・レベル)です。呼出しを満たす最初のセグメントを見つけた後、現在の位置が順次処理の開始位置となります。
GHUは、GUに加えて、順次書込み操作(置換、削除など)のためにセグメントをロックします。GHUはGSAMには適用されません。
DB PCB,GSAM PCBまたはAIB, I/O Area, and SSA list (optional)またはRSA (Mandantory for GSAM)
GN/GHN: 現在の位置から基準(存在する場合)を満たす次のセグメントを取得(および保持)します。
GNは、現在の位置から検索して、指定されているSSAを満たす次のセグメントを取得するために使用されます。セグメントを見つけた後、順次処理のために現在の位置が更新されます。DBに現在の位置が確立されていない場合、GNはGUのように動作します(つまり、先頭から検索します)。階層型DBにおける順次取得は、常に上から下、かつ左から右(つまり、ツリーの前順取得)です。
GHNは、GNに加えて、返されるセグメントをそれに対する順次書込み操作のためにロックします。GHNはGSAMには適用されません。
DB PCB,GSAM PCB or AIB, I/O Area, and SSA list (optional) or RSA(opitional for GSAM)
GNのパラメータの使用方法と制限事項は、GUに似ています。
GNP/GHNP: 確立した親の依存セグメントから基準を満たす次のセグメントを取得(および保持)します。
GNPは、確立した親の依存セグメントで、次の修飾セグメントを取得するために使用されます。階層型DBにおける確立した親とは、前の成功したGU/GN呼出しで返された最も下位のセグメントであり、失敗したGU/GN呼出しによって取り消されます。
GHNPは、GNPに加えて、返されたセグメントを順次書込み操作のためにロックします。
DB PCB, GSAM PCB or AIB, I/O Area, and SSA list (オプション)
GNP/GHNPのパラメータの使用方法と制限事項は、GUに似ています。
ISRT: 既存のセグメント・タイプの新しいオカレンスを階層型データベースに挿入するために使用されます。
ISRTは、既存のセグメント・タイプの新しいオカレンスを階層型データベースに挿入するために使用されます。挿入位置は、挿入されるセグメントのレベルを除いた一連の修飾SSAによって、または非修飾SSAの場合は現在の位置によって決定されます。
DB PCB, GSAM PCB or AIB, I/O Area, and SSA list or RSA(opitional for GSAM)
REPLは、既存のセグメントを更新するために使用されます。最初にGet Hold呼出しを使用してセグメントを取得し、その後、そのセグメントを変更および更新する必要があります。I/O領域のセグメントのフィールドの長さは変更できません。
DB PCB or AIB, I/O Area, and SSA list
パラメータの使用方法と制限事項は、GUに似ています。
DLET: セグメントとその依存関係を削除するために使用されます。
DLET呼出しは、セグメントとその依存関係を削除するために使用されます。これは、Get Hold呼出しの後に続く必要があります。修飾SSAは、DLET呼出しに指定しないでください。
DB PCB or AIB, I/O Area, and SSA list (オプション)
パラメータの使用方法と制限事項は、GUに似ています。
FLD: セグメント内のフィールドにアクセスし、変更するために使用されます。
FLD呼出しは、セグメント内のフィールドにアクセスし、変更するために使用されます。
DB PCB or AIB, I/O Area, and SSA list
FLD呼出しに必須です。
POSはDEDBのみをサポートします。ARTIMSでは、次の制限があります。 1. keywordパラメータはサポートされていません。 2. LLおよび対応する数値フィールド(フィールド4、フィールド5)は、ホスト・バイト・エンディアンに格納されます。
| 注意: | I/Oデータ領域には、24バイトのDEDBのすべての領域の位置情報が入ります。 |
OPEN: GSAMデータベースを明示的に開くために使用されます。
GSAMデータベースを明示的に開きます。GASMデータベースに対する次の処理によって、GSAMデータベースが再度開かれることはありません。GSAMデータベースを明示的に開かない場合、他の操作によってGSAMデータベースが暗黙的に開かれます。
GSAM PCB or AIB, i/o area
| 注意: | このパラメータは無視されます。IMS/DBに対するOracleの実装では、GSAMデータベースをローカル・ファイル・システムでシミュレートするため、I/O領域はデータ・セットの種類を指定するために使用されません。$appname.psbでPROCOPTオプションを使用して、データ・セットが読取り専用であるか、取得および追加されるかどうかを定義します。 |
IMS/DBの様々な種類の実装をサポートするために、IMS/DBに対するサポートが、ARTIMSにプラグイン可能で、プラグ後にARTIMSサーバーによってロード可能な動的リンク・ライブラリ(DLL)として設計されています。このプラグアンドプレイ・メカニズムを有効化するには、DLLによってどのAPIがエクスポートされるのかのアグリーメントが必要です。
ARTIMSサーバー(ARTIMPPおよびARTIBMP)は、オンラインまたはバッチCOBOLプログラムを実行するためのコンテナとして使用されます。プログラムによつて発行されるデータベース・アクセス操作を有効化するには、通常、サーバーは、データベースの実装に対してなんらかの初期化または構成を実行する必要があり、COBOLプログラムを起動する前に何かを実行する必要があり、プログラムの完了後に何かを実行する必要があり、サーバーが停止する前になんらかのクリーンアップを実行する必要があります。そのほかに、CBLTDLIを介した各データベース処理が、特定のAPIにマップされている必要があります。
DB PCB構造を指すポインタは、ARTIMSサーバーからCOBOLプログラムに渡され、最後にIMS/DBのプラグインのdb_entry()に渡されます。プラグインが適切に機能するようにするには、各COBOLプログラムを呼び出す前にDB PCB構造に適切に入力する必要があります。この項では、DB PCBへの入力方法に関する詳細な要件を定義します。
DB PCB構造の例をリスト2に示します。
struct {
char dbname[8];
char seglevel[2];
char stat_code[2];
char opt[4];
char res[4];
char segname[8];
char keylen[4];
char segnum[4];
char keyfa[IMS_FEEDAREA_LEN];
}; リスト3は、get_dbpcbattrインタフェースに使用される構造定義を示しています。コンテンツはPSBファイルから読み取られ、get_dbpcbattrインタフェースを介してアプリケーションに返されます。
enum PCBTYPE {IOPCB = 1, ALTPCB = 2, GSAMPCB = 3, DBPCB = 4};enum SEQUENTIALBUFFERING {NO = 1, COND = 2};enum PCBPOS {SINGLE = 1, MULTIPLE = 2};enum SENSITIVITY {READ = 1, UPDATE = 2};struct __SENFLD {char name[8]; /* mandatory, less than 8 filled with blank */
unsigned short start; /* mandatory, range [1-32767] */
int replace; /* optional, default is 1 */
};
struct SSPTR {unsigned short pointer; /* range[1-8], default 0 */
enum SENSITIVITY sens;
};
struct __SENSEG {char segname[8]; /* mandatory, less than 8 filled with blank */
char parent[8]; /* mandatory, less than 8 filled with blank */
char procopt[4]; /* optional, default filled with blank */
SSPTR ssptr[8]; /* each slot contains a subset pointer number and associated sensitivity, pointer of 0 indicates end, totally up to 8 can be specified */
char indices[8]; /* optional, default filled with blank */
SENFLD * senfld; /* optional, default is NULL */
unsigned short senfld_num; /* optional, default is 0, up to 255 SENFLD can be defined for each SENSEG */
};
struct __DB_PCB_ATTR { /* PCB Attributes */enum PCBTYPE type; /* mandatory */
char dbname[8]; /* db name, default filled with blank */
char pcbname[8]; /* pcb name, optional, default filled with blank */
char procopt[4]; /* procopt , default filled with blank */
enum SEQUENTIALBUFFERING sb; /* optional, default is NO */
enum PCBPOS pos; /* optional, default is SINGLE */
int keylen; /* optional, default is invalid value 0 */
char procseq[8]; /* optional, default filled with blank */
int msdb_commit; /* optional, default is 0 */
int list; /* optional, default is 1 */
char *areas; /* area list set by SETR in DFSCTL, no change will be applied on it in ART/IMS */
int senseg_num; /* optional, default is 0 */
struct SENSEG * senseg; /* optional, default is NULL */
};
IMS/DBプラグインのAPIを定義するには次の手順を実行する必要があります。
extern "C" int db_init(int argc, char * argv[])
引数: サーバーのCLOPTから渡されるパラメータ・リスト。
使用する場所: このAPIは、ARTIMSサーバーが起動する際に呼び出されます。IMS/DBの特定の実装には、初期化作業は必要ありません。単に空の関数を指定して、それが0を返すようにします。
機能: 実装に必要な構成またはその他のものに対するクリーンアップ
引数: なし。サーバーはプラグインに入力を提供できないためです。
使用する場所: このAPIは、ARTIMSサーバーが停止する際に呼び出されます。IMS/DBの特定の実装には、初期化作業は必要ありません。単に空の関数を指定して、それが0を返すようにします。
機能: IMS/DB実装にアクセスできるCOBOLプログラムを起動する前に実装によって必要とされる事前アクション。
引数: なし。サーバーはプラグインに入力を提供できないためです。
使用する場所: IMS/DB実装にアクセスできるCOBOLプログラムがARTIMSサーバーによって起動される前にこのAPIが呼び出されます。IMS/DBの特定の実装には、初期化作業は必要ありません。単に空の関数を指定して、それが0を返すようにします。
機能: IMS/DB実装にアクセスできるCOBOLプログラムを起動した後に実装によって必要とされる事後アクション。
引数: なし。サーバーはプラグインに入力を提供できないためです。
使用する場所: IMS/DB実装にアクセスできるCOBOLプログラムがARTIMSサーバーによって起動された後にこのAPIが呼び出されます。IMS/DBの特定の実装には、初期化作業は必要ありません。単に空の関数を指定して、それが0を返すようにします。
extern "C" int db_entry(const char * op, __DB_PCB * pcb, void * io, char * ssa_list[], int ssa_cnt);
機能: IMS/DB実装へのアクセスのエントリ・ポイントCOBOLプログラムから発行されたデータベース・アクセスのための各DL/I呼び出しは、最終的にそれによって処理されます。
pcb: ユーザー提供のDB PCBのスーパークラスである__DB PCBを指すポインタ。
io: 外部実装者によって定義されたバッファDB_IO_AREAを指すポインタ。
ssa_list: 文字列の配列であり、それぞれが1つのSSAを含み、形式は外部実装者によって異なります。
ssa_cnt: ssa_list内の要素の数。値の範囲は[0..15]です。
使用する場所: COBOLプログラムによって発行されるDL/I DB呼出し。
extern "C"
const __DB_PCB_ATTR * get_dbpcbattr (struct __DB_PCB * pcbm)
機能: db pcbの追加属性を取得するために使用されます。これらの属性はPSBファイルで構成されます。
戻り値: PCB属性ポインタ。このAPIから返されるPCB属性構造に含まれる内容を、ユーザーが変更することはできません。入力がDB PCBまたはGSAM PCBでない場合は、nullが返されます。オプションの属性が構成されていない場合は、デフォルト値が返されます。ポインタを解放する必要はありません。
使用する場所: db pcbによって呼び出されたサード・パーティのDBプラグイン。
extern "C"
int fill_dbpcb_segname (struct __DB_PCB * pcb)
機能: db pcbのセグメント名を取得するために使用されます。このインタフェースはDBプラグインによって提供されます。
pcb: PCBマスク・ポインタ(DB PCBまたはGSAM PCB)。pcbマスクのsegnameには正しい値が設定されます。
ARTIMS内では、デフォルトDLLはIMS/DBのOracleソリューションとして提供されています。
DLIライブラリは、COBOLアプリケーションによって渡される命令に従い、トランザクション管理作業(つまり、すでに行われた変更のコミット、すでに作成されたメッセージの送信またすべての変更のロールバック、すべてのメッセージの削除)を実行します。COBOLアプリケーションによってトランザクションをコミットする明確な命令が発行されない場合は、ARTIMPPによってトランザクションがコミットされます。
表 10は、トランザクション管理のプロセスおよびコマンドを示しています。
CHKP (基本): 明示的なコミット・ポイントを設定するために使用されます。
CHKPは、明示的なコミット・ポイントを設定するために使用されます。コミット・ポイントで、IMS/TMが、アプリケーション・プログラムによって行われた変更(通常はデータベースの更新)をコミットし、すべてのメッセージを完了としてマークして(低速PCBの場合はPURGによって)送信し、指定されたIOAREAに次の入力メッセージを取得します。
ARTIMSでは、シミュレートされたCHKPが使用されて、tpcommit()コマンドを使用することですでに行われている変更がコミットされます。完了とマークされているメッセージが送信されます。明示的なPURG呼出しによってマークされていないメッセージも送信されます。
トランザクションが永続トランザクションで、永続モードのARTIMPPによって処理されているか、ARTIBMPTによって処理されている場合、次のメッセージはこのトランザクションの/Qから取得されます。
トランザクションが永続トランザクションでない場合、次のメッセージは取得されません。
'AD': 関数パラメータが無効です。関数呼出しがCBLTDLIに指定されていないか、無効な関数呼び出し名がCBLTDLIに指定されています。
CHKP (シンボリック): 明示的なコミット・ポイントを設定するために使用されます。プログラムを開始できるチェック・ポイントを設定し、プログラムに7つのデータ領域を保存し、現在のGSAM DB取得位置を記録します。
CHKP (シンボリック)は、リカバリのために使用できます。これによって、プログラムによって行われたすべての変更がコミットされ、アプリケーション・プログラムが異常終了した場合は、そのプログラムが再開できるポイントが確立されます。さらに、シンボリックCHKP呼出しは次のことを実行できます。
ARTIMSでは、シュミレートされたCHKP (シンボリック)を使用して、次のことが実行されます。
tpcommit()を使用して、すでに行われた変更をコミットします。これは基本CHKPと同じです。 CHKPと同じ次のメッセージを取得します。| 注意: | ユーザーがシンボリックCHKPを使用してデータ領域を格納した後、ユーザーがXRSTを使用してプログラムを再起動する前に、ART BMPサーバーが再起動された場合、シンボリックCHKPによって格納されたデータ領域は、XRSTによってリストアされません。 |
| 注意: | 環境変数"ART_IMS_CLEAN_DBSTATUS"が"Y" (または"y")に設定されている場合、CHKP (シンボリック)の呼び出し後、関連するすべてのGSAM/DB PCBのステータス・コードは空白になります。 |
GSAM DBの現在の取得位置を記録します。 I/O PCB or AIB, I/O Area, I/O Area Length, IO Area, area length, area, …
最初の領域からチェック・ポイントまでの長さ(バイナリ形式)を含むプログラム内の4バイトのフィールドを指定します。このパラメータは、入力パラメータです。最大7つの領域の長さを指定できます。領域の長さごとに、領域パラメータを指定することも必要です。
'AD': 関数パラメータが無効です。ARTIMSによって関数呼出しが提供されていません。
ROLB: データベースの更新を取り消すために使用されます。
ROLB: データベースの更新を取り消し、挿入されたが伝送に使用できないすべてのメッセージを取り消します。高速PCBの場合、メッセージは、IMSがメッセージの完了を認識したとき(つまりPURG呼出しが呼び出されるとき)に、伝送に使用できるようになります。低速PCBでは、プログラムがコミット・ポイントに到達するまではメッセージが送信可能になりません。
ARTIMSでは、シミュレートされたROLB呼出しは、tpabort()を使用することでアプリケーション・プログラムによって行われたすべての変更をロールバックし、送信されていないメッセージ・バッファを空にするために使用されます。
永続トランザクション(TPまたはトランザクション指向BMPプログラム)では、永続モードのARTIMPPで処理されているか、ARTIBMPTで処理されている場合、ROLBは最後のコミット・ポイントから最初のメッセージの最初のセグメントをIOAREAに返し、/Qの最後のコミット・ポイントから最初のメッセージを削除します。
非永続トランザクション(TPまたはトランザクション指向バッチ)では、ART IMSは現在処理中のメッセージの最初のセグメントのみを返します。
'AD': 関数パラメータが無効です。関数呼出しがCBLTDLIに指定されていないか、無効な関数呼び出し名がCBLTDLIに指定されているか、PCBが指定されていません。
'QE': IOAREAがNULLでない場合、GUが以前に呼び出されていません。
ROLL: データベースの更新を取り消し、ART IMSに返すために使用されます。
ROLLは、データベースの更新を取り消し、挿入されたが伝送に使用できないすべてのメッセージを取り消します。高速PCBの場合、メッセージは、IMSがメッセージの完了を認識したとき(つまりPURG呼出しが呼び出されるとき)に、伝送に使用できるようになります。低速PCBでは、プログラムがコミット・ポイントに到達するまではメッセージが送信可能になりません。
ARTIMSでは、シミュレートされたROLL呼び出しを使用して、tpabort()を使用してアプリケーション・プログラムによって作成されたすべての変更をロールバックし、未送信のメッセージ・バッファを空にします。さらに、ART IMSにはコントロールを返しますが、呼び出し元プログラムにはコントロールを返しません。
永続トランザクション(TPまたはトランザクション指向BMPプログラム)では、永続モードのARTIMPPで処理されているか、ARTIBMPTで処理されている場合、ROLLは/Qの最後のコミット・ポイントから現在のメッセージを削除します。
SYNC: アプリケーション・プログラムによって行われた変更(通常は、データベースの更新)をコミットするために使用されます。
ARTIMSでは、シミュレートされたSYNCは、プログラムが異常終了した場合に、すでに行われた変更をコミットし、プログラム内に再開できる位置を確立しないために使用されます。
I/O PCB or AIB
INQY: 実行環境、宛先タイプおよびステータス、およびセッション・ステータスに関する情報を要求するために使用されます。INQYは、AIBTDLIインタフェースを使用している場合にのみ有効です。
IMSでは、次のサブ関数のみがサポートされています。NULL、FINDbbbb、PROGRAMb、DBQUERYb。
NULLサブ関数の場合、ART/IMSは、ART/IMSがサポート可能なPCB関連情報のみがI/O領域に返されます。"端末の位置"および"トランザクションの位置"は、"LOCAL"を使用する場合にのみサポートされています。
"FINDbbbb"の場合、PCBアドレスはAIBRSA1フィールドで返されます。
64ビット・プラットフォームでは、アドレスの長さが8バイトであるため、AIBRES3の最初の4バイトも使用されます。
サブ関数"PROGRAMb"は、I/O領域の最初の8バイトでプログラム名を返します。
"DBQUERYb"サブ関数の場合、PSBで定義されているDBPCBがない場合、"BJ"がIO PCBステータスで返されます。それ以外の場合、IO PCBステータスは、データベースの使用可能性に従って返されます。
戻りコードおよび理由コードは、IBMの戻りコードおよび理由コードの説明に沿って調整されます。"DBQUERYb"の場合、データベースの使用可能性ステータスは、IOPCBステータスです。
' bb' (2つの空白): 呼出しは成功し、すべてのデータベースが使用可能です。
'BJ': DB PCBがPSBに存在していません。または、PSB内のデータベースのいずれも使用可能でないか、PSBにPCBが存在していません。すべてのデータベースPCB (GSAMを除く)には、INQY DBQUERY呼出しの処理結果としてNAステータス・コードが含まれています。
'BK': PSBの少なくとも1つのデータベースが、使用可能でないか、使用可能性が制限されています。少なくとも1つのデータベースPCBに、INQY DBQUERY呼出しの処理結果としてNAまたはNUステータス・コードが含まれています。
IMSでは、"DBQUERYb"呼出しの後に、各DB PCBのステータス・コードを使用してDBステータスを確認することはできません。
XRST: プログラムを再起動するために使用されます。プログラム内でシンボリック・チェックポイント呼出しを使用する場合、XRST呼出しを使用する必要があります。
XRSTは、プログラムを再起動するために使用されます。プログラム内でシンボリック・チェックポイント呼出しを使用する場合、XRST呼出しを使用する必要があります。
ARTIMSでは、シミュレートされたXRSTは、関連するCHKP (シンボリック)呼出しに保存されたデータをリカバリするために使用されます。GSAMは、CHKP (シンボリック)呼び出しが行われた記録位置に再配置されるので、後続のすべての"GN"呼び出しはリカバリされた位置で続行します。
環境変数"ART_IMS_CLEAN_DBSTATUS"が"Y" (または"y")に設定されている場合、(既存のCHKPIDによる) XRST呼び出しの後、関連するすべてのGSAM/DB PCBのステータス・コードは空白になります。
I/O PCB or AIB, I/O Area, I/O Area Length, IO Area, area length, area, …
次のフィールドは、AIB内で初期化されている必要があります。
XRST呼出し中に使用されません。互換性のために、このパラメータは、依然としてコード化されている必要があります。
'AD': 関数パラメータが無効です。ARTIMSによって関数呼出しが提供されていません。
メッセージ形式およびデバイス形式の定義は、定義文の別の階層セットで実行されます。表11は、すべての定義文とそれらの説明を示しています。
前述の表の"END"文は、入力ファイルの終わりを定義します。その後のすべてのコンテンツは無視されます。入力ファイルに"END"がない場合、MFSGENによって警告メッセージが生成され、入力ファイルにそれが追加されます。
文の名前ごとに、いくつかのフィールドがあります。詳細なフィールド名および値の要件を、表12および表13に示します。他のすべての文は、現在、サポートされていないフィールドとみなされます(表14に示す)。
| 注意: | system-literals include: TIME, DATE1, DATE2, DATE3, DATE4, DATE1Y4, DATE2Y4, DATE3Y4, DATE4Y4, YYDDD, MMDDYY, DDMMYY, YYMMDD, YYYYDDD, MMDDYYYY, DDMMYYYY, YYYYMMDD, DATEJUL, DATEUSA, DATEEUR, DATEISO, LTSEQ, LTNAME. |
| 注意: | LTMSGおよびLPAGENOの場合、警告メッセージが表示され、何も効果はありません。表12にない他の文字列については、構文エラーが表示されます。 |
前述の表の最後の列について、「サポート対象」とはフィールドがサポートされていることを意味し、「警告」とはフィールドはサポートされておらず、このフィールドは指定されてないかのようにツールによって無視され、警告が生成されることを意味します。「エラー」とはフィールドがサポートされておらず、ツールによってエラーが報告され、現在の定義文セットの解析に失敗することを意味します。
MPPによってエクスポートされたサービスへの非端末アクセスをサポートし、より多くのクライアントがMPPによってエクスポートされたサービスを使用できるようにするために、この機能によってARTIMSが非端末アクセスに対応するように強化されています。ユーザーは、非端末アプリケーション(ネイティブのOracle Tuxedoクライアント、SALTクライアント、JCAクライアントなど)を介してARTIMS MPPサービスを使用できます。
この機能は非端末tuxedoクライアント(ネイティブのTuxedoクライアント、SALTクライアント、JCAクライアントを含む)とMQアプリケーションの両方をサポートしています。
非端末tuxedoクライアントの場合、プログラミング・インタフェースが提供されます。クライアントは、次のプログラミング・インタフェースを使用して、MPPサービスにアクセスできます。
非端末Oracle Tuxedoクライアントと異なり、WebSphere MQアプリケーションはOracle Tuxedoクライアントではありません。MQメッセージ形式と、MQアプリケーションと従来のIMSアプリケーション間のメッセージ・フローは、WebSphere MQアプリケーション・プログラミング・ガイドですでに定義済です。IMS環境では、MQアプリケーションがMQ-IMSブリッジを使用して暗黙的なMQIサポートを有効にすることで、従来のIMSアプリケーションをリライト、再コンパイル、再リンクしなくても、WebSphere MQメッセージがそれらにアクセスできるようにします。この機能では、Oracle Tuxedo MQ Adapterを利用して、MQアプリケーションをOracle Tuxedoクライアントに変換します。
ARTIMSは、非端末クライアントとARTIMS MPPサーバー間のブリッジとして機能するサーバー、ARTIGWを提供します。非端末クライアントは、次に示すプログラミング・インタフェースに従って、ARTIGWサービスを呼び出します。ARTIGWはサービス・リクエストをARTMPPに転送します。
ARTIGWと非端末Oracle Tuxedoクライアント間の唯一のインタフェースは、FML表です。
アプリケーション・バッファでIMSトランザクション(TRANS1など)を実行するには、次の手順を実行します。
IMS_SVC_NAMEIMSトランザクション名("TRANS1"など)。
IMS_SVC_FLAG将来使用するために予約されたフィールド。
IMS_SEG_DATAアプリケーション・バッファ・データ。LLZZはバッファ内に必要ありません。セグメントの最大長は32764です(これはARTIMPPの制限です)。
tpcall()/tpacall()を発行します。 ret = tpcall(< tuxclt_service_name>, …)
この< tuxclt_service_name>はARTIGWの通知済サービスで、サービス名が構成可能です。詳細は、ARTIGW CONFIGURATIONを参照してください。
0: ARTIMPPがレスポンス・メッセージによってリクエストを正常に処理します。
1: ARTIMPPがレスポンス・メッセージなしでリクエストを正常に処理します。
インタフェースのFMLフィールド表(ARTIGWFML)とヘッダー・ファイル(ARTIGWFML.h)は、$IMSDIR/includeの下にあります。リスト4は、ARTIGWFMLの内容を示しています。
*base 30000700
#name rel-number type flags comment
#----- ----------- ------ ------- ------------------------
IMS_SVC_NAME 181 string
IMS_SVC_FLAG 182 long
IMS_SVC_RESULT 183 long
IMS_SEG_DATA 184 carray
IMS_SVC_SYSMSG 185 carray
MQ-ARTIMSブリッジは次のメッセージ・タイプを受け入れます。
| 注意: |
| 注意: | 1. 角カッコ[ ]はオプションの複数セグメントを表しています。 |
| 注意: | 2. メッセージにMQIIH構造が含まれる場合、MQMD構造の「フォーマット」フィールドはMQFMT_IMSに設定されます。 |
| 注意: | 3. メッセージにMQIIH構造が含まれない場合、MQMD構造の「フォーマット」フィールドはMQFMT_IMS_VAR_STRINGに設定されます。 |
MQアプリケーションをサポートするには、ユーザーはTuxedo 12cR1 RP17以降を適用し、次に示す手順に従う必要があります。
TM_MQI *SERVICEセクションを次のように定義する必要があります。 この< mq_service_name>はARTIGWの通知済サービスで、サービス名が構成可能です。詳細は、「ARTIGWの構成」を参照してください。
TM_MQI構成ファイルの*SERVERセクションで、次のパラメータを指定する必要があります。UBBCONFIGファイルでは、TM_MQIサーバーが、WebSphere MQ Resource ManagerのTMSサーバーによって構成されたグループ内に存在する必要があります。ARTIGWは、非端末クライアントとARTIMPPサーバー間のブリッジとして機能するTuxedoサーバーです。詳細は、「サーバーの構成」を参照してください。
ARTIGWとARTIMPPが異なるドメインにデプロイされている場合、ARTIGWは<tuxclt_service_name>_REPLY_<grpid>_<srvid>および<mq_service_name>_REPLY_<grpid>_<srvid>という名前でサービスをエクスポートします。GRPIDとSVRIDは5文字です(0で始まります)。
前述のサービス名は、ARTIMPPが属しているすべてのリモート・ドメインのDMCONFIGファイルのDM_REMOTE_SERVICESセクションで構成されている必要があります。さらに、ARTIGWが配置されている各ドメインによって適切なサービス名がエクスポートされ、サービス競合がないようにする必要があります。
たとえば、ARTIGWがドメインGWにあり、ARTIMPPがドメインMPPにあると想定します。ARTIGWは、SRVID=101, SRVGRP= GROUP1で、デフォルト・サービス名を使用するように構成されています。リスト5は、MPPおよびGWドメインに対するDMCONFIGファイルの例を示しています。
| 注意: |
| 注意: | 1. 非端末tuxedoクライアントに対しては、ARTIGWによる変換は行われません。クライアント・アプリケーションから提供されるデータは、ARTMPPサーバーとアプリケーション・プログラムで予想される形式にする必要があります。 |
| 注意: | 2. ARTIGWは、単一スレッドのTuxedoサーバーです。ユーザーはパフォーマンス調整のためにARTIGWの複数インスタンスをデプロイできます。 |
| 注意: | 3. Oracle Tuxedo MQ Adapterは、MQアプリケーションとのMQIインタフェースです。メインフレームとオープン・システムでWebSphere MQの動作は異なっているため、Tuxedo MQ Adapterの動作も異なるように見える可能性があります。 |
| 注意: | たとえば、MQアプリケーションがメインフレーム上にMQPMO_NONEと指定されたメッセージを投入した場合、Oracle Tuxedo MQ Adapterは、MQアプリケーションによってMQCMITが呼び出されるまで、IMSトランザクションをトリガーしません。 |
| 注意: | 注意: オープン・システムでは、IMSトランザクションはすぐにトリガーされます。 |
| 注意: | 4. MQアプリケーションでは、メッセージの処理中にARTIGWまたはARTIMPPによって予期しないエラーが発生した場合、レポート・メッセージが生成され、元のメッセージによって指定されている応答キューに送信されます。レポート・メッセージには元のメッセージのデータは含まれておらず、エラー・メッセージの詳細を示す文字列のみが含まれています。 |
COMMIT_THEN_SEND)のみがサポートされています。ARTIMSは、MQIIHに設定されているコミット・モード値に関係なく、常にトランザクションをコミット・モード0として処理します。ULOGファイルにもあります。 ART IMSは、ALT PCBを使用するプログラムに対してのみ永続メッセージをサポートします。ALT PCBによるプログラム切替えでは、ターゲット・トランザクションが永続トランザクションの場合、メッセージはそのトランザクションの/Qに格納されます。永続トランザクションの定義方法については、imsresource.descに関する項を参照してください。
永続メッセージをサポートするために、ARTIMPPは2つの実行モードで区別されます。1つは標準モードのARTIMPPで、もう一方は永続モードのARTIMPPです。2つのARTIMPPサーバー・モードの定義方法については、ARTIMPPの構成に関する項を参照してください。
標準モードのARTIMPPはトランザクションをサービスとして通知し、端末リクエストやARTIGWからのリクエストなど、フロントエンドからの標準サービス・リクエストを処理します。サービス・リクエストはTuxedoフレームワークによってスケジュールされ、Tuxedo IPCキュー経由で渡されます。
永続モードのARTIMPPは、サービスを通知しません。これは、CLASSが属している永続トランザクションのすべての/Qが、ARTIMPPの" -l class_list"パラメータに対応しているかどうかを監視します。永続トランザクションの/Qからメッセージを取得し、トランザクションに対応するプログラムを実行します。
ARTIBMPTは永続メッセージのサポートに関連するサーバーでもあります。ARTIBMPTが提供するトランザクション指向BMPプログラムは、永続トランザクションのみである必要があります。"トランザクション指向BMP"の詳細は、ARTIBMPTの構成に関する項を参照してください。トランザクション指向BMPプログラムでは、GU操作によってトランザクションの/Qからメッセージを取得します。
表18は、サーバー構成のプロセスとおよびコマンドを示しています。
ARTICL: 3270端末をART IMSランタイムに結合するために使用されます。
UBBCONFIGファイルのMACHINESセクションでMAXWSCLIENTSパラメータを指定する必要があります。MAXWSCLIENTSは、ARTICTLに対して特別な意味を持つ唯一のパラメータです。MAXWSCLIENTSは、3270端末専用に予約されているアクセス・スロットの数を、起動時にOracle ARTに通知します。
MAXWSCLIENTSに対して、ノードに接続できる3270端末の最大数を指定します。デフォルトは0です。指定しない場合、端末から、指定されたマシンに接続できません。
CLOPT="[servopts options] -- -n netaddr -L pnetaddr [-m minh] [-M maxh] [-x session-per-handler]"
minhとmaxhの間にあります。 | 注意: | minhは1-255の数ですが、システム・リソースの制限に従って、それは、(FD_SETSIZE - 24)以下である必要があります。FD_SETSIZEは、1つのプロセスで一度に開くことができるファイルの最大数を意味します。この値は、システム・コマンドulimit -nを使用して取得できます。 |
ARTICTLによって開始されるハンドラ・プロセスの最大数であるmaxhは、1-1000の数であり、デフォルト値は1000です。ハンドラ・プロセスの実際の数は、システム負荷に基づいて、常に minhとmaxhの間にあります。 | 注意: | maxhは1-1000の数ですが、システム・リソースの制限に従って、それは、(FD_SETSIZE - 24)以下である必要があります。FD_SETSIZEは、1つのプロセスで一度に開くことができるファイルの最大数を意味します。この値は、システム・コマンドulimit -nを使用して取得できます。 |
*MACHINES
DEFAULT:
MAXWSCLINETS = 20
...
*SERVERS
ARTICTL SRVGRP="MFSGRP"
SRVID=1000
RESTART=Y GRACE=0
CLOPT="-- -n //hostname:4000 -L //hostname:4002 -m 1 -M 10"
ARTIMPP: TPタイプCOBOL/Cプログラムのサービス・ハンドラおよびコンテナ。
ARTIMPPは、TPタイプCOBOL/Cプログラムのサービス・ハンドラおよびコンテナとして機能するTuxedoサーバーです。ARTIMPPには2つの実行モードがあります。1つは標準モード(CLOPTで-pの指定なし)のARTIMPP、もう一方は永続モード(CLOPTで-pを指定)のARTIMPPです。
標準モードのARTIMPPは、フロントエンドから受け取ったサービス・リクエスト(端末、ARTIGWからのリクエスト)に従って、対応するCOBOL/Cプログラムを起動します。
永続モードのARTIMPPは、ARTIMPPのCLOPTにある"-l class_list"パラメータでクラスが定義されている永続トランザクションの/Qを監視します。これは/Qからメッセージを受信し、対応するCOBOL/Cプログラムを起動します。
CLOPT="[servopts options] -- – l class_list[-p][-x parameter list for DB plugin]"
class_listで指定されているサービスは、標準モードのARTIMPPによって通知されます。
Oracle IMS/DBソリューションの場合、パラメータ・リストは次のとおりです。
-o host:port:dra
これは、IMS/DB用のOracleプラグインで必要とされるパラメータです。
| 注意: | UBBCONFIGファイルでARTIMPPサーバーが永続モードに構成されており、imsresource.descで永続トランザクションが構成されている場合、UBBCONFIGファイルで、imsresource.descの/Qの構成に従って(ARTIMPPの前に)TMQUEUEサーバーを構成する必要もあります。 |
| 注意: | ART IMSを起動する前に、imsresource.desc内の情報に従って/Qを作成する必要もあります。 |
ROLBまたはROLLを発行する永続トランザクションの場合、トランザクションは永続モード・サーバーの1つのARTIMPPによってのみ処理できます。つまり、(imstrans.descで定義された)トランザクションのCLASS定義は、永続モード・サーバーの1つのARTIMPPの-lパラメータのみと一致します。
ARTIMPP_ORAは、ARTIMPPのすべての機能を備えています。また、外部リソース・マネージャ(RM)として使用されるOracle Databaseもサポートできます。これは、Oracle Databaseによって提供されるいくつかのライブラリを使用します。Oracle Databaseでこの環境変数を使用するには、UBBCONFIGファイルでRMセクションを適切に構成する必要があります。
ARTIBMP: BATCHタイプCOBOL/Cプログラムのプログラム・コンテナ。
ARTIBMPは、BATCHタイプのCOBOL/Cプログラムのプログラム・コンテナとして機能するTuxedoサーバーであり、受信したプログラム名に応じて対応するCOBOLプログラムを起動します。
CLOPT="[servopts options] -- [-x parameter list for DB plugin]"
Oracle IMS/DBソリューションの場合、パラメータ・リストは次のとおりです。
-o host:port:dra
これは、IMS/DB用のOracleプラグインで必要とされるパラメータです。
ARTIBMPT: トランザクション指向バッチ・プログラムを処理するOracleTuxedoサーバー。
トランザクション指向BMPプログラムは、ARTIBMPTによって処理され、 ${IN}パラメータの指定されたDFSRRC00によってトリガーされる必要があります。
トランザクション指向BMPプログラムは、imstrans.descで定義され、imsapps.descでもTYPE=BATCHによって定義されているプログラムです。
トランザクション指向BMPプログラムは永続トランザクションにする必要があり、imsresource.descで定義する必要があります。
ARTIBMPTサーバーはトランザクション指向BMPプログラムのみを処理します。
ARTIMPP SRVGRP="identifier" SRVID="number"
CLOPT="[servopts options] -- -l class_list -x parameter list for DB plugin"
Oracle IMS/DBソリューションの場合、パラメータ・リストは次のとおりです。
-o host:port:dra
これは、IMS/DB用のOracleプラグインで必要とされるパラメータです。
| 注意: | ARTIBMPTがUBBCONFIGファイルで構成されており、トランザクション指向BMPトランザクションがimsresource.descで構成されている場合、UBBCONFIGファイルで、imsresource.descの/Qの構成に従ってTMQUEUEサーバーを構成する必要もあります。 |
ROLBまたはROLLを発行するトランザクション指向BMPプログラムの場合、トランザクションは1つのARTIBMPTサーバーによってのみ処理できます。
つまり、(imstrans.descで定義された)トランザクションのCLASS定義は、1つのARTIBMPTサーバーの"-l class_list"パラメータのみと一致します。
ARTIBMP_ORAは、ARTIBMPのすべての機能を備えています。また、外部リソース・マネージャ(RM)として使用されるOracle Databaseもサポートできます。これは、Oracle Databaseによって提供されるいくつかのライブラリを使用します。Oracle Databaseでこの環境変数を使用するには、UBBCONFIGファイルでRMセクションを適切に構成する必要があります。
ARTIADM: ART IMSランタイムの管理を担当するOracle Tuxedoサーバー。
分散ターゲット環境では、このサーバーを各ノード上に構成して、構成の通知を実行することができます。これらのサーバーを使用すると、マスター・ノード上では、構成ファイルのみ構成する必要があり、管理サーバーは構成ファイルを各スレーブ・ノードに通知します。
起動時に、マスター・ノード上で動作している管理サーバーは、ディレクトリ${ART_IMS_CONFIG}にあるすべての構成ファイルを読み込みます。スレーブ・ノード上で動作する各管理サーバーの起動起動時には、マスター・ノード上の管理サーバーと通信して、構成ファイルの内容をフェッチします。
続いてスレーブ・ノード上の管理サーバーは、スレーブ・ノード上のディレクトリ${ART_IMS_CONFIG}にある、対応する構成ファイルに書き込みます。存在しない場合は、新しい構成ファイルが作成されます。
ARTITERM: 異なるドメインに配置されているARTICTLとARTIMPPの間のメッセンジャとして機能します。
クロス・ドメイン環境では、ARTITERMサーバーは、異なるドメインに配置されているARTICTLとARTIMPPの間のメッセンジャとして機能するために使用されます。ARTITERMは、ARTIMPPに特別なサービスを提供し、したがって、ARTIMPPはデータをARTITERMに渡すことができ、それは次にそのデータをARTICTLに渡します。
ARTIGW: 非端末クライアントとARTIMPPサーバー間のブリッジとして機能するOracle Tuxedoサーバー。
ARTIGWは、非端末クライアントとARTIMPPサーバー間のブリッジとして機能するOracle Tuxedoサーバーです。主な機能は次のとおりです。
MQアプリケーションのリクエスト・メッセージの場合、MQメッセージを、ARTIMPPで使用可能な形式に変換します。応答メッセージの場合は、ARTIMPPの応答メッセージをMQメッセージに変換します。
非端末Oracle Tuxedoクライアント・リクエスト・メッセージの場合、ARTIGWは、クライアントのFML32バッファをプログラムが必要とするメッセージ形式に転送する役割を果たし、そのメッセージをMPPに送信します。次にMPPメッセージをデコードして、標準のFML32バッファをクライアントに送信します。
セッション管理を使用して、非同期のARTIMPP応答と元のARTIGWクライアント・リクエストを関連付けます。
セッション管理を使用して、ARTIMPPからの非同期の応答と、ARTIGWクライアントからの元のリクエストを関連付けます。
CLOPT="[servopts options] [-m mq_service_name] [-s tuxclt_service_name] [-D trace_level]"
| 注意: | mq_service_nameとtuxclt_service_nameはどちらも、先頭を"<domainid>_"にすることはできません。そうでなければ、ARTIGWはレスポンス・メッセージを正しく取得できません。この<domainid>は、ARTIMPPが属しているドメインのIDです。 |
ODBAPROX: z/OS上のソケット・サーバーであり、TCP/IPを介してARTIMSサーバーと通信します。
ODBAプロキシは、ソケット・サーバーであり、TCP/IPを介してARTIMSサーバーと通信します。ODBAPROXは、ARTIMS内のプログラムと通信するように開発され、これらのプログラムのかわりにデータベース処理を実行します。
ODBAPROX -h host -l command_port -p odba_port -n max_handler_num [-D]
詳細は、Oracle Tuxedo Application Runtime for IMSユーザーズ・ガイドのODBAプロキシの使用方法に関する項を参照してください。
Tuxedoでは、セキュリティ・メカニズムのどのタイプでも、すべてのユーザーがTuxedo ATMIアプリケーションの参加のプロセスの一部としてアプリケーション・パスワードを入力することが要求されますが、ART IMSでは、IMSがz/OS上に配置されている場合と同じ動作を保持するためにそれは削除されました。ユーザーはアプリケーション・パスワードをNULLとして保持する必要があります。Tuxedoアプリケーション・パスワードを構成する方法の詳細情報は、Tuxedoのドキュメントを参照してください。USER_AUTHおよびACL/必須ACLセキュリティ・メカニズムでは、ユーザーはART IMSランタイムに参加するために有効なユーザー名とパスワードを入力することが要求されます。ユーザーごとのパスワードは、tpusrという名前のファイルに格納されたユーザー名に関連付けられているパスワードと一致する必要があります。クライアント名は、使用されません。tpusrのパスワードおよびユーザー名に対するユーザーごとのパスワードの照合は、Tuxedo認証サーバーAUTHSVRによって提供される、Tuxedo認証サービスAUTHSVCによって行われます。Tuxedo USER_AUTHおよびACL/必須ACL認証を構成する方法の詳細は、Tuxedoのドキュメントを参照してください。
インストール済ARTIMSサブシステムのルート・パス(絶対パス)が含まれている環境変数。
ART_IMS_DBART_IMS_CONFIG 構成ファイル(*.descや*.psbなど)の構成ファイルが配置されている絶対パスを指定するためにART IMSによって必要とされる環境変数。
ART_IMS_FMT MFSGENによって生成された制御ブロック・ファイルが配置されている絶対パスを指定するためにARTICTLによって必要とされる環境変数。これは、PATH環境変数に類似した一連のパスであり、セパレータは":" です。この変数が指定されていない場合、PATH APPDIRが使用されます。
COBPATHMicrofocus COBOL環境によって必要とされる環境変数。これは、動的にロードされるCOBOLプログラムを検索する1つ以上のディレクトリを定義します。その使用方法は、Unix PATHに似ています。
COB_LIBRARY_PATH COBOL-ITを使用している場合、COBOLプログラムの検索順序を定義するためにCOBOL-ITによってCOB_LIBRARY_PATHが必要とされます。これは、動的にロードされるCOBOLプログラムを検索する1つ以上のディレクトリを定義します。その使用方法は、Unix PATHに似ています。
INTERCODE インバウンド・データのどのエンコーディング・タイプを使用するかを指定します。この値は、一般的なプラットフォームで使用されるどのエンコーディング・タイプでもかまいません。この変数が指定されていない場合、ASCIIが使用されます。この変数が指定されている場合、EXTERCODEも指定する必要があります。
EXTERCODEアウトバウンド・データのどのエンコーディング・タイプを使用するかを指定します。この値は、z/OSプラットフォームで使用されるどのEBCDICエンコーディング・タイプでもかまいません。この変数が指定されていない場合、IBM-37が使用されます。この変数が指定されている場合、INTERCODEも指定する必要があります。
ART_IMS_CLEAN_DBSTATUS GSAM/DB PCBステータス・コードの設定を有効にするために使用します。"Y"または"y"に設定すると、DLIがCHKP (シンボリック)を呼び出し、XRST (既存のCHKPIDを指定、通常の起動ではない)がすべてのGSAM/DB PCBステータス・コードを空白にリセットします。そうでない場合、ART IMSはこれらのステータス・コードをリセットしません。
表 19は、3270端末上で入力でき、ARTIMSで処理できるコマンドおよび関連するパラメータを示しています。
この項のすべての構成ファイルで、キーおよび非リテラル値について大文字小文字が区別されません。例: bool (yes|no)およびenumリテラル値とそれらの大文字小文字は保持されます。コメント行には、前に"*"を付ける必要があります。
[section name]
Field1=value1
Field2=value2
….
[section name]
….
[section name]
…
表23は、z/OS上のIMSのTRANSACT MACROからフィールド名がマップされた構成ファイルの例を示しています。
表24は、z/OS上のIMSのAPPLCTN MACROからフィールド名がマップされた構成ファイルの例を示しています。
このファイルで定義されるトランザクションはすべて永続トランザクションです。プログラム切替えによる永続トランザクションに対するメッセージは/Qに格納されます。ART IMSを起動する前に、このファイル内に構成された対応するキュー・スペースに、キュー名をトランザクション名と同じにして、すべての永続トランザクション用の/Qを作成する必要があります。表25に、imsresource.descのフィールド名をリストします。
リスト7は、キュー・スペースと参照用のキューを作成するためのスクリプト例を示しています。このスクリプトを実際の要件に合わせてカスタマイズできます。詳細は、Oracle Tuxedo /Qのガイドを参照してください。
qmadmin ${ARTIMS QSPACE_DEVICE} <<!end
crdl . . .
qspacecreate . . .
qcreate TRAN11 fifo none 2 30 80% 0 ""
qcreate TRAN12 fifo none 2 30 80% 0 ""
!end
--->
qmadmin ${ARTIMS QSPACE_DEVICE} <<!
echo
crdl ${ARTIMS QSPACE_DEVICE} 0 10000
qspacecreate
${QUEUE_SPACENAME}
22839
5000
50
1000
1000
10000
errque
y
16
qopen ${QUEUE_SPACENAME}
qcreate TRAN11 fifo none 2 30 80% 0% ""
qcreate TRAN12 fifo none 2 30 80% 0% ""
qcreate errque fifo none 2 30 80% 0% ""
q
! ROLBまたはROLLを発行する永続トランザクションの場合、トランザクション・キューの作成の再試行回数は、比較的大きな数に設定する必要があります(最大で2147483647)。
| 注意: | 再試行回数は、特定のメッセージが永続トランザクションに入れられる回数の2倍以上の数に設定することをお薦めします。 |
imsdbs.descは、 $ART_IMS_CONFIGの下にあります。
一部のimsdbs.descフィールド構成は、z/OS上のIMSのなんらかのDBD文からマップされています。ROLBまたはROLLを発行する永続トランザクションの場合、トランザクション・キューの作成の再試行回数は、比較的大きな数に設定する必要があります(設定可能な最大値は2147483647)。
| 注意: | 再試行回数は、特定のメッセージが永続トランザクションに入れられる回数の2倍以上の数に設定することをお薦めします。 |
$appnameは、imsapps.descでタイプがTPと定義されているCOBOLアプリケーション・プログラムの名前であり、$appname.psbは、それに対応するPSB定義ファイルです。タイプがBATCHのアプリケーション・プログラムの場合は、$appname.psbは使用されず、DFSRRC00を呼び出すスクリプトによってPSBが提供される必要があります。
表27は、z/OS上のIMSのPCB文からフィールド名がマップされた構成ファイルの例を示しています。
segments.descは、データベース内のセグメントを定義します。1つのデータベース(GSAMデータベースを除く)は、1つのsegments.descを持ち、それは$ART_IMS_CONFIG/db/$dbnameの下にあります。
segments.desc内のフィールドは、DBDのSEGM文からマッピングされています。
| 注意: | 可変長セグメントの場合、BYTES定義がSEGM文からマップされ(BYTES= (max bytes,min bytes)など)、最大バイト数は最小バイト数以上である必要があります。可変長セグメントは、2バイト・フィールドで始まる必要があり、それによって、その2バイトの長さのフィールドを含めたセグメントの長さが定義されます。 |
| 注意: | SEGPGM_A2E、SEGPGM_E2AおよびSSAPGM_A2E、KFAPGM_E2Aの場合: |
| 注意: | 1. 上述の4つのパラメータがどれもsegments.descで定義されていない場合、$segname.descが存在する必要があり、後述するデータ変換を行うために$segname.descが使用されます。 |
| 注意: | 2. SEGPGM_A2EとSEGPGM_E2A。 |
| 注意: | SEGPGM_A2EとSEGPGM_E2Aは、両方合わせて定義済であるか、未定義である必要があります。SEGPGM_A2EとSEGPGM_E2Aが定義済の場合、ODBAプラグインはSEGPGM_A2E/SEGPGM_E2Aを使用してセグメント・データの変換を実行します。この場合、$segname.descが存在していても、$segname.descがセグメント・データの変換の実行に使用されることはありません。 |
| 注意: | SEGPGM_A2EとSEGPGM_E2Aが未定義の場合、ODBAプラグインは$segname.descのFIELDS定義を使用してセグメント・データの変換を実行します。 |
| 注意: | 3. SSAPGM_A2E |
| 注意: | SSAPGM_A2Eが定義されている場合、ODBAプラグインは定義済のCOBOLプログラムを使用して、このセグメントの限定されたSSAの変換を実行します。 |
| 注意: | SSAPGM_A2Eが定義されていない場合、ODBAプログラムは$segname.descのKEYフィールド・タイプ定義を使用して、このセグメントのSSAのKEY値を変換します。 |
| 注意: | 4. KFAPGM_E2A。 |
| 注意: | KFAPGM_E2Aが定義されている場合、ODBAプラグインは定義済のCOBOLプログラムを使用して、このセグメントのキー・フィードバック領域のデータ変換を実行します。 |
| 注意: | KFAPGM_E2Aが定義されていない場合、ODBAプログラムは$segname.descのFBAFIELD定義を使用して、このセグメントのキー・フィードバック領域のデータ変換を実行します。 |
| 注意: | 上述のCOBOLプログラムの生成およびコンパイル方法については、Oracle Tuxedo Application Rehosting Workbenchユーザー・ガイドおよびOracle Tuxedo Application Rehosting Workbenchリファレンス・ガイドのバッファ変換に関する項を参照してください。 |
| 注意: | ART IMSサーバーを起動する前に、コンパイル済の変換プログラムをCOBPATH (Microfocusの場合)またはCOB_LIBRARY_PATH (CITの場合)の下に配置します。 |
$segname.descは、セグメント内のフィールドを定義します。$segname.descは、imsdbs.descでGSAMとMSDBのどちらでもないアクセス・タイプが定義されているデータベースに対してのみ存在します。$segname.descは$ART_IMS_CONFIG/db/$dbnameの下に配置されています。
フィールド・タイプの定義はDBDのFIELD文によるものだけではありません。ユーザーはCOBOLプログラムでの使用方法に従ってフィールド・タイプを定義する必要もあります。
フィールドのタイプを定義しない場合、デフォルトのフィールド・タイプはCになります。
表30は、COBOLプログラムでの使用方法に基づくフィールド定義のマッピング表を示しています。
取得またはISRT呼出しが完了すると、ODBAプロキシからキー・フィードバック領域が返されます。DB PCBでキー・フィードバック領域を変換するために、FBAFIELDという名前の特別なFIELDが予約されています。
セグメント連結キーは、それぞれの親のキーと独自のキーで構成されます。キー形式は左から右へと配置され、ルート・セグメントのキー形式で始まり、階層パスが続きます。
$segmentで定義されているこの特別なFIELD(FBAFIELD)によって、セグメントの連結キーの形式を定義する必要があります。キー・フィードバック領域は、segnameでのこのフィールドの定義に従って変換されます。
リスト8は、$segname.descの定義例を示しています。
[field]
NAME=FBAFIELD
START=0
BYTES=11
TYPE=M
FORMAT=5,P;6,C
BYTESはキー・フィードバック領域の長さ合計(つまり連結キーの長さ合計)を定義します。
TYPEは連結キーのタイプを定義します。連結キーに異なるタイプが含まれる場合は、TYPEをMに設定する必要があります。
TYPE=Mの場合、FORMATで連結キーの形式を定義する必要があります。
$ segname.descで特別なFIELD(FBAFIELD)が定義されていない場合、segnameではキー・フィードバック領域がデフォルトでTYPE Cとして変換されます。
| 注意: | SSAの検索キー・フィールドの場合、フィールド名は、DBDで定義されている検索KEY FIELD名、およびSSAで使用されている名前と同じである必要があります。 |
|