Hitachi

Hitachi Microservices Platform - Paxos Commit Transaction Orchestrator ユーザーズガイド


6.4.5 TccService<I, O extends java.io.Serializable>インタフェース

説明

TCCパターンのTry、Confirm、Cancel、Recoverの定義を持つインタフェースです。このインタフェースをユーザが実装することで、TCCパターンを利用したトランザクション制御を実現します。ジェネリクスIはexecuteTryの第一引数の型、OはexecuteTryの戻り値、executeConfirm、executeCancelの引数で利用されるTccResponseのジェネリクスで利用される型を指定します。

メソッド

TccServiceインタフェースのメソッドの一覧を次の表に示します。

表6‒31 TccServiceインタフェースのメソッドの一覧

メソッド

説明

executeTry(I input)

データの仮登録を行う処理を実装します。

executeConfirm(TccResponse<O> response)

トランザクションが正常に決着したときの処理を実装します。

executeCancel(TccResponse<O> response)

トランザクションが異常に決着したときの処理を実装します。

executeRecover()

TCC-Participantが再起動した際に、未決着かつ自Participantが登録したTccResponseの一覧を返す処理を実装します。

getOperationId()

TCC-Participant内のユーザアプリケーション内に実装されたTccServiceインタフェースの複数の実装クラスを一意に識別する文字列を返す処理を実装します。

パッケージ名称
jp.co.Hitachi.soft.hmppcto.participant.tcc.api
〈この項の構成〉

(1) executeTry(I input)

説明

TCCパターンにおけるTryの処理を実装してください。例えばTryはデータの仮登録を行います。詳細な実装方法は「2.2 Javaアプリケーションの開発」のexecuteTry()メソッドの実装の説明を参照してください。

戻り値のTccResponse<O>のOはジェネリクスで指定した任意の型です。

この処理中に例外が発生した場合、HMP-PCTOでキャッチしてメッセージを出すなどの処理はしません。メッセージやスタックトレースの出力処理はユーザが必要に応じて実装してください。

executeTryの呼び出し元で@PctoBranchRollbackForアノテーションを利用した上で、例外の種類に応じてHTTPステータスを変更することで、トランザクションをコミット決着させるかロールバック決着させるかを指定できます。@PctoBranchRollbackForアノテーションに関しては「6.2.7 @PctoBranchRollbackForアノテーション」や「2.2 Javaアプリケーションの開発」のトランザクションの伝搬の説明を参照してください。

形式
public TccResponse<O> executeTry(I input) throws java.lang.Exception
引数
I input:

任意の型のデータオブジェクトを指定します。

戻り値

TccResponse< O>クラスのインスタンスを返します。

例外
java.lang.Exception:

executeTryの処理中に異常が発生した場合に送出してください。

(2) executeConfirm(TccResponse<O> response)

説明

TCCパターンにおけるConfirmの処理を実装してください。例えばConfirmはTryで仮登録したデータを確定させる処理を行います。詳細な実装方法は「2.2 Javaアプリケーションの開発」のexecuteConfirm()メソッドの実装の説明を参照してください。

HMP-PCTOから分散合意結果がCommit決着であった場合に実行されます。

なお、同一トランザクションに参加しているTccServiceインタフェースの複数の実装クラスの間で、HMP-PCTOからの各executeConfirm()メソッドの実行順序は順不同です。

引数のTccResponse<O>のOはジェネリクスで指定した任意の型で、executeTryの戻り値を利用します。

この処理で送出された例外はHMP-PCTOでキャッチし、KFSG62007-E (Y)Mのメッセージおよびスタックトレースを出力し、トランザクションを終了します。

形式
public void executeConfirm(TccResponse<O> response)
引数
TccResponse<O> response:

executeTryメソッドで戻り値として受け取ったTccResponseクラスの値を指定します。

戻り値

なし。

例外

なし。

(3) executeCancel(TccResponse<O> response)

説明

TCCパターンにおけるCancelの処理を実装してください。例えばCancelはTryで仮登録したデータを取り消す処理を行います。詳細な実装方法は「2.2 Javaアプリケーションの開発」のexecuteCancel()メソッドの実装の説明を参照してください。

HMP-PCTOから分散合意結果がRollbackであった場合に実行されます。

引数のTccResponse<O>のOはジェネリクスで指定した任意の型で、executeTryの戻り値を利用します。

この処理で送出された例外はHMP-PCTOでキャッチし、KFSG62008-E (Y)Mのメッセージおよびスタックトレースを出力し、トランザクションを終了します。

形式
public void executeCancel(TccResponse<O> response)
引数
TccResponse<O> response:

executeTryメソッドで戻り値として受け取ったTccResponseクラスの値を指定します。

戻り値

なし。

例外

なし。

(4) executeRecover()

説明

TCC-Participantが再起動した際に実行されます。

このメソッドが呼び出された時点で未決着かつ自Participantが登録したTccResponseの一覧を返す処理を実装してください。

詳細な実装方法は「2.2 Javaアプリケーションの開発」のexecuteRecover()メソッドの実装の説明を参照してください。

この処理で送出された例外はHMP-PCTOでキャッチし、KFSG62004-E (Y)Mのメッセージおよびスタックトレースを出力し、Podの起動を終了します。

形式
public java.util.Set<TccResponse<O>> executeRecover()
引数

なし。

戻り値

このメソッドが呼び出された時点で未決着かつ自Participantが登録したTccResponseの一覧を返します。

未決着かつ自Participantが登録したTccResponseがない場合は、空のjava.util.setを返します。

例外

なし。

(5) getOperationId()

説明

TCC-Participant内のユーザアプリケーション内に実装されたTccServiceインタフェースの複数の実装クラスを一意に識別するIDを返す処理を実装してください。

詳細な実装方法は「2.2 Javaアプリケーションの開発」のgetOperationId()メソッドの実装の説明を参照してください。

例外が発生したとき、executeRecover中の場合はHMP-PCTOでキャッチし、KFSG62012-E (Y)Mのメッセージおよびスタックトレースを出力し、Podの起動を終了します。

一方、トランザクション開始時の場合はHMP-PCTOでキャッチし、KFSG62012-E (Y)Mのメッセージおよびスタックトレースを出力し、トランザクションの要求を無視します。

形式
public java.lang.String getOperationId()
引数

なし。

戻り値

TccServiceを一意に識別する文字列を返します。

文字列の長さは1〜256バイトの範囲内である必要があります。

例外

なし。