Hitachi

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


dc_mcf_commit

〈このページの構成〉

名称

MHPのコミット

形式

ANSI C ,C++の形式

#include <dcmcf.h>
int  dc_mcf_commit(DCLONG action)

K&R版 C の形式

#include <dcmcf.h>
int   dc_mcf_commit(action)
DCLONG      action;

機能

MHPから開始するグローバルトランザクションで,ルートトランザクションブランチとして,トランザクションを構成するトランザクションブランチのUAP,トランザクションサービス,およびリソースマネジャに,処理が正常に終了したこと(コミット)を知らせます。

dc_mcf_commit関数が正常に終了すると,新しいグローバルトランザクションが開始します。

グローバルトランザクションが複数のトランザクションブランチから構成されるとき(関数を呼び出したMHPだけでないとき)は,それぞれのトランザクションブランチの処理結果がコミットとならないかぎりコミットされません。また,複数のリソースマネジャで構成されるときも同様に,それぞれのリソースマネジャの処理結果がコミットとならないかぎりコミットされません。コミットされない場合は,すべてのトランザクションブランチがロールバックされて,リターン値 DCMCFRTN_ROLLBACKでエラーリターンします。

MCFアプリケーション定義で非応答型(type=noans)と指定したMHPからだけ,dc_mcf_commit関数を呼び出せます。それ以外の型のMHPから呼び出した場合は,リターン値 DCMCFRTN_72000でエラーリターンします。また,MHP以外のUAPで呼び出した場合も同様に,リターン値DCMCFRTN_72000でエラーリターンします。

UAPで値を設定する引数

●action

DCNOFLAGSを設定します。

リターン値

リターン値

リターン値(数値)

意味

DCMCFRTN_00000

0

正常に終了しました。このリターン値が返った場合,dc_mcf_commit関数を呼び出したプロセスでは,新しいトランザクションが開始しています。

DCMCFRTN_ROLLBACK

-11906

トランザクションは,コミットできないでロールバックしました。このリターン値が返った場合,dc_mcf_commit関数を呼び出したプロセスでは,新しいトランザクションが開始しています。

DCMCFRTN_HEURISTIC

-11907

dc_mcf_commit関数を呼び出したグローバルトランザクションは,ヒューリスティック決定のため,あるトランザクションブランチはコミットとなって,また,あるトランザクションブランチはロールバックとなりました。このリターン値が返った場合,dc_mcf_commit関数を呼び出したプロセスでは,新しいトランザクションが開始しています。

DCMCFRTN_HAZARD

-11908

グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。しかし,障害のため,ヒューリスティックに完了したトランザクションブランチの同期点の結果が判明しません。このリターン値が返った場合,dc_mcf_commit関数を呼び出したプロセスでは,新しいトランザクションが開始しています。

トランザクションサービス定義で,trn_extend_functionオペランドに00000001を指定し,1相コミット時にリソースマネジャからのリターン値がXAER_NOTAの場合も,DCMCFRTN_HAZARDを返します。

DCMCFRTN_72000

-13000

<MHPの実行でリターンした場合>

dc_mcf_commit関数を呼び出した位置が間違っています。MHPで先頭セグメントを受信するdc_mcf_receive関数を呼び出す前に,dc_mcf_commit関数を呼び出しています。

MCFアプリケーション定義で非応答型(type=noans)と指定していないMHPから,dc_mcf_commit関数を呼び出しています。

非トランザクション属性のMHPから,dc_mcf_commit関数を呼び出しています。

<SPPの実行でリターンした場合>

SPPからdc_mcf_commit関数は呼び出せません。

DCMCFRTN_72016

-13016

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

上記以外

プログラムの破壊などによる,予期しないエラーが発生しました。

注意事項

dc_mcf_commit関数が正常に終了しても,入力メッセージは入力キューから削除されません。そのため,MHPがスケジュールし直されたあとに該当するメッセージを処理し続ける場合,どの時点までコミットしていたかは不定です。MHPが再びスケジュールされるのは次の場合です。

  1. MCFイベントが通知されて,MCFイベント処理用MHPをスケジュールしたとき

  2. システムが異常終了して,OpenTP1が該当する処理のMHPを再スケジュールしたとき

スケジュールし直されたMHPで該当するメッセージを処理し続ける場合,コミットした範囲はユーザで管理してください。