![]() |
![]() |
![]() |
![]() |
![]() |
Oracle Tuxedo Mainframe Adapter for TCP (IMS)(以後TMA TCP for IMSと呼ぶ)のクライアントおよびサーバーのトランザクションは、通常のIMS MPPトランザクションですが、Oracle TMA TCP for IMSゲートウェイをOTMAクライアントとして実行している場合は、FastPathトランザクションもそれに該当します。IMSがサポートしているアプリケーション・プログラミング言語であれば、どの言語でもトランザクションを記述できます。このドキュメントに記載されているサンプル・トランザクションのソース・コードは、Oracle TMA TCP for IMSのSOURCE配布ライブラリに収録されています。次のサンプル・トランザクションは、このドキュメントに記載されているものです。次のサンプル・トランザクションは、このドキュメントに記載されているものです。
1. リモート・システムで実行されているクライアント・トランザクションがIMSゲートウェイのサービスにリクエストを発行します。リモート・ゲートウェイは、IMSゲートウェイにそのリクエストを転送し、これを受けたIMSゲートウェイはサーバー・リクエスト・メッセージをフォーマットしてから、OTMAを介して間接的に挿入します。サーバー・リクエスト・メッセージは、サービスを提供しているIMSサーバー・トランザクションに処理されるまで待機します。
2. IMSは、指定されたサーバー・トランザクションがIMSメッセージ・キューからサーバー・リクエスト・メッセージを取得し、その処理に問題がないかぎり常に実行するようにスケジュール設定します。レスポンスが要求されている場合、サーバー・トランザクションはサーバー・レスポンス・メッセージをフォーマットしてから、Oracle TMA TCP for IMSのサーバー・レスポンス・トランザクション宛てのIMSメッセージ・キューに挿入します。リストE-1は簡単なエコー・トランザクションです。受け取ったリクエスト・データを単にそのままレスポンスとして戻します。リストE-1 IMSサーバー・トランザクションのサンプルCBL APOST *****************************************************************
FILE: BEASVR01
PURPOSE: SAMPLE IMS SERVER TRANSACTION FOR USE WITH
BEA TMA TCP FOR IMS
COMMENTS: THIS IS A SIMPLE ECHO SERVER TRANSACTION THAT ISSUES A
RESPONSE CONSISTING OF THE SAME DATA AS RECEIVED.
LANGUAGE: COBOL
COPYRIGHT (C) 1997 BEA SYSTEMS, INC. ALL RIGHTS RESERVED
*****************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. BEASVR01.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 GU PIC X(04) VALUE 'GU '.
77 CHNG PIC X(04) VALUE 'CHNG'.
77 ISRT PIC X(04) VALUE 'ISRT'.
77 PURG PIC X(04) VALUE 'PURG'.
01 BEAGW PIC X(08) VALUE 'BEATCPI '.
*****************************************************************
* REQUEST MESSAGE *
*****************************************************************
01 REQUEST-MESSAGE.
(1) COPY SERVER.
05 USER-DATA PIC X(512).
*****************************************************************
* RESPONSE MESSAGE *
*****************************************************************
01 REQUEST-MESSAGE.
(1) COPY SERVER.
05 USER-DATA PIC X(512).
LINKAGE SECTION.
****************************************************************
* I/O PCB *
****************************************************************
01 01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
*****************************************************************
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.
PERFORM IOPCB-GET THRU IOPCB-GET-EXIT.
PERFORM ECHO-MSG THRU ECHO-MSG-EXIT.
PERFORM ISRT-MSG THRU ISRT-MSG-EXIT.
GO TO 9999-RETURN.
*****************************************************************
* RETRIEVE THE REQUEST MESSAGE FROM THE IMS QUEUE *
*****************************************************************
IOPCB-GET.
(2) CALL 'CBLTDLI' USING GU, IOPCB, REQUEST-MESSAGE.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
IOPCB-GET-EXIT.
EXIT.
*****************************************************************
* COMPOSE THE RESPONSE MESSAGE *
*****************************************************************
ECHO-MSG.
* THE RESPONSE MESSAGE HAS THE SAME BASIC FORMAT AS
* THE REQUEST MESSAGE.WE CHANGE THE TRAN CODE TO THAT
* OF THE DESTINATION.NOTE THAT THE FIELD
* BEA-RESERVED MUST BE COPIED INTACT FROM THE
* REQUEST MESSAGE TO THE RESPONSE MESSAGE.FOR RE-
* SPONSE DATA, WE SIMPLY RETURN THE REQUEST DATA.
* HENCE THIS IS AN ECHO TRANSACTION.
(3) MOVE REQUEST-MESSAGE TO RESPONSE-MESSAGE.
(4,6) MOVE BEAGW TO TRAN-CODE IN RESPONSE-MESSAGE.
ECHO-MSG-EXIT.
EXIT.
*****************************************************************
* INSERT RESPONSE MESSAGE TO IMS QUEUE *
*****************************************************************
ISRT-MSG.
* (5) CALL 'CBLTDLI' USING ISRT, IOPCB, RESPONSE-MESSAGE.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
ISRT-MSG-EXIT.
EXIT.
*****************************************************************
* INSERT RESPONSE MESSAGE TO ALTERNATE PCB *
*****************************************************************
PCB-ISRT.
9999-RETURN.
GOBACK.
1. Oracle TMA TCP for IMSサーバー・リクエスト/レスポンス・メッセージのヘッダーのフォーマットは、SERVERというCOBOLコピーブックに掲載されています。それに相当するC言語のヘッダーはBEATCPI.Hヘッダー・ファイルに記述されています。どちらもOracle TMA TCP for IMSのINCLUDE配布ライブラリに収録されています。
2.
4. レスポンス・メッセージ内のTRAN-CODEを、Oracle TMA TCP for IMSのトランザクション・コードに設定します(この例ではBEAGW="BEATCPIですが、インストール環境によっては名前が異なることもあります)。IMSクライアント・トランザクションは、Oracle TMA TCP for IMSを介してアクセス可能な指定のリモート・サービスに対するリクエストを発行します。IMSクライアント・リクエストは、サーバー・リクエストとは異なり、2つのフェーズに分かれ、リクエスト・フェーズとレスポンス・フェーズの順に処理します。リクエストとレスポンスを処理する際には、それぞれ別々のトランザクション(たとえばT1とT2)を実行する必要があります。
1. リクエスト・トランザクションT1は、クライアント・リクエスト・メッセージをIMSメッセージ・キューに挿入して、リモート・ゲートウェイが提供するサービスに対するリクエストを発行します。クライアント・リクエスト・メッセージはTMA TCP for IMSによる処理待ちの状態になり、レスポンス・トランザクション(T2)の名前(トランザクション・コード)を指定する必要があります。
1. 次のIMSクライアント・リクエスト・トランザクションのサンプルは、リモート・システムのTOUPPERというサービスにリクエストを発行します。TOUPPERサービスは、大文字に変換したリクエスト・データで構成されるレスポンスを戻します。
1. 前のサンプルでは使用していませんが、TMA TCP for IMSクライアント・リクエスト/レスポンス・メッセージのヘッダーのフォーマットは、CLIENTというCOBOLコピーブックに記述されています。それに相当するC言語のヘッダーはBEATCPI.Hヘッダー・ファイルに記述されています。どちらもTMA TCP for IMSのINCLUDE配布ライブラリに収録されています。
• CRR-TRANCODEをTMA TCP for IMSゲートウェイのトランザクション・コードに設定します(この例ではBEATCPIになっていますが、インストール環境によっては異なることもあります)。
• BEA-RESERVED-1 をバイナリ・ゼロに初期化する必要があります。
• CRR-HEADER-LENをクライアント・リクエストのヘッダーの長さ(96バイト)に設定します。
• CRR-REQUEST-TYPEを、レスポンスを要求することを示す1に設定します。
• CRR-RESPONSE-FORMATを、レスポンスを1つのメッセージ・セグメントで戻すことを示す0に設定します。
•
• CRR-SERVICE-NAMEをリクエスト対象のサービスの名前(TOUPPER)に設定します。この名前は、TMA TCP for IMSにローカル定義されているサービスの名前でなければなりません。サービスを提供するリモート・システムに定義されているサービス名と、この名前は一致することもあれば一致しないこともあります。
• CRR-RESPONSE-TRANを指定のレスポンス・トランザクション(BEACRP01)の名前に設定します。
• CRR-REQUEST-DATA-LENを送信対象のユーザー定義リクエスト・データの長さに設定します。
• CRR-MAX-RESPONSE-LENを、適応可能なレスポンス・データの最大長に設定します。
• BEA-RESERVED-2 をバイナリ・ゼロに初期化する必要があります。
• CRR-CONTEXT-DATA-LENを、格納するユーザー定義のコンテキスト・データの長さに設定します。
5. メッセージ・セグメントの長さ(LL)をクライアント・リクエスト・メッセージ全体の長さ(ヘッダー + コンテキスト・データ + リクエスト・データ)に設定します。
6.
7.
9. 次のIMSクライアント・レスポンス・トランザクションのサンプルは、リモート・システムのTOUPPERというサービスに対するリクエストからのレスポンスを処理します。TOUPPERサービスは、大文字に変換したリクエスト・データで構成されるレスポンスを戻します。リストE-3 IMSレスポンス・トランザクションのサンプル
1. 前のサンプルでは使用していませんが、TMA TCP for IMSクライアント・リクエスト/レスポンス・メッセージのヘッダーのフォーマットは、CLIENTというCOBOLコピーブックに記述されています。それに相当するC言語のヘッダーはBEATCPI.Hヘッダー・ファイルに記述されています。どちらもTMA TCP for IMSのINCLUDE配布ライブラリに収録されています。
3. CRR-RESPONSE-FORMATは、元のリクエストに指定されたとおりの値で、レスポンスのフォーマットが単体のセグメントなのか複数のセグメントなのかを表します。マルチセグメント形式のレスポンスが指定された場合、レスポンス・メッセージはレスポンス・ヘッダー、コンテキスト・データ、レスポンス・データの3つのセグメントで構成されます。
4. CRR-ERROR-CODEはエラー発生の有無を表します。このフィールドがゼロの場合は、リクエストが正常に処理されたことを表します。それ以外の場合は、エラーが発生しており、エラー・コードによってエラー・タイプが示されます。レスポンスを処理する前に、エラー・コードをチェックする必要があります。
5. エラーの発生が通知された場合に、CRR-REASON-CODEが補足情報を示すことがあります。値がゼロの場合は、補足情報はないことを表します。
7. CRR-RESPONSE-DATA-LENには、戻されるレスポンス・データの長さが格納されます。切捨てのエラーが発生した場合でも、このフィールドにはレスポンス・データの実際の長さ(切捨て前の長さ)が格納されます。戻されるレスポンス・データのうち、CRR-MAX-RESPONSE-LEN.に指定された長さを超えた分は切り捨てられます。
8. エラー・コードと理由コードによって成功または失敗が表されるレスポンスは、CRR-ORIGIN-TERMINALに保持されたLTERMに従って、元の(リクエスト元の)端末に書き込まれます。この目的で使用する場合は、代替PCBを使用する必要があります。リストE-4 IMSリクエスト/レスポンス・トランザクションのサンプル
1. 前のサンプルでは使用していませんが、TMA TCP for IMSクライアント・リクエスト/レスポンス・メッセージのヘッダーのフォーマットは、CLIENTというCOBOLコピーブックに記述されています。それに相当するC言語のヘッダーはBEATCPI.Hヘッダー・ファイルに記述されています。どちらもTMA TCP for IMSのINCLUDE配布ライブラリに収録されています。
2. その他の点では、実際のリクエスト処理はBEACRQ01が実行する処理と変わりません。
3. その他の点では、実際のレスポンス処理はBEACRP01が実行する処理と変わりません。