Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


6.4.2 TXインタフェースの例

X/OpenのTXインタフェースを使用した,SUPのコーディング例を次に示します。このSUPは,6.1 で示すSUPの処理を,TXインタフェースでトランザクション制御したものです。処理の構成図と,サービス要求先のSPPの処理については,「6.1 クライアント/サーバ形態のUAPのコーディング例(SUP,SPP DAMアクセス)」を参照してください。なお,行番号 460,470で示す TX-RETURN-STATUS は,処理から直接呼び出すと正しく参照できないため,行番号490,500で示すように,RS REDEFINES TX-RETURN-STATUS と再定義しています。

  10  *
  20  ******************************************************
  30  * SUP01                                              *
  40  ******************************************************
  50  *
  60   IDENTIFICATION DIVISION.
  70  *
  80   PROGRAM-ID. MAIN.
  90  *
 100  ******************************************************
 110  * データ領域の設定                                   *
 120  ******************************************************
 130  *
 140   DATA DIVISION.
 150   WORKING-STORAGE SECTION.
 160   01  RPC-ARG1.
 170       02 REQUEST      PIC X(8) VALUE SPACE.
 180       02 STATUS-CODE  PIC X(5) VALUE SPACE.
 190       02 FILLER       PIC X(3).
 200       02 FLAGS        PIC S9(9) COMP VALUE ZERO.
 210  *
 220   01  RPC-ARG2.
 230       02 REQUEST      PIC X(8) VALUE SPACE.
 240       02 STATUS-CODE  PIC X(5) VALUE SPACE.
 250       02 FILLER       PIC X(3).
 260       02 FLAGS        PIC S9(9) COMP VALUE ZERO.
 270       02 DESCRIPTOR   PIC S9(9) COMP VALUE ZERO.
 280       02 S-NAME       PIC X(32) VALUE SPACE.
 290       02 G-NAME       PIC X(32) VALUE SPACE.
 300  *
 310   01  RPC-ARG3.
 320       02  SEND-DATA-LENG  PIC S9(9) COMP VALUE ZERO.
 330       02  SEND-DATA       PIC X(32) VALUE SPACE.
 340  *
 350   01  RPC-ARG4.
 360       02  RECEIVE-DATA-LENG PIC S9(9) COMP VALUE ZERO.
 370       02  RECEIVE-DATA      PIC X(32) VALUE SPACE.
 380  *
 390   01  ADM-ARG1.
 400       02  REQUEST      PIC X(8) VALUE SPACE.
 410       02  STATUS-CODE  PIC X(5) VALUE SPACE.
 420       02  FILLER       PIC X(3).
 430       02  FLAGS        PIC S9(9) COMP VALUE ZERO.
 440       02  FILLER       PIC X(3).
 450  *
 460   01  TX-RETURN-STATUS.
 470       COPY TXSTATUS.
 480  *
 490   01  RS REDEFINES TX-RETURN-STATUS.
 500       05 RSVAL         PIC S9(9) COMP-5.
 510  *
 520   01  TX-INFO-AREA.
 530       COPY TXINFDEF.
 540  *
 550   PROCEDURE DIVISION.
 560  *
 570  ******************************************************
 580  * RPC-OPEN(UAPの開始)                                *
 590  ******************************************************
 600  *
 610   MOVE 'OPEN' TO REQUEST OF RPC-ARG1.
 620   MOVE ZERO   TO FLAGS  OF RPC-ARG1.
 630   CALL 'CBLDCRPC' USING RPC-ARG1.
 640       IF STATUS-CODE OF RPC-ARG1 NOT = '00000' THEN
 650         DISPLAY 'SUP01:RPC-OPEN FAILED. CODE = '
 660         STATUS-CODE OF RPC-ARG1
 670         GO TO PROG-END
 680       END-IF.
 690  *
 700  ******************************************************
 710  * TX-OPEN(リソースマネジャのオープン)                *
 720  ******************************************************
 730  *
 740   CALL 'TXOPEN' USING TX-RETURN-STATUS.
 750       IF RSVAL OF RS NOT = 0 THEN
 760         DISPLAY 'SUP01:TX-OPEN FAILED. CODE = '
 770         RSVAL OF RS
 780         GO TO PROG-END
 790       END-IF.
 800  *
 810  *************************************************************
 820  * TX-SET-TRANSACTION-TIMEOUT(トランザクション監視時間の設定)*
 830  *************************************************************
 840  *
 850   MOVE 180 TO TRANSACTION-TIMEOUT OF TX-INFO-AREA.
 860   CALL 'TXSETTIMEOUT' USING TX-INFO-AREA TX-RETURN-STATUS.
 870       IF RSVAL OF RS NOT = 0 THEN
 880         DISPLAY 'SUP01:TX-SET-TRANSACTION-TIMEOUT FAILED. CODE = '
 890         RSVAL OF RS
 900         GO TO PROG-END
 910       END-IF.
 920  *
 930  ******************************************************
 940  * ADM-COMPLETE(ユーザサーバの開始処理完了報告)       *
 950  ******************************************************
 960  *
 970   MOVE 'COMPLETE' TO REQUEST OF ADM-ARG1.
 980   CALL 'CBLDCADM' USING ADM-ARG1.
 990       IF STATUS-CODE OF ADM-ARG1 NOT = '00000' THEN
1000         DISPLAY 'SUP01:ADM-COMPLETE FAILED. CODE = '
1010         STATUS-CODE OF ADM-ARG1
1020         GO TO PROG-END
1030       END-IF.
1040  *
1050  ******************************************************
1060  * TX-BEGIN(トランザクションの開始)                   *
1070  ******************************************************
1080  *
1090   CALL 'TXBEGIN' USING TX-RETURN-STATUS.
1100       IF RSVAL OF RS NOT = 0 THEN
1110         DISPLAY 'SUP01:TX-BEGIN FAILED. CODE = '
1120         RSVAL OF RS
1130         GO TO TRAN-END
1140       END-IF.
1150  *
1160  ******************************************************
1170  * TX-INFO(トランザクション情報の取得)                *
1180  ******************************************************
1190  *
1200   CALL 'TXINFORM' USING TX-INFO-AREA TX-RETURN-STATUS.
1210       IF RSVAL OF RS <= 0 THEN
1220         DISPLAY 'SUP01:NOT IN TRANSACTION. CODE = '
1230         RSVAL OF RS
1240         GO TO PROG-END
1250       ELSE
1260         IF RSVAL OF RS = 1 THEN
1270           DISPLAY 'SUP01:RETURN = ' COMMIT-RETURN
1280           DISPLAY 'SUP01:CONTROL = ' TRANSACTION-CONTROL
1290           DISPLAY 'SUP01:TIMEOUT = ' TRANSACTION-TIMEOUT
1300           DISPLAY 'SUP01:STATE = ' TRANSACTION-STATE
1310         END-IF
1320       END-IF.
1330  ******************************************************
1340  * RPC-CALL(遠隔サービスの要求)                       *
1350  ******************************************************
1360  *
1370   MOVE 'CALL' TO REQUEST OF RPC-ARG2.
1380   MOVE 'SPP01' TO G-NAME OF RPC-ARG2.
1390   MOVE 'SVR01' TO S-NAME OF RPC-ARG2.
1400   MOVE 'SUP01:DATA OpenTP1' TO SEND-DATA OF RPC-ARG3.
1410   MOVE 32 TO SEND-DATA-LENG OF RPC-ARG3.
1420   MOVE 32 TO RECEIVE-DATA-LENG OF RPC-ARG4.
1430   CALL 'CBLDCRPC' USING RPC-ARG2 RPC-ARG3 RPC-ARG4.
1440       IF STATUS-CODE OF RPC-ARG2 NOT = '00000' THEN
1450         DISPLAY 'SUP01:RPC-CALL RETURN CODE = '
1460         STATUS-CODE OF RPC-ARG2
1470  *       GO TO TRAN-END
1480       END-IF.
1490   DISPLAY 'SERVICE FUNCTION RETURN = ' RECEIVE-DATA.
1500   TRAN-END.
1510  *
1520  ******************************************************
1530  * TX-SET-TRANSACTION-CONTROL(非連鎖モード設定)       *
1540  ******************************************************
1550  *
1560   MOVE 0 TO TRANSACTION-CONTROL OF TX-INFO-AREA.
1570   CALL 'TXSETTRANCTL' USING TX-INFO-AREA TX-RETURN-STATUS.
1580       IF RSVAL OF RS NOT = 0 THEN
1590         DISPLAY 'SUP01:TX-SET-TRANSACTION-CONTROL FAILED. CODE = '
1600         RSVAL OF RS
1610       END-IF.
1620  *
1630  ******************************************************
1640  * TX-COMMIT(非連鎖モードのコミット)                  *
1650  ******************************************************
1660  *
1670   CALL 'TXCOMMIT' USING TX-RETURN-STATUS.
1680       IF RSVAL OF RS NOT = 0 THEN
1690         DISPLAY 'SUP01:TX-COMMIT FAILED. CODE = '
1700         RSVAL OF RS
1710       END-IF.
1720   PROG-END.
1730  *
1740  ******************************************************
1750  * RPC-CLOSE(UAPの終了)                               *
1760  ******************************************************
1770  *
1780   MOVE 'CLOSE' TO REQUEST OF RPC-ARG1.
1790   MOVE ZERO    TO FLAGS  OF RPC-ARG1.
1800   CALL 'CBLDCRPC' USING RPC-ARG1.
1810   DISPLAY 'SUP01:SUP PROCESS ENDED'.
1820   STOP RUN.