Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option プログラム作成の手引


サービスプログラムの作成(SPP)

TP1/EEおよびXTCのUAPのサービスプログラムの文法について説明します。SPPはサービスプログラムを作成します。

〈このページの構成〉

形式(TP1/EEの場合)

32ビットアーキテクチャの場合

PROGRAM-ID. プログラム名.
LINKAGE SECTION.
01一意名1.
  02 データ名A  PIC X(n).
01一意名2.
  02 データ名B  PIC S9(9) COMP.
01一意名3.
  02 データ名C  PIC X(n).
01 一意名4.
  02 データ名D  PIC S9(9) COMP.
01 一意名5.
  02 データ名E  PIC 9(9) COMP.       /*情報長                        */
  02 データ名F  PIC 9(9) COMP.       /*サービスグループ名長          */
  02 データ名G  PIC X(32).           /*サービスグループ名            */
  02 データ名H  PIC 9(9) COMP.       /*サービス名長                  */
  02 データ名I  PIC X(32).           /*サービス名                    */
  02 データ名J  PIC X(2).            /*トランザクション種別          */
  02 データ名K  PIC X(1).            /*自動閉塞有無                  */
  02 データ名L  PIC X(1).            /*コミット有無                  */
  02 データ名M  PIC 9(9) COMP.       /*処理スレッド通番              */
  02 データ名N  PIC 9(9) COMP-X.     /*エラー要因コード              */
  02 データ名O  PIC 9(9) COMP.       /*ユーザIFAエリアサイズ         */
  02 データ名P  ADDRESS.             /*ユーザIFAエリアポインタ       */
  02 データ名Q  PIC 9(9) COMP.       /*ユーザSATエリアサイズ         */
  02 データ名R  ADDRESS.             /*ユーザSATエリアポインタ       */
  02 データ名S  PIC X(1).            /*応答要否                      */
  02 データ名T  PIC X(1).            /*メッセージ状態                */
  02 データ名U  PIC X(1).            /*プロセス起動要因              */
  02 データ名V  PIC X(1).            /*前回プロセス終了要因          */
  02 データ名W  PIC X(1).            /*プロセス終了要因              */
  02 データ名X  PIC X(1).            /*スレッドダウン種別            */
  02 データ名Y  PIC X(1).            /*異常発生トランザクション種別  */
  02 データ名Z  PIC X(1).            /*拡張トランザクション種別      */
  02 データ名AA  PIC 9(9) COMP.      /*リソースマネジャ数            */
  02 データ名AB  PIC S9(9) COMP.     /*リソースマネジャ接続状態      */
  02 データ名AC  PIC 9(9) COMP.      /*送信サービスグループ名長      */
  02 データ名AD  PIC X(32).          /*送信サービスグループ名        */
  02 データ名AE  PIC 9(9) COMP.      /*送信サービス名長              */
  02 データ名AF  PIC X(32).          /*送信サービス名                */
  02 データ名AG  PIC 9(9) COMP.      /*異常発生処理スレッド通番      */
  02 データ名AH  ADDRESS.    /*拡張トランザクションインタフェース情報*/
  02 データ名AI  ADDRESS. /*XTC拡張トランザクションインタフェース情報*/
  02 データ名AJ  ADDRESS. /*MCP拡張トランザクションインタフェース情報*/
  02 データ名AK  PIC X(1).           /*メッセージ種別                */
  02 データ名AL  PIC X(1).           /*エラートランザクション要因    */
  02 データ名AO  PIC X(1).           /*トランザクション起動要因      */
  02 データ名AU  PIC X(1).           /*リソースマネジャ連携有無      */
  02 データ名AP  PIC 9(9) COMP.      /*サーバ再起動回数              */
  02 データ名AQ  PIC X(14).          /*トランザクション起動時刻      */
  02 データ名AR  PIC X(5).           /*ノード識別子                  */
  02 データ名AX  PIC X(1).           /*リトライ回数                  */
  02 データ名AS  PIC 9(9) COMP.      /*トランザクションレベル名長    */
  02 データ名AT  PIC X(32).          /*トランザクションレベル名      */
  02 FILLER      PIC X(24).          /*予備                          */
  02 データ名AY  PIC X(32).          /*トランザクション引き継ぎ情報  */
 
/* DBキュー機能およびオンラインバッチ機能を使用しない場合の形式 */
01 一意名6.
  02 データ名DA  PIC 9(9) COMP.   /*情報長                              */
  02 データ名DB  PIC S9(9) COMP.  /*サービスプログラム起動時の応答の長さ*/
  02 データ名DC  PIC X(192).      /*予備                                */
 
/* DBキュー機能を使用する場合の形式 */
01 一意名6.
  02 データ名BA  PIC 9(9) COMP.   /*情報長            */
  02 データ名BB  PIC X(28).       /*読み込みDBキュー名*/
  02 データ名BC  PIC 9(9) COMP.   /*通番              */
  02 データ名BD  PIC 9(4) COMP.   /*ロールバック回数  */
  02 データ名BE  PIC X(162).      /*予備              */
 
/* オンラインバッチ機能を使用する場合の形式 */
01 一意名6.
  02 データ名CA  PIC 9(9) COMP.   /*情報長                        */
  02 データ名CB  PIC 9(9) COMP.   /*トランザクション種別          */
  02 データ名CC  PIC X(28).       /*バッチキュー名                */
  02 データ名CD  PIC X(24).       /*ロット名                      */
  02 データ名CE  PIC 9(9) COMP.   /*引き継ぎ情報のサイズ          */
  02 データ名CF  ADDRESS.         /*引き継ぎ情報のアドレス        */
  02 データ名CG  PIC 9(9) COMP.   /*ロットのバッチ処理形態        */
  02 データ名CH  PIC 9(9) COMP.   /*該当するロットの全メッセージ数*/
  02 データ名CI  PIC 9(9) COMP.   /*読み込んだメッセージの通番    */
  02 データ名CJ  PIC 9(9) COMP.   /*ロット終了要因コード          */
  02 データ名CK  PIC 9(9) COMP.   /*終了時のステータスコード      */
  02 データ名CL  PIC 9(9) COMP.   /*読み出し済みメッセージ数      */
  02 データ名CM  PIC 9(9) COMP.   /*スキップメッセージ数          */
  02 データ名CN  PIC 9(9) COMP.   /*未読み出しメッセージ数        */
  02 データ名CO  PIC X(1).        /*メッセージ長情報              */
  02 データ名CR  PIC X(99).       /*予備                          */
 
PROCEDURE DIVISION USING 一意名1 一意名2 一意名3 一意名4 一意名5
          :
サービスの処理
          :
EXIT PROGRAM.

データ名BB,データ名CC,およびデータ名CDの文字列の最後はLOW-VALUEです。

64ビットアーキテクチャの場合

PROGRAM-ID. プログラム名.
LINKAGE SECTION.
01一意名1.
  02 データ名A  PIC X(n).
01一意名2.
  02 データ名B  PIC S9(9) COMP.
01一意名3.
  02 データ名C  PIC X(n).
01 一意名4.
  02 データ名D  PIC S9(9) COMP.
01 一意名5.
  02 データ名E  PIC 9(9) COMP.       /*情報長                        */
  02 データ名F  PIC 9(9) COMP.       /*サービスグループ名長          */
  02 データ名G  PIC X(32).           /*サービスグループ名            */
  02 データ名H  PIC 9(9) COMP.       /*サービス名長                  */
  02 データ名I  PIC X(32).           /*サービス名                    */
  02 データ名J  PIC X(2).            /*トランザクション種別          */
  02 データ名K  PIC X(1).            /*自動閉塞有無                  */
  02 データ名L  PIC X(1).            /*コミット有無                  */
  02 データ名M  PIC 9(9) COMP.       /*処理スレッド通番              */
  02 データ名N  PIC 9(9) COMP-X.     /*エラー要因コード              */
  02 データ名O  PIC 9(9) COMP.       /*ユーザIFAエリアサイズ         */
  02 FILLER  PIC X(4).               /*予備                          */
  02 データ名P  ADDRESS.             /*ユーザIFAエリアポインタ       */
  02 データ名Q  PIC 9(9) COMP.       /*ユーザSATエリアサイズ         */
  02 FILLER  PIC X(4).               /*予備                          */
  02 データ名R  ADDRESS.             /*ユーザSATエリアポインタ       */
  02 データ名S  PIC X(1).            /*応答要否                      */
  02 データ名T  PIC X(1).            /*メッセージ状態                */
  02 データ名U  PIC X(1).            /*プロセス起動要因              */
  02 データ名V  PIC X(1).            /*前回プロセス終了要因          */
  02 データ名W  PIC X(1).            /*プロセス終了要因              */
  02 データ名X  PIC X(1).            /*スレッドダウン種別            */
  02 データ名Y  PIC X(1).            /*異常発生トランザクション種別  */
  02 データ名Z  PIC X(1).            /*拡張トランザクション種別      */
  02 データ名AA  PIC 9(9) COMP.      /*リソースマネジャ数            */
  02 データ名AB  PIC S9(9) COMP.     /*リソースマネジャ状態          */
  02 データ名AC  PIC 9(9) COMP.      /*送信サービスグループ名長      */
  02 データ名AD  PIC X(32).          /*送信サービスグループ名        */
  02 データ名AE  PIC 9(9) COMP.      /*送信サービス名長              */
  02 データ名AF  PIC X(32).          /*送信サービス名                */
  02 データ名AG  PIC 9(9) COMP.      /*異常発生処理スレッド通番      */
  02 データ名AS  PIC 9(9) COMP.      /*トランザクションレベル名長    */
  02 データ名AH  ADDRESS.    /*拡張トランザクションインタフェース情報*/
  02 データ名AI  ADDRESS. /*XTC拡張トランザクションインタフェース情報*/
  02 データ名AJ  ADDRESS. /*MCP拡張トランザクションインタフェース情報*/
  02 データ名AK  PIC X(1).           /*メッセージ種別                */
  02 データ名AL  PIC X(1).           /*エラートランザクション要因    */
  02 データ名AO  PIC X(1).           /*トランザクション起動要因      */
  02 データ名AU  PIC X(1).           /*リソースマネジャ連携有無      */
  02 データ名AP  PIC 9(9) COMP.      /*サーバ再起動回数              */
  02 データ名AM  PIC 9(18) COMP.     /*拡張ユーザIFAエリアサイズ     */
  02 データ名AN  PIC 9(18) COMP.     /*拡張ユーザSATエリアサイズ     */
  02 データ名AQ  PIC X(14).          /*トランザクション起動時刻      */
  02 データ名AR  PIC X(5).           /*ノード識別子                  */
  02 データ名AX  PIC X(1).           /*リトライ回数                  */
  02 データ名AT  PIC X(32).          /*トランザクションレベル名      */
  02 FILLER      PIC X(4).           /*予備                          */
  02 データ名AY  PIC X(32).          /*トランザクション引き継ぎ情報  */
 
 
/* DBキュー機能およびオンラインバッチ機能を使用しない場合の形式 */
01 一意名6.
  02 データ名DA  PIC 9(9) COMP.   /*情報長                              */
  02 データ名DB  PIC S9(9) COMP.  /*サービスプログラム起動時の応答の長さ*/
  02 データ名DC  PIC X(192).      /*予備                                */
 
/* DBキュー機能を使用する場合の形式 */
01 一意名6.
  02 データ名BA  PIC 9(9) COMP.   /*情報長            */
  02 データ名BB  PIC X(28).       /*読み込みDBキュー名*/
  02 データ名BC  PIC 9(9) COMP.   /*通番              */
  02 データ名BD  PIC 9(4) COMP.   /*ロールバック回数  */
  02 データ名BE  PIC X(162).      /*予備              */
 
/* オンラインバッチ機能を使用する場合の形式 */
01 一意名6.
  02 データ名CA  PIC 9(9) COMP.   /*情報長                        */
  02 データ名CB  PIC 9(9) COMP.   /*トランザクション種別          */
  02 データ名CC  PIC X(28).       /*バッチキュー名                */
  02 データ名CD  PIC X(24).       /*ロット名                      */
  02 データ名CE  PIC 9(9) COMP.   /*引き継ぎ情報のサイズ          */
  02 データ名CF  ADDRESS.         /*引き継ぎ情報のアドレス        */
  02 FILLER  PIC X(4).            /*予備                          */
  02 データ名CG  PIC 9(9) COMP.   /*ロットのバッチ処理形態        */
  02 データ名CH  PIC 9(9) COMP.   /*該当するロットの全メッセージ数*/
  02 データ名CI  PIC 9(9) COMP.   /*読み込んだメッセージの通番    */
  02 データ名CJ  PIC 9(9) COMP.   /*ロット終了要因コード          */
  02 データ名CK  PIC 9(9) COMP.   /*終了時のステータスコード      */
  02 データ名CL  PIC 9(9) COMP.   /*読み出し済みメッセージ数      */
  02 データ名CM  PIC 9(9) COMP.   /*スキップメッセージ数          */
  02 データ名CN  PIC 9(9) COMP.   /*未読み出しメッセージ数        */
  02 データ名CO  PIC X(1).        /*メッセージ長情報              */
  02 データ名CR  PIC X(91).       /*予備                          */
 
PROCEDURE DIVISION USING 一意名1 一意名2 一意名3 一意名4 一意名5
          :
サービスの処理
          :
EXIT PROGRAM.

データ名BB,データ名CC,およびデータ名CDの文字列の最後はLOW-VALUEです。

形式(XTCの場合)

64ビットアーキテクチャの場合

PROGRAM-ID. プログラム名.
LINKAGE SECTION.
01一意名1.
  02 データ名A  PIC X(n).
01 一意名2.
  02 データ名B  PIC S9(9) COMP.
01 一意名3.
  02 データ名C  PIC X(n).
01 一意名4.
  02 データ名D  PIC S9(9) COMP.
01 一意名5.
  02 データ名E  PIC 9(9) COMP.       /*情報長                        */
  02 データ名F  PIC 9(9) COMP.       /*サービスグループ名長          */
  02 データ名G  PIC X(32).           /*サービスグループ名            */
  02 データ名H  PIC 9(9) COMP.       /*サービス名長                  */
  02 データ名I  PIC X(32).           /*サービス名                    */
  02 データ名J  PIC X(2).            /*トランザクション種別          */
  02 データ名K  PIC X(1).            /*自動閉塞有無                  */
  02 データ名L  PIC X(1).            /*コミット有無                  */
  02 データ名M  PIC 9(9) COMP.       /*処理スレッド通番              */
  02 データ名N  PIC 9(9) COMP-X.     /*エラー要因コード              */
  02 データ名O  PIC 9(9) COMP.       /*ユーザIFAエリアサイズ         */
  02 FILLER      PIC X(4).           /*予備                          */
  02 データ名P  ADDRESS.             /*ユーザIFAエリアポインタ       */
  02 データ名Q  PIC 9(9) COMP.       /*ユーザSATエリアサイズ         */
  02 FILLER      PIC X(4).           /*予備                          */
  02 データ名R  ADDRESS.             /*ユーザSATエリアポインタ       */
  02 データ名S  PIC X(1).            /*応答要否                      */
  02 データ名T  PIC X(1).            /*メッセージ状態                */
  02 データ名U  PIC X(1).            /*プロセス起動要因              */
  02 データ名V  PIC X(1).            /*前回プロセス終了要因          */
  02 データ名W  PIC X(1).            /*プロセス終了要因              */
  02 データ名X  PIC X(1).            /*スレッドダウン種別            */
  02 データ名Y  PIC X(1).            /*異常発生トランザクション種別  */
  02データ名Z  PIC X(1).             /*拡張トランザクション種別      */
  02 データ名AA  PIC 9(9) COMP.      /*リソースマネジャ数            */
  02 データ名AB  PIC S9(9) COMP.     /*リソースマネジャ状態          */
  02 データ名AC  PIC 9(9) COMP.      /*送信サービスグループ名長      */
  02 データ名AD  PIC X(32).          /*送信サービスグループ名        */
  02 データ名AE  PIC 9(9) COMP.      /*送信サービス名長              */
  02 データ名AF  PIC X(32).          /*送信サービス名                */
  02 データ名AG  PIC 9(9) COMP.      /*異常発生処理スレッド通番      */
  02 FILLER      PIC X(4).           /*予備                          */
  02データ名AH  ADDRESS.   /*拡張トランザクションインタフェース情報  */
  02データ名AI  ADDRESS.  /*XTC拡張トランザクションインタフェース情報*/
  02データ名AJ  ADDRESS.  /*MCP拡張トランザクションインタフェース情報*/
  02データ名AK  PIC X(1).           /*メッセージ種別                 */
  02 データ名AL  PIC X(1)           /*ERRTRN4起動要因                */
  02 FILLER      PIC X(6).           /*予備                          */
  02 データ名AM  PIC 9(18) COMP.    /*拡張ユーザIFAエリアサイズ      */
  02 データ名AN  PIC 9(18) COMP.    /*拡張ユーザSATエリアサイズ      */
  02 FILLER      PIC X(56).          /*予備                          */
 
/* 拡張トランザクションインタフェース情報 */
01 一意名6.
  02 データ名EA  PIC 9(9) COMP.   /*情報長                              */
  02 データ名EB  PIC S9(9) COMP.  /*サービスプログラム起動時の応答の長さ*/
  02 データ名EC  PIC X(192).      /*予備                                */
 
/* XTC拡張トランザクションインタフェース情報 */
01 一意名7.
  02 データ名EA  PIC 9(9) COMP.   /*情報長                              */
  02 データ名EB  PIC X(1).        /*系情報                              */
  02 データ名EC  PIC X(1).        /*系切り替え前の実行系の状態          */
  02 データ名ED  PIC X(1).        /*出力キュー(OTQ)自動閉塞           */
  02 データ名EE  PIC X(1).        /*出力キュー自動閉塞レベル            */
  02 データ名EF  PIC 9(9) COMP.   /*出力キュー通番                      */
  02 データ名EG  PIC 9(9) COMP.   /*エラー要因通番                      */
  02 データ名EH  PIC 9(9) COMP.   /*入力キュー(ITQ)通番               */
  02 データ名EI  PIC 9(4) COMP.   /*ロールバックリトライ回数            */
  02 データ名EJ  PIC X(1).        /*系切り替え後の実行系の状態          */
  02 データ名EX  PIC X(169).      /*予備                                */

機能

サービスを実行して結果を返すSPPのサービスプログラムです。クライアントUAPでCBLEERPC('CALL ')やCBLEERPC('CMTSND ')を呼び出したとき,TP1/EEプロセスの開始・終了などによってトランザクションが発生したとき,DBキュー機能でキューを読み込んだときにサービスを要求されます。

サービスプログラムの処理は,上記の形式で任意に作成してください。サービス名は,サービスプログラムのプログラムIDに対応させます。この対応づけは,UAPの実行環境を設定するときに指定します。UAPの実行環境を設定する方法を次に示します。

データ領域の設定

サービスプログラムには,次の値がデータ領域に渡されます。

入力パラメタと入力パラメタの長さは,クライアントUAPで設定した値が,文字コードや数字の表現形式などを変換しないで,サービスプログラムにそのまま渡されます。応答の長さには,クライアントUAPで設定した長さが渡されます。

ERRTRNRによるRPC応答メッセージ送信機能を使用している場合で,拡張トランザクション種別(データ名Z)がEERPC_SERVICE_TRN_EXのときは,次のようになります。

サービスプログラムに値が渡されるデータ領域を次の表に示します。

表5‒1 サービスプログラムに値が渡されるデータ領域

引数

トランザクション種別

MI

ME

MN

E1

E2

E3

E4

ES

ER

TM

UI

MV

RL

入力パラメタ

×

×

×

×

×

入力パラメタ長

×

×

×

×

×

サービス関数の応答

×

×

×

×

×

×

×

×

×

×

×

×

応答の長さ

×

×

×

×

×

×

×

×

トランザクションインタフェース情報

(凡例)

○:参照できます。

×:参照できません。

注※

ERRTRNRによるRPC応答メッセージ送信機能を使用している場合で,拡張トランザクション種別がEERPC_SERVICE_TRN_EXのときだけ参照できます。

サービスプログラムには,次の値をデータ領域に設定します。

サービスプログラムは,データ名Cに応答を設定して,その長さをデータ名Dに設定してからリターンしてください。

サービスのクライアントUAPへの応答は,サービスプログラムがコミットしたかロールバックしたかには無関係に送信されます。必要ならばサービスプログラムでクライアントUAPにエラー発生を知らせる応答を作成してください。

クライアントUAPから値が渡されるデータ領域

●データ名A

クライアントUAPで設定した,入力パラメタが渡されます。

ただし,トランザクション種別がE4,ES,またはTMの場合は次の表に示す値が渡されます。

表5‒2 トランザクション種別がE4,ES,またはTMの場合に渡される値(データ名A)

トランザクション種別

渡される値

E4

CBLEETIM('EXECAP ')が起動するトランザクションに渡すデータ(データ名J)に設定した値

ES

トランザクションと同期して送信する非同期型のメッセージ送信API(CBLEERPC('CMTSND ')など)の入力パラメタ(データ名H)に設定した値

TM

CBLEETIM('EXECAP ')が起動するトランザクションに渡すデータ(データ名J)に設定した値

●データ名B

クライアントUAPで設定した,入力パラメタの長さが渡されます。

ただし,トランザクション種別がE4,ES,またはTMの場合は次の表に示す値が渡されます。

表5‒3 トランザクション種別がE4,ES,またはTMの場合に渡される値(データ名B)

トランザクション種別

渡される値

E4

CBLEETIM('EXECAP ')が起動するトランザクションに渡すデータ(データ名I)に設定した値

ES

トランザクションと同期して送信する非同期型のメッセージ送信API(CBLEERPC('CMTSND ')など)の入力パラメタ(データ名G)に設定した値

TM

CBLEETIM('EXECAP ')が起動するトランザクションに渡すデータ(データ名I)に設定した値

●データ名D

クライアントUAPで設定した,応答の長さが渡されます。

TP1/EEから値が返されるデータ領域

●一意名5

トランザクションインタフェース情報が返されます。詳細については,この章の「トランザクションインタフェース情報」を参照してください。

ただし,C言語と次の差分があります。

  • データ名O

    ユーザIFAエリアのサイズを設定します(単位:バイト)。

    ユーザIFAエリアのサイズが2GB以上の場合,データ名AMの値を参照してください。

  • データ名Q

    ユーザSATエリアのサイズを設定します(単位:バイト)。

    ユーザSATエリアのサイズが2GB以上の場合,データ名ANの値を参照してください。

●一意名7

XTC拡張トランザクションインタフェース情報が返されます。詳細については,この章の「トランザクションインタフェース情報」を参照してください。

UAPで値を設定するデータ領域

●データ名C

サービスプログラムからの応答を設定します。サービスプログラムの処理では,データ名Dに処理結果を設定してからリターンしてください。

●データ名D

サービスプログラムからの,実際の応答の長さを設定します。クライアントUAPから渡されたデータ名Dの値以下の数値を設定してください。

サービスプログラムの処理での注意

トランザクションとサービスプログラムの関係

グローバルトランザクションのそれぞれのサービスは,コミットするか,ロールバックとなるかのどちらかが保証されています。トランザクションブランチとして実行されるサービスプログラムがEXIT PROGRAMで終わることで,そのトランザクションブランチを正常終了させることを要求したことになります。

ステータスコード

ステータスコードはありません。TP1/EEでもステータスコードを参照しません。サービスプログラムから-1をリターンしても,ロールバックを要求したことにはなりません。