IMSユーザー・ガイド

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

IMSクライアントおよびサーバーのトランザクションのサンプルTransactions

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配布ライブラリに収録されています。次のサンプル・トランザクションは、このドキュメントに記載されているものです。

 


IMSサーバー・トランザクション

IMSサーバー・トランザクションは、指定されたサービスを提供する役割を担い、そのサービスに対するクライアント・リクエストを処理します。サーバー・リクエストの処理は、次の順番に従います。

  1. リモート・システムで実行されているクライアント・トランザクションがIMSゲートウェイのサービスにリクエストを発行します。リモート・ゲートウェイは、IMSゲートウェイにそのリクエストを転送し、これを受けたIMSゲートウェイはサーバー・リクエスト・メッセージにフォーマットしてから、OTMAを介して間接的に挿入します。サーバー・リクエスト・メッセージは、サービスを提供しているIMSサーバー・トランザクションに処理されるまで待機します。
  2. IMSは、指定されたサーバー・トランザクションがIMSメッセージ・キューからサーバー・リクエスト・メッセージを取得し、その処理に問題がないかぎり常に実行するようにスケジュール設定します。レスポンスが要求されている場合、サーバー・トランザクションはサーバー・レスポンス・メッセージをフォーマットしてから、Oracle TMA TCP for IMSのサーバー・レスポンス・トランザクション宛てのIMSメッセージ・キューに挿入します。
  3. Oracle TMA TCP for IMSはIMSメッセージ・キューまたはOTMAインタフェースからサーバー・レスポンス・メッセージを取得し、リクエストの発行元のリモート・システムにレスポンスを戻します。

BEASVR01 - 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. GU(固有セグメントを取得)呼出しを発行して、IMSメッセージ・キューからリクエスト・メッセージを取得します。サーバー・リクエスト・メッセージは常に単体のメッセージ・セグメントにフォーマットされるため、GN(次のセグメントを取得)呼出しは厳密に言えば不要です。
  3. USER-DATA(ユーザー定義のリクエスト・データ)は、単にリクエスト・メッセージからレスポンス・メッセージにコピーします。
  4. レスポンス・メッセージ内のTRAN-CODEを、Oracle TMA TCP for IMSのトランザクション・コードに設定します(この例ではBEAGW="BEATCPIですが、インストール環境によっては名前が異なることもあります)。
  5. ISRT(挿入)呼出しを発行して、Oracle TMA TCP for IMSにレスポンスを戻すためのメッセージをIMSメッセージ・キューに挿入します。
  6. レスポンスが要求されていない場合、サーバー・トランザクションは単に、リクエストで要求されている処理を実行し、IMSに戻ります(Oracle TMA TCP for IMSにレスポンス・メッセージは送信しません)。

 


IMSクライアント・トランザクション

IMSクライアント・トランザクションは、Oracle TMA TCP for IMSを介してアクセス可能な指定のリモート・サービスに対するリクエストを発行します。IMSクライアント・リクエストは、サーバー・リクエストとは異なり、2つのフェーズに分かれ、リクエスト・フェーズとくレスポンス・フェーズの順に処理します。リクエストとレスポンスを処理する際には、それぞれ別々のトランザクション(たとえばT1T2)を実行する必要があります。

リクエスト・フェーズ

クライアント・リクエストの処理は次のようになっています。

  1. リクエスト・トランザクションT1は、クライアント・リクエスト・メッセージをIMSメッセージ・キューに挿入して、リモート・ゲートウェイが提供するサービスに対するリクエストを発行します。クライアント・リクエスト・メッセージはTMA TCP for IMSによる処理待ちの状態になり、レスポンス・トランザクション(T2)の名前(トランザクション・コード)を指定する必要があります。
  2. TMA TCP for IMSゲートウェイはクライアント・リクエスト・メッセージを取得し、リクエスト対象のサービスを提供しているリモート・システムにリクエストを転送します。

レスポンス・フェーズ

クライアント・レスポンスの処理は次のようになっています。

  1. クライアント・レスポンス・メッセージは受信されたときに(要求があった場合)、フォーマットされてからIMSメッセージ・キューに直接挿入されます。OTMAクライアントが実行されている場合には、レスポンスはOTMAインタフェースを介して間接的にIMSメッセージ・キューに格納されます。クライアント・レスポンス・メッセージは、指定のレスポンス・トランザクション(T2)に処理されるまで待機します。
  2. レスポンス・トランザクションはIMSのスケジュール設定に従って、IMSメッセージ・キューからクライアント・レスポンス・メッセージを取得します。レスポンス・トランザクションがレスポンスと元のリクエストを関連付けできるようにするための情報が、クライアント・レスポンス・メッセージに格納されます。

BEACRQ01 - IMSクライアント・リクエスト・トランザクションのサンプル

次のIMSクライアント・リクエスト・トランザクションのサンプルは、リモート・システムのTOUPPERというサービスにリクエストを発行します。TOUPPERサービスは、大文字に変換したリクエスト・データで構成されるレスポンスを戻します。

リストE-2 IMSクライアント・リクエスト・トランザクションのサンプル
CBL APOST                                                             
IDENTIFICATION DIVISION.
PROGRAM-ID. BEACRQ01.
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 MSG-IN.
05 MI-LL PIC S9(04) COMP VALUE +0.
05 MI-ZZ PIC S9(04) COMP VALUE +0.
05 MI-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MI-AREA. PIC X(91) VALUE SPACES.
10 MI-DATA

(1) 01 CLIENT-REQUEST.
05 CRR-LL PIC 9(04) COMP VALUE 0.
05 CRR-ZZ PIC 9(04) COMP VALUE 0.
05 CRR-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 BEA-RESERVED-1 PIC X(03) VALUE LOW-VALUES.
05 CRR-HEADER-LEN PIC 9(08) COMP.
05 CRR-CONTEXT-DATA-LEN PIC 9(08) COMP.
05 CRR-REQUEST-DATA-LEN PIC 9(08) COMP.
05 CRR-MAX-RESPONSE-LEN PIC 9(08) COMP.
05 CRR-REQUEST-TYPE PIC 9(08) COMP.
05 CRR-RESPONSE-FORMAT PIC 9(08) COMP.
05 CRR-ERROR-CODE PIC 9(08) COMP.
05 CRR-REASON-CODE PIC 9(08) COMP.
05 CRR-SERVICE-NAME PIC X(16) VALUE LOW-VALUES.
05 CRR-RESPONSE-TRAN PIC X(08) VALUE LOW-VALUES.
05 CRR-ORIGIN-TERMINAL PIC X(08) VALUE LOW-VALUES.
05 BEA-RESERVED-2 PIC X(16) VALUE LOW-VALUES.
05 CRR-CONTEXT-AREA.
10 CRR-CONTEXT-DATA PIC X(31) VALUE SPACES.
05 CRR-REQUEST-AREA.
10 CRR-REQUEST-DATA PIC X(100) VALUE SPACES.

LINKAGE SECTION.
01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
01 ALTPCB.
05 ALTPCB-DEST PIC X(08).
05 FILLER PIC X(02).
05 ALTPCB-STATUS PIC X(02).
05 FILLER PIC X(10).

PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.

(2) CALL 'CBLTDLI' USING GU, IOPCB, MSG-IN.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.

(3) MOVE 'BEATCPI' TO CRR-TRANCODE.
MOVE 96 TO CRR-HEADER-LEN.
MOVE 1 TO CRR-REQUEST-TYPE.
MOVE 0 TO CRR-RESPONSE-FORMAT.
MOVE LTERM TO CRR-ORIGIN-TERMINAL.
MOVE 'TOUPPER' TO CRR-SERVICE-NAME.
MOVE 'BEACRP01' TO CRR-RESPONSE-TRAN.
MOVE ALL 'A' TO CRR-REQUEST-DATA.
MOVE LENGTH OF CRR-REQUEST-AREA TO
CRR-REQUEST-DATA-LEN.
MOVE CRR-REQUEST-DATA-LEN TO CRR-MAX-RESPONSE-LEN.

(4) MOVE ALL 'B' TO CRR-CONTEXT-DATA.
MOVE LENGTH OF CRR-CONTEXT-AREA TO CRR-CONTEXT-DATA-LEN.

(5) COMPUTE CRR-LL = CRR-REQUEST-DATA-LEN +
CRR-CONTEXT-DATA-LEN +
CRR-HEADER-LEN.

(6) CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-TRANCODE.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.

(7) CALL 'CBLTDLI' USING ISRT, ALTPCB, CLIENT-REQUEST.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.

(8) CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.

(9) 9999-RETURN.

GOBACK.

注意:

  1. 前のサンプルでは使用していませんが、TMA TCP for IMSクライアント・リクエスト/レスポンス・メッセージのヘッダーのフォーマットは、CLIENTというCOBOLコピーブックに記述されています。それに相当するC言語のヘッダーはBEATCPI.Hヘッダー・ファイルに記述されています。どちらもTMA TCP for IMSのINCLUDE配布ライブラリに収録されています。
  2. GU(固有セグメントを取得)呼出しを発行して、IMSメッセージ・キューから端末入力メッセージを取得します。
  3. クライアント・リクエストのヘッダーは次のように初期化します。
    • CRR-TRANCODEをTMA TCP for IMSゲートウェイのトランザクション・コードに設定します(この例ではBEATCPIになっていますが、インストール環境によっては異なることもあります)。
    • BEA-RESERVED-1 をバイナリ・ゼロに初期化する必要があります
    • CRR-HEADER-LENをクライアント・リクエストのヘッダーの長さ(96バイト)に設定します。
    • CRR-REQUEST-TYPEを、レスポンスを要求することを示す1に設定します。
    • CRR-RESPONSE-FORMATを、レスポンスを1つのメッセージ・セグメントで戻すことを示す0に設定します。
    • CRR-ORIGIN-TERMINALを、IOPCBから取得したリクエスト元の端末の名前(LTERM)に設定します。
    • CRR-SERVICE-NAMEをリクエスト対象のサービスの名前(TOUPPER)に設定します。この名前は、TMA TCP for IMSにローカル定義されているサービスの名前でなければなりません。サービスを提供するリモート・システムに定義されているサービス名と、この名前は一致することもあれば一致しないこともあります。
    • CRR-RESPONSE-TRANを指定のレスポンス・トランザクション(BEACRP01)の名前に設定します。
    • CRR-REQUEST-DATA-LENを送信対象のユーザー定義リクエスト・データの長さに設定します。
    • CRR-MAX-RESPONSE-LENを、適応可能なレスポンス・データの最大長に設定します。
    • BEA-RESERVED-2 をバイナリ・ゼロに初期化する必要があります
  4. コンテキスト・データはオプションで、目的に応じた任意のデータを設定してかまいません。コンテキスト・データは通常、レスポンスと元のリクエストを関連付けるために、レスポンス・トランザクションによって使用されます。
    • CRR-CONTEXT-DATA-LENを、格納するユーザー定義のコンテキスト・データの長さに設定します。
  5. メッセージ・セグメントの長さ(LL)をクライアント・リクエスト・メッセージ全体の長さ(ヘッダー + コンテキスト・データ + リクエスト・データ)に設定します。
  6. CHNG(変更)呼出しを発行して、宛先をTMA TCP for IMSゲートウェイのトランザクション・コードに設定します(この例ではBEATCPIですが、インストール環境によっては名前が異なることもあります)。
  7. ISRT(挿入)呼出しを発行して、クライアント・リクエスト・メッセージをIMSメッセージ・キューに挿入します。この例では、クライアント・リクエスト・メッセージを単体のメッセージ・セグメントにフォーマットしていますが、必要に応じて複数のメッセージ・セグメントにフォーマットしてもかまいません。
  8. PURG呼出しを発行して、メッセージが完了したことを通知します。たとえば、これ以上メッセージ・セグメントはない場合などです。
  9. リクエスト・トランザクションはレスポンスを待機しません。実際には、リクエストの処理が完了したときに、TMA TCP for IMSによってレスポンス・トランザクションがスケジュール設定されます。

BEACRP01 - IMSクライアント・レスポンス・トランザクションのサンプル

次のIMSクライアント・レスポンス・トランザクションのサンプルは、リモート・システムのTOUPPERというサービスに対するリクエストからのレスポンスを処理します。TOUPPERサービスは、大文字に変換したリクエスト・データで構成されるレスポンスを戻します。

リストE-3 IMSレスポンス・トランザクションのサンプル
CBL APOST                                                             
IDENTIFICATION DIVISION.
PROGRAM-ID. BEACRP01.
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'.

1 MSG-OUT.
05 MO-LL PIC S9(04) COMP VALUE +0.
05 MO-ZZ PIC S9(04) COMP VALUE +0.
05 MO-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MO-AREA
10 MO-DATA PIC X(91) VALUE SPACES.
(1) 01 CLIENT-RESPONSE.
05 CRR-LL PIC 9(04) COMP VALUE 0.
05 CRR-ZZ PIC 9(04) COMP VALUE 0.
05 CRR-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 BEA-RESERVED-1 PIC X(03) VALUE LOW-VALUES.
05 CRR-HEADER-LEN PIC 9(08) COMP.
05 CRR-CONTEXT-DATA-LEN PIC 9(08) COMP.

(7) 05 CRR-RESPONSE-DATA-LEN PIC 9(08) COMP.
(7) 05 CRR-MAX-RESPONSE-LEN PIC 9(08) COMP.
05 CRR-REQUEST-TYPE PIC 9(08) COMP.
(3) 05 CRR-RESPONSE-FORMAT PIC 9(08) COMP.
05 CRR-ERROR-CODE PIC S9(08) COMP.
05 CRR-REASON-CODE PIC S9(08) COMP.
05 CRR-SERVICE-NAME PIC X(16) VALUE LOW-VALUES.
05 CRR-RESPONSE-TRAN PIC X(08) VALUE LOW-VALUES.
05 CRR-ORIGIN-TERMINAL PIC X(08) VALUE LOW-VALUES.
05 BEA-RESERVED-2 PIC X(16) VALUE LOW-VALUES.
(6) 05 CRR-CONTEXT-AREA.
10 CRR-CONTEXT-DATA PIC X(31) VALUE SPACES.
05 CRR-RESPONSE-AREA.
10 CRR-RESPONSE-DATA PIC X(100) VALUE SPACES.

LINKAGE SECTION.

01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
01 ALTPCB
05 ALTPCB-DEST PIC X(08).
05 FILLER PIC X(02).
05 ALTPCB-STATUS PIC X(02).
05 FILLER PIC X(10).
01 IOPCB.

PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.

(2) CALL 'CBLTDLI' USING GU, IOPCB, CLIENT-RESPONSE.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.

(4) IF CRR-ERROR-CODE EQUAL 0 AND

(5) CRR-REASON-CODE EQUAL 0
THEN MOVE 'PASSED' TO MO-DATA
ELSE MOVE 'FAILED' TO MO-DATA.
MOVE CRR-TRANCODE TO MO-TRANCODE.
MOVE 84 TO MO-LL.

CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-ORIGIN-TERMINAL.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.

(8) CALL 'CBLTDLI' USING ISRT, ALTPCB, MSG-OUT.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.

CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.

9999-RETURN.

GOBACK.

注意:

  1. 前のサンプルでは使用していませんが、TMA TCP for IMSクライアント・リクエスト/レスポンス・メッセージのヘッダーのフォーマットは、CLIENTというCOBOLコピーブックに記述されています。それに相当するC言語のヘッダーはBEATCPI.Hヘッダー・ファイルに記述されています。どちらもTMA TCP for IMSのINCLUDE配布ライブラリに収録されています。
  2. GU(固有セグメントを取得)呼出しを発行して、IMSメッセージ・キューからクライアント・レスポンス・メッセージを取得します。
  3. CRR-RESPONSE-FORMATは、元のリクエストに指定されたとおりの値で、レスポンスのフォーマットが単体のセグメントなのか複数のセグメントなのかを表します。マルチセグメント形式のレスポンスが指定された場合、レスポンス・メッセージはレスポンス・ヘッダー、コンテキスト・データ、レスポンス・データの3つのセグメントで構成されます。
  4. CRR-ERROR-CODEはエラー発生の有無を表します。このフィールドがゼロの場合は、リクエストが正常に処理されたことを表します。それ以外の場合は、エラーが発生しており、エラー・コードによってエラー・タイプが示されます。レスポンスを処理する前に、エラー・コードをチェックする必要があります。
  5. エラーの発生が通知された場合に、CRR-REASON-CODEが補足情報を示すことがあります。値がゼロの場合は、補足情報はないことを表します。
  6. コンテキスト・データ(存在する場合)は元のリクエスト・メッセージから引き継がれたデータです。コンテキスト・データは通常、レスポンスと元のリクエストを関連付けるために、レスポンス・トランザクションによって使用されます。
  7. CRR-RESPONSE-DATA-LENには、戻されるレスポンス・データの長さが格納されます。切捨てのエラーが発生した場合でも、このフィールドにはレスポンス・データの実際の長さ(切捨て前の長さ)が格納されます。戻されるレスポンス・データのうち、CRR-MAX-RESPONSE-LEN.に指定された長さを超えた分は切り捨てられます。
  8. エラー・コードと理由コードによって成功または失敗が表されるレスポンスは、CRR-ORIGIN-TERMINALに保持されたLTERMに従って、元の(リクエスト元の)端末に書き込まれます。この目的で使用する場合は、代替PCBを使用する必要があります。

BEACRR01 - IMSクライアント・リクエスト/レスポンス・トランザクションのサンプル

必要があれば、IMSのクライアント・リクエストとレスポンスのトランザクションの役割を1つの応用トランザクションにまとめることができます。ただし、動的に実行する内容に応じて、該当する処理(リクエストまたはレスポンス)を実行するためのロジックを追加する必要があります。

リストE-4 IMSリクエスト/レスポンス・トランザクションのサンプル
CBL APOST 
IDENTIFICATION DIVISION.
PROGRAM-ID. BEACRR01.
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 MSG-IN.
05 MI-LL PIC S9(04) COMP VALUE +0.
05 MI-ZZ PIC S9(04) COMP VALUE +0.
05 MI-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MI-AREA.
10 MI-DATA PIC X(91) VALUE SPACES.
01 MSG-OUT.
05 MO-LL PIC S9(04) COMP VALUE +0.
05 MO-ZZ PIC S9(04) COMP VALUE +0.
05 MO-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MO-AREA.
10 MO-DATA PIC X(91) VALUE SPACES.

(1) 01 CLIENT-REQUEST-RESPONSE.
05 CRR-LL PIC 9(04) COMP VALUE 0.
05 CRR-ZZ PIC 9(04) COMP VALUE 0.
05 CRR-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 BEA-RESERVED-1 PIC X(03) VALUE LOW-VALUES.
05 CRR-HEADER-LEN PIC 9(08) COMP.
05 CRR-CONTEXT-DATA-LEN PIC 9(08) COMP.
05 CRR-REQUEST-DATA-LEN PIC 9(08) COMP.
05 CRR-MAX-RESPONSE-LEN PIC 9(08) COMP.
05 CRR-REQUEST-TYPE PIC 9(08) COMP.
05 CRR-RESPONSE-FORMAT PIC 9(08) COMP.
05 CRR-ERROR-CODE PIC 9(08) COMP.
05 CRR-REASON-CODE PIC 9(08) COMP.
05 CRR-SERVICE-NAME PIC X(16) VALUE LOW-VALUES.
05 CRR-RESPONSE-TRAN PIC X(08) VALUE LOW-VALUES.
05 CRR-ORIGIN-TERMINAL PIC X(08) VALUE LOW-VALUES.
05 BEA-RESERVED-2 PIC X(16) VALUE LOW-VALUES.
05 CRR-CONTEXT-AREA.
10 CRR-CONTEXT-DATA PIC X(31) VALUE SPACES.
05 CRR-REQUEST-AREA.
10 CRR-REQUEST-DATA PIC X(100) VALUE SPACES.

LINKAGE SECTION.
01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
01 01 ALTPCB.
05 ALTPCB-DEST PIC X(08).
05 FILLER PIC X(02).
05 ALTPCB-STATUS PIC X(02).
05 FILLER PIC X(10).

PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.
(3) IF LTERM = SPACES OR LOW-VALUES
THEN PERFORM RESPONSE-MESSAGE THRU RESPONSE-MESSAGE-EXIT
ELSE PERFORM REQUEST-MESSAGE THRU REQUEST-MESSAGE-EXIT.

9999-RETURN.
GOBACK.

REQUEST-MESSAGE.
CALL 'CBLTDLI' USING GU, IOPCB, MSG-IN.
IF IOPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.

MOVE 'BEATCPI' TO CRR-TRANCODE.
MOVE 96 TO CRR-HEADER-LEN.
MOVE 1 TO CRR-REQUEST-TYPE.
MOVE 0 TO CRR-RESPONSE-FORMAT.
MOVE LTERM TO CRR-ORIGIN-TERMINAL.
MOVE 'TOUPPER' TO CRR-SERVICE-NAME.
MOVE MI-TRANCODE TO CRR-RESPONSE-TRAN.
MOVE ALL 'A' TO CRR-REQUEST-DATA.
MOVE LENGTH OF CRR-REQUEST-AREA TO CRR-REQUEST-DATA-LEN.
MOVE CRR-REQUEST-DATA-LEN TO CRR-MAX-RESPONSE-LEN.
MOVE ALL 'B' TO CRR-CONTEXT-DATA.
MOVE LENGTH OF CRR-CONTEXT-AREA TO CRR-CONTEXT-DATA-LEN.
COMPUTE CRR-LL = CRR-REQUEST-DATA-LEN +
CRR-CONTEXT-DATA-LEN +
CRR-HEADER-LEN.

CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-TRANCODE.
IF ALTPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.

CALL 'CBLTDLI' USING ISRT, ALTPCB,CLIENT-REQUEST-RESPONSE.
IF ALTPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.

CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.

REQUEST-MESSAGE-EXIT.
EXIT.

RESPONSE-MESSAGE.

CALL 'CBLTDLI' USING GU, IOPCB, CLIENT-REQUEST-RESPONSE.
IF IOPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.
IF CRR-ERROR-CODE EQUAL 0 AND
CRR-REASON-CODE EQUAL 0
THEN MOVE 'PASSED' TO MO-DATA
ELSE MOVE 'FAILED' TO MO-DATA.
MOVE CRR-TRANCODE TO MO-TRANCODE.
MOVE 84 TO MO-LL.

CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-ORIGIN-TERMINAL.
IF ALTPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.

CALL 'CBLTDLI' USING ISRT, ALTPCB, MSG-OUT.
IF ALTPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.

CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.

RESPONSE-MESSAGE-EXIT.
EXIT.

注意:

  1. 前のサンプルでは使用していませんが、TMA TCP for IMSクライアント・リクエスト/レスポンス・メッセージのヘッダーのフォーマットは、CLIENTというCOBOLコピーブックに記述されています。それに相当するC言語のヘッダーはBEATCPI.Hヘッダー・ファイルに記述されています。どちらもTMA TCP for IMSのINCLUDE配布ライブラリに収録されています。
  2. その他の点では、実際のリクエスト処理はBEACRQ01が実行する処理と変わりません。
  3. その他の点では、実際のレスポンス処理はBEACRP01が実行する処理と変わりません。

  先頭に戻る       前  次