Hitachi

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


2.2.6 トランザクション境界の設定

トランザクション境界の設定をするアプリケーションの開発方法について説明します。

トランザクション境界の設定は、Orchestratorのアプリケーションで実装してください。

トランザクション境界の設定は、@PctoTransactionalアノテーションを使用します。@PctoTransactionalアノテーションのAPI仕様の詳細については、「6. API」を参照してください。@PctoTransactionalアノテーションを付与したメソッドは、別のクラスから呼び出してください。同一クラスの別メソッドから呼び出した場合、HMP-PCTOの機能は正しく動作しません。

〈この項の構成〉

(1) ライブラリの組み込み

@PctoTransactionalを使用するには、hmppcto-orchestratorライブラリをアプリケーションに組み込む必要があります。Gradleで組み込む記載例を次に示します。

dependencies {
    implementation 'jp.co.Hitachi.soft.hmppcto:hmppcto-orchestrator:<version>'
}

(2) コーディング例

@PctoTransactionalアノテーションを使用するコーディング例を次に示します。@PctoTransactionalアノテーションを使用するメソッドのアクセス制御修飾子は、private以外にしてください。privateとした場合は、HMP-PCTOの機能は正しく動作しません。

@PctoTransactional(rollbackOn = { java.io.IOException.class}, dontRollbackOn = {})
public void service() {
    
    // 業務処理
    
}

(3) エラーハンドリング

@PctoTransactionalアノテーションを設定したメソッドの呼び出し元には、障害発生時にHMP-PCTOの例外が送出されます。例外によってトランザクションの結果を確認できます。必要に応じて例外をcatchして後処理をしてください。

サービスのルートとなるメソッドに@PctoTransactionalアノテーションを指定した場合、例外がどのようなエラー処理にマッピングされるかは、使用しているフレームワーク、APサーバの仕様に依存します。@PctoTransactionalアノテーションは、ルートとなるメソッド以外に設定してエラーハンドリングすることを推奨します。

トランザクションの結果と例外の関係を次の表に示します。

表2‒3 トランザクションの結果と例外の関係

項番

トランザクションの結果

例外

備考

1

トランザクション未実行

TransactionSystemException

トランザクション開始時にトランザクションの合意に必要な数のMediatorが起動していない場合など、トランザクションが開始できなかった場合に発生します。

この例外が送出された場合、@PctoTransactionalアノテーションを設定したメソッドは実行されていません。

2

コミット決着

なし、または@PctoTransactionalアノテーションを設定したメソッドが送出した例外

3

ロールバック決着

RollbackTerminationException

@PctoTransactionalアノテーションを設定したメソッドが送出した例外は、RollbackTerminationExceptionのgetSuppressed()メソッドで受け取ることができます。

4

結果不明

TerminationFailureException

Mediatorとの通信障害によって結果が受け取れなかった場合に発生します。トランザクションの決着結果の確認方法については、「9. システム運用に必要となる機能」を参照してください。

@PctoTransactionalアノテーションを設定したメソッドが送出した例外は、TerminationFailureExceptionのgetSuppressed()メソッドで受け取ることができます。