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アノテーションは、ルートとなるメソッド以外に設定してエラーハンドリングすることを推奨します。
トランザクションの結果と例外の関係を次の表に示します。
|
項番 |
トランザクションの結果 |
例外 |
備考 |
|---|---|---|---|
|
1 |
トランザクション未実行 |
TransactionSystemException |
トランザクション開始時にトランザクションの合意に必要な数のMediatorが起動していない場合など、トランザクションが開始できなかった場合に発生します。 この例外が送出された場合、@PctoTransactionalアノテーションを設定したメソッドは実行されていません。 |
|
2 |
コミット決着 |
なし、または@PctoTransactionalアノテーションを設定したメソッドが送出した例外 |
− |
|
3 |
ロールバック決着 |
RollbackTerminationException |
@PctoTransactionalアノテーションを設定したメソッドが送出した例外は、RollbackTerminationExceptionのgetSuppressed()メソッドで受け取ることができます。 |
|
4 |
結果不明 |
TerminationFailureException |
Mediatorとの通信障害によって結果が受け取れなかった場合に発生します。トランザクションの決着結果の確認方法については、「9. システム運用に必要となる機能」を参照してください。 @PctoTransactionalアノテーションを設定したメソッドが送出した例外は、TerminationFailureExceptionのgetSuppressed()メソッドで受け取ることができます。 |