Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Financial Service Platform プログラム作成の手引


1.2.5 トランザクション制御(ee_trn_〜)(C言語)

〈この項の構成〉

(1) ee_trn_watch

名称

トランザクション処理時間監視

形式

ANSI C,C++の形式

#include <eetrn.h>
int ee_trn_watch(EEULONG cntrl, EEULONG time_type, EEULONG watch_time, EELONG flags);
機能

トランザクション処理の時間監視を経過時間(リアルタイム)で行います。トランザクション実行中にタイムアウトとなったときは,uapabend_downmodeオペランド値に従い,プロセスダウン,または該当のスレッドを強制終了させて,ERRTRN3(定義がある場合だけ)を起動します。

同一トランザクション内でee_trn_set_exp_time関数を発行済みの場合,本関数は使用できません。

UAPで値を設定する引数

cntrl

時間監視に関する指示を設定します。

EETRN_CNTRL_START:時間監視を開始します。

EETRN_CNTRL_SUPRES:時間監視を抑止します。

EETRN_CNTRL_RSTART:抑止した時間監視を再開します。

EETRN_CNTRL_STOP:時間監視を終了します。

time_type

監視時間値watch_timeの形式を設定します。cntrlにEETRN_CNTRL_START以外が指定された場合,指定値を無視します。

EETRN_TIME_TYPE_BINARY:EEULONGの形式で設定します。

watch_time

監視時間値を秒単位(1〜65,535)で設定します。

cntrlにEETRN_CNTRL_START以外が指定された場合,指定値を無視します。

flags

EENOFLAGSを設定します。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EECOMER_CNDUOC

UOCから発行しているため,本機能は使用できません。

EECOMER_CNDBPP

オフラインバッチプロセスから発行しているため,本機能は使用できません。

EETRNER_ARGUMENT

引数に設定した値が間違っています。

EETRNER_CONDITION

発行条件が不正です。

TP1/FSPの環境下にありません。

EETRNER_UNRESOLVABLE

その他のエラーが発生しました。

注意事項
  1. トランザクション関連定義のtrn_expiration_time,trn_expiration_time_xx,またはユーザサービス定義のservice_attrでトランザクション処理監視時間を指定しているときは,トランザクション処理の時間監視が開始した状態でUAPのサービス関数が呼び出されます。同期点処理後は定義で指定したトランザクション処理時間監視値に戻ります。

  2. トランザクション処理の監視時間の変更は,コール元のトランザクションに限定されるため,eetrntimコマンドの-lオプション指定によるトランザクション処理の監視時間情報の表示には反映されません。

(2) ee_trn_getrtime

名称

トランザクション処理時間監視の残り時間取得

形式

ANSI C,C++の形式

#include <eetrn.h>
int ee_trn_getrtime(EEULONG time_type, EEULONG *res_time, EELONG flags);
機能

トランザクション処理の時間監視での残り時間を取得します。

UAPで値を設定する引数

time_type

残り時間値res_timeの形式を設定します。

EETRN_TIME_TYPE_BINARY:EEULONGの形式で設定します。

res_time

残り時間値を格納する領域のアドレスを設定します。

flags

EENOFLAGSを設定します。

TP1/EEから値が返される引数

res_time

トランザクション処理の時間監視での残り時間が秒単位で格納されます。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EECOMER_CNDUOC

UOCから発行しているため,本機能は使用できません。

EECOMER_CNDBPP

オフラインバッチプロセスから発行しているため,本機能は使用できません。

EETRNER_ARGUMENT

引数に設定した値が間違っています。

EETRNER_CONDITION

発行条件が不正です。

TP1/FSPの環境下にありません。

EETRNER_NONE

トランザクション処理の時間監視中ではありません。

EETRNER_UNRESOLVABLE

その他のエラーが発生しました。

(3) ee_trn_uap_put

名称

UAP履歴情報の取得

形式

ANSI C,C++の形式

#include <eetrn.h>
int ee_trn_uap_put(EETRNUAPBUF *uap_buf, EELONG flags);
 
typedef struct ee_trn_uap_buf_t{    /*履歴情報バッファ構造体    */
        EETRNUAPBUF *next_uap_buf;  /*次履歴情報バッファアドレス*/
        char *uap_inf;              /*履歴情報アドレス          */
        EEULONG buf_size;           /*履歴情報全体サイズ        */
        EEULONG ee_inf1;            /*TP1/EE使用領域            */
        EEULONG ee_inf2;            /*TP1/EE使用領域            */
        char dummy[4];             /*予備                      */
} EETRNUAPBUF;
 
typedef struct ee_trn_uap_header_t{  /*履歴情報ヘッダ構造体     */
        char uap_info[4];            /*データ連携支援引き継ぎ情報*/
        char uap_header[16];         /*ユーザ任意情報            */
        unsigned short uap_putid;    /*取得先ID                 */
        unsigned char uap_type;      /*履歴情報種別             */
        unsigned char uap_code;      /*履歴情報コード           */
        char dummy2[4];              /*予備                     */
        EEULONG uap_size;            /*履歴情報サイズ           */
} EEUAPHEADER;
機能

指定したUAP履歴情報(履歴情報ヘッダ含む)をトランザクションのコミット時に取得先IDに対応したDB表(履歴情報表)に取得します。

UAPで値を設定する引数

uap_buf

履歴情報バッファ構造体の先頭アドレスを設定します。

履歴情報バッファ構造体には次の情報を設定します。

  • 次履歴情報バッファアドレス

    次の履歴情報バッファがない場合は,NULLを設定します。

  • 履歴情報アドレス

  • 履歴情報全体サイズ

    履歴情報ヘッダと履歴情報のサイズの合計値を設定します。履歴情報全体サイズの最大長は,マニュアル「TP1/Financial Service Platform 使用の手引」を参照してください。

履歴情報ヘッダ構造体に次の情報を設定します。

  • ユーザ任意情報

    任意の情報を設定します。TP1/EEでは参照しません。

  • 取得先ID

    トランザクション関連定義のtrnaphputid定義コマンドで指定した取得先IDを設定します。

  • 履歴情報種別

    EETRN_UAP_TYPE_UJ:ユーザデータ(UJ)としてUAP履歴情報を取得するときに設定します。

    EETRN_UAP_TYPE_IJ:入力データ(IJ)としてUAP履歴情報を取得するときに設定します。

  • 履歴情報コード

    任意の情報を設定します。TP1/EEでは参照しません。

  • 履歴情報サイズ

    履歴情報(ユーザデータまたは入力データ)のサイズを設定します。TP1/EEでは参照しません。

    図1‒2 履歴情報領域の構造

    [図データ]

flags

EENOFLAGSを設定します。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EECOMER_CNDUOC

UOCから発行しているため,本機能は使用できません。

EECOMER_CNDBPP

オフラインバッチプロセスから発行しているため,本機能は使用できません。

EETRNER_ARGUMENT

引数に設定した値が間違っています。

EETRNER_CONDITION

発行条件が不正です。

TP1/FSPの環境下にありません。

発行不可のトランザクションです。

ee_trn_rollback_mark関数を発行済みです。

ee_trn_uap_fput関数を発行済みです。

EETRNER_NO_OPTION

UAP履歴情報取得機能は使用できません。

EETRNER_RM_CONNECT

リソースマネジャと未接続です。

EETRNER_OVER

1トランザクションで取得できるUAP履歴情報の最大数を超えています。

EETRNER_SQL_ERROR

SQL実行時にエラーが発生しました。該当トランザクションはロールバックとなります。

EETRNER_STOP

取得先IDに属するすべてのUAP履歴情報グループは,障害によって使用不可状態です。

注意事項
  1. 1トランザクションで取得できるUAP履歴情報(製品が取得する出力データ(OJ)も含む)の最大数は,32,767です。

  2. 取得先IDに属するUAP履歴情報グループのうち,使用不可状態でないUAP履歴情報グループが1つでもある場合,リターン値はEETRNER_STOPで返りません。

  3. 履歴情報全体サイズが指定可能な最大長を超えた場合,リターン値はEETRNER_ARGUMENTになります。

  4. 1回の要求で,1トランザクションで取得できるUAP履歴情報の最大数を超えた場合,リターン値はEETRNER_ARGUMENTになります。

  5. 履歴情報ヘッダ構造体のデータ連携支援引き継ぎ情報は,データ連携支援実行時にee_trn_set_uj_info()関数で設定した情報で更新します。

(4) ee_trn_retry_rollback

名称

リトライモードのロールバック

形式

ANSI C,C++の形式

#include <eetrn.h>
int ee_trn_retry_rollback(EEULONG thkind, EEULONG ecode);
機能

トランザクションをロールバックします。ロールバックしたあとには,スレッドダウンします。スレッドダウン後に,サービス関数を再度開始します。このとき,サービスに渡すメッセージは,ee_trn_retry_rollbackを呼び出したサービス関数に渡したメッセージと同じ内容です。ee_trn_retry_rollbackを呼び出したサービス関数でメッセージを更新しても,更新内容は反映されないで更新前のメッセージを渡します。

ee_trn_retry_rollbackは同期点処理が完了すると,ee_trn_retry_rollbackを呼び出したスレッドを強制終了します。呼び出したサービス関数にリターンするのはエラーのときだけです。

UAPで値を設定する引数

thkind

リトライ回数の上限に達した場合に,メモリDUMPファイルとCOBOL異常終了時要約リストを出力するかどうかを設定します。

EETRN_KILL:メモリDUMPファイルとCOBOL異常終了時要約リストを出力しません。

EETRN_ABRT:メモリDUMPファイルとCOBOL異常終了時要約リストを出力します。

ecode

リトライ回数の上限に達した場合に,ERRTRN3へ引き渡すエラー要因コードを設定します。

リターン値

リターン値

意味

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EECOMER_CNDUOC

UOCから発行しているため,本機能は使用できません。

EECOMER_CNDBPP

オフラインバッチプロセスから発行しているため,本機能は使用できません。

EETRNER_ARGUMENT

引数に設定した値が間違っています。

EETRNER_CONDITION

発行条件が不正です。

TP1/FSPの環境下にありません。

trn_max_retry_countオペランドに0を指定しています。

発行不可のトランザクションです。

トランザクショナルRPCによって起動されたトランザクションです。

トランザクショナルRPC要求を行ったトランザクションです。

RPC応答メッセージを抑止済みです。

(5) ee_trn_uap_change

名称

UAP履歴情報の取得先ID変更

形式

ANSI C,C++の形式

#include <eetrn.h>
int ee_trn_uap_change(unsigned char uap_type,
                      unsigned short before_uap_putid,
                      unsigned short after_uap_putid,
                      EELONG flags);
機能

入力データ(IJ)および出力データ(OJ)の取得先IDを変更します。

  • 入力データ(IJ)の取得先ID変更

    本関数発行以前に本トランザクションでUAP履歴情報取得要求した入力データ(IJ)に対して有効です。変更後の変更先IDに属するUAP履歴情報グループのバッファにバッファリングします。

  • 出力データ(OJ)の取得先ID変更

    本関数発行以降に本トランザクションでUAP履歴情報取得要求する出力データ(OJ)に対して有効です。出力データ(OJ)の取得先IDが,変更後の取得先IDに代わります。

UAPで値を設定する引数

uap_type

EETRN_UAP_TYPE_IJ:入力データ(IJ)の取得先IDを変更する場合に指定します。

EETRN_UAP_TYPE_OJ:出力データ(OJ)の取得先IDを変更する場合に指定します。

before_uap_putid

uap_typeがEETRN_UAP_TYPE_IJの場合,トランザクション関連定義のtrnaphputid定義コマンドで指定した変更前の取得先IDを設定します。

uap_typeがEETRN_UAP_TYPE_OJの場合,指定値を無視します。

after_uap_putid

トランザクション関連定義のtrnaphputid定義コマンドで指定した変更後の取得先IDを設定します。

flags

EENOFLAGSを設定します。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EECOMER_CNDUOC

UOCから発行しているため,本機能は使用できません。

EECOMER_CNDBPP

オフラインバッチプロセスから発行しているため,本機能は使用できません。

EETRNER_ARGUMENT

引数に設定した値が間違っています。

EETRNER_CONDITION

発行条件が不正です。

TP1/FSPの環境下にありません。

発行不可のトランザクションです。

ee_trn_rollback_mark関数を発行済みです。

EETRNER_NO_OPTION

UAP履歴情報取得機能は使用できません。

EETRNER_RM_CONNECT※1

リソースマネジャと未接続です。

EETRNER_SQL_ERROR※2

SQL実行時にエラーが発生しました。該当トランザクションはロールバックとなります。

EETRNER_STOP※1

取得先IDに属するすべてのUAP履歴情報グループは,障害によって使用不可状態です。

EETRNER_NO_DATA※2

変更前の取得先IDに,入力データ(IJ)がありません。

変更前の取得先IDに属するUAP履歴情報グループで,途中書き込みが発生しているため,変更できません。

注※1

変更後の取得先ID関連だけチェックします。

注※2

uap_typeにEETRN_UAP_TYPE_IJを指定した場合だけです。

注意事項
  1. 以前に取得した入力データ(IJ)のうち,変更前の取得先IDが一致する入力データ(IJ)だけ,取得先IDが変更されます。変更前の取得先IDが一致しない入力データ(IJ)は変更されません。

  2. 入力データ(IJ)について,最大履歴情報長(eeaphgrphコマンドの-zオプション指定値)が変更前の取得先IDに属するUAP履歴情報グループより小さくなる場合,履歴情報のサイズが算出式を満たしていないと,エラーになります。

(6) ee_trn_gethandle

名称

接続ハンドル取得

形式

ANSI C,C++の形式

#include <eetrn.h>
int ee_trn_gethandle(char *groupid, void **handle_pt, EELONG flags);
機能

HiRDBを使用した環境でSQLを実行するために,TP1/EEが管理している接続ハンドルを取得します。

UAPで値を設定する引数

groupid

ユーザサービス用xa_open関数用文字列に指定した環境変数グループ識別子(先頭4文字)を設定します。文字列の最後にはヌル文字を設定してください。このヌル文字は文字列の長さに数えません。

handle_pt

接続ハンドルを格納する領域のアドレスを設定します。

flags

EENOFLAGSを設定します。

TP1/EEから値が返される引数

handle_pt

接続ハンドルが格納されます。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EECOMER_CNDUOC

UOCから発行しているため,本機能は使用できません。

EECOMER_CNDBPP

オフラインバッチ/データ連携支援以外から発行しているため,本機能は使用できません。

EETRNER_ARGUMENT

引数に設定した値が間違っています。

EETRNER_CONDITION

発行条件が不正です。

トランザクション関連定義trnstring定義コマンドが設定されていません。

EETRNER_RM_CONNECT

リソースマネジャと未接続です。

注意事項
  1. TP1/EEは,HiRDBの複数接続機能を使用して,HiRDBサーバと接続します。本関数で取得した接続ハンドルを使用して,接続ハンドルの宣言「DECLARE CONNECTION HANDLE SET」を行ってください。

(7) ee_trn_set_uj_info

名称

データ連携支援引き継ぎ情報の設定

形式

ANSI C,C++の形式

#include <eetrn.h>
int ee_trn_set_uj_info(char *uj_info, EELONG flags)
機能

データ連携支援機能へ引き継ぐユーザ情報(データ連携支援引き継ぎ情報)を設定します。

データ連携支援引き継ぎ情報サイズは4バイト固定です。

この情報は,データ連携支援機能の次のUOCで参照できます。

  • 反映先指定UOC

  • 編集UOC

  • 反映UOC

この情報は,本API発行が正常終了したあとに同期点を取得した,全トランザクションのUAP履歴情報に引き継がれます。

この情報は,APIを発行したトランザクションがロールバックした場合でも有効となります。

この情報は,リラン回復対象ではありません。

UAPで値を設定する引数

uj_info

データ連携支援引き継ぎ情報格納領域の先頭アドレスを指定します。

指定されたアドレスから先頭4バイトをデータ連携支援引き継ぎ情報とします。

この情報は,履歴情報レコードエリアの履歴情報ヘッダのデータ連携支援引き継ぎ情報領域に格納されます。

flags

EENOFLAGSを設定します。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EECOMER_CNDUOC

UOCから発行しているため,この機能は使用できません。

EECOMER_CNDBPP

オフラインバッチプロセスから発行しているため,この機能は使用できません。

EETRNER_ARGUMENT

引数に設定した値が間違っています。

EETRNER_CONDITION

発行条件が不正です。

TP1/FSPの環境下にありません。

EETRNER_NO_OPTION

UAP履歴情報取得機能は使用できません。

注意事項
  1. UAP履歴情報のデータ連携支援引き継ぎ情報は,データ連携支援機能だけで有効です。

(8) ee_trn_uap_fput

名称

UAP履歴情報の強制取得

形式

ANSI C,C++の形式

#include <eetrn.h>
int ee_trn_uap_fput(EETRNUAPBUF *uap_buf, EETRNUAPTBL *uap_tbl, EELONG flags)
 
typedef struct ee_trn_uap_buf_t{   /*履歴情報バッファ構造体      */
        EETRNUAPBUF *next_uap_buf; /*次履歴情報バッファアドレス  */
        char *uap_inf;             /*履歴情報アドレス            */
        EEULONG buf_size;          /*履歴情報全体サイズ          */
        EEULONG ee_inf1;           /*TP1/EE使用領域              */
        EEULONG ee_inf2;           /*TP1/EE使用領域              */
        char dummy[4];             /*予備                         */
} EETRNUAPBUF;
 
typedef struct ee_trn_uap_tbl_t{  /*取得先情報構造体        */
        char group_name[32];      /*UAP履歴情報グループ名  */
        char tbl_name[32];        /*履歴情報表名            */
        char dummy[64];           /*予備                    */
} EETRNUAPTBL;
 
typedef struct ee_trn_uap_header_t{  /*履歴情報ヘッダ構造体    */
        char uap_info[4];            /*データ連携引き継ぎ情報  */
        char uap_header[16];         /*ユーザ任意情報          */
        unsigned short uap_putid;    /*取得先ID               */
        unsigned char uap_type;      /*履歴情報種別            */
        unsigned char uap_code;      /*履歴情報コード          */
        char dummy2[4];              /*予備                    */
        EEULONG uap_size;            /*履歴情報サイズ          */
} EEUAPHEADER;
機能

指定したUAP履歴情報(履歴情報ヘッダ含む)をトランザクションのコミット時に取得先情報に指定した履歴情報表に取得します。

この関数は,-cオプションを指定したeeaphswapコマンドによってスワップして使用済みの状態となった履歴情報表だけを対象とします。

1トランザクション内で同じUAP履歴情報グループの異なる履歴情報表への取得はできません。

-tオプション,または-Tオプションを指定してeeaphlshコマンドを実行して強制書き込み可能数を確認することで,この関数が発行できるかどうかを確認できます。

UAPで値を設定する引数

uap_buf

履歴情報バッファ構造体の先頭アドレスを設定します。

履歴情報バッファ構造体に次の情報を設定します。

  • 次履歴情報バッファアドレス

    NULLを設定します。

  • 履歴情報アドレス

  • 履歴情報全体サイズ

    履歴情報ヘッダと履歴情報のサイズの合計値を設定します。履歴情報全体サイズの最大長は,マニュアル「TP1/Financial Service Platform 使用の手引」を参照してください。

履歴情報ヘッダ構造体に次の情報を設定します。

  • データ連携引き継ぎ情報

    データ連携引き継ぎ情報を設定します。

  • ユーザ任意情報

    任意の情報を設定します。TP1/EEでは参照しません。

  • 取得先ID

    トランザクション関連定義のtrnaphputid定義コマンドで指定した取得先IDを設定します。

  • 履歴情報種別

    EETRN_UAP_TYPE_UJ:ユーザデータ(UJ)としてUAP履歴情報を取得するときに設定します。

  • 履歴情報コード

    任意の情報を設定します。TP1/EEでは参照しません。

  • 履歴情報サイズ

    履歴情報(ユーザデータ)のサイズを設定します。TP1/EEでは参照しません。

    図1‒3 履歴情報領域の構造

    [図データ]

uap_tbl

取得先情報構造体の先頭アドレスを設定します。

取得先情報構造体に次の情報を設定します。

  • UAP履歴グループ名

    取得先のUAP履歴情報グループ名を26バイト以内の文字列で設定します。文字列の最後にはヌル文字を設定してください。このヌル文字は文字列の長さに数えません。

  • 履歴情報表名

    取得先の履歴情報表名を26バイト以内の文字列で設定します。文字列の最後にはヌル文字を設定してください。このヌル文字は文字列の長さに数えません。

flags

EENOFLAGSを設定します。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EECOMER_CNDUOC

UOCから発行しているため,本機能は使用できません。

EECOMER_CNDBPP

オフラインバッチプロセスから発行しているため,本機能は使用できません。

EETRNER_ARGUMENT

引数に設定した値が間違っています。

EETRNER_CONDITION

発行条件が不正です。

TP1/FSPの環境下にありません。

発行不可のトランザクションです。

ee_trn_rollback_mark関数を発行済みです。

ee_trn_uap_put関数発行済み,または出力データ(OJ)を取得済みです。

強制取得可能な履歴情報表ではありません。

履歴情報表の空きが不足しています。

EETRNER_NO_OPTION

UAP履歴情報取得機能は使用できません。

EETRNER_RM_CONNECT

リソースマネジャと未接続です。

EETRNER_OVER

取得できるUAP履歴情報の最大数を超えています。

EETRNER_SQL_ERROR

SQL実行時にエラーが発生しました。該当トランザクションはロールバックとなります。

EETRNER_STOP

UAP履歴情報グループは,障害によって使用不可状態です。

注意事項
  1. この関数で取得できるUAP履歴情報の最大数は,eeaphswapコマンドの-cオプション指定値に依存します。

  2. 同じ履歴情報表名を設定して,複数スレッドから同時にこの関数を実行しないでください。実行した場合,UAP履歴情報の取得に失敗することがあります。

  3. 履歴情報全体サイズが指定可能な最大長を超えた場合,リターン値はEETRNER_ARGUMENTになります。

  4. 履歴情報ヘッダ構造体のデータ連携引き継ぎ情報は,ee_trn_set_uj_info()関数で設定した情報では更新されないため,この関数で設定してください。この関数を1トランザクションで複数回発行したときは,最後に発行したときのデータ連携引き継ぎ情報が有効となります。

  5. この関数の延長でSQLが実行されます。