Hitachi

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


2.2.7 アノテーションによるトランザクションブランチの作成(SQL-Participant限定)

アノテーションによってトランザクションブランチを作成するアプリケーションの開発方法について説明します。アノテーションによるトランザクションブランチの作成は、次のアプリケーションで実装してください。

トランザクションブランチの作成には、@PctoTransactionBranchアノテーションを使用します。また、@PctoTransactionBranchアノテーションに属性を設定することで、先行プリペア機能を使用できます。@PctoTransactionBranchアノテーションのAPI仕様の詳細については、「8.2.13 @PctoTransactionBranchアノテーション」を参照してください。@PctoTransactionBranchアノテーションを付与したメソッドは、別のクラスから呼び出してください。同一のクラスの別メソッドから呼び出した場合は、HMP-PCTOの機能は正しく動作しません。

〈この項の構成〉

(1) @PctoTransactionBranchアノテーションをメソッドに指定

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

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

dependencies {
    implementation 'jp.co.Hitachi.soft.hmppcto:hmppcto-orchestrator:<V.R.S>'
}
注※

V.R.Sは使用するHMP-PCTOのバージョンに合わせて読み替えてください。

(b) コーディング例

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

@PctoTransactionBranch
public void service() {
    
    // 業務処理
    
}

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

トランザクションではない呼び出し元で@PctoTransactionBranchアノテーションを指定したメソッドを呼び出した場合、メソッドの呼び出し元にTransactionBranchException例外が送出されます。

(2) 先行プリペア機能の使用

先行プリペア機能を使用するには、@PctoTransactionBranchアノテーションを指定する際に、アノテーションのprePreparedOn属性を設定してください。

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

先行プリペア機能を使用する場合に組み込むライブラリは、@PctoTransactionBranchアノテーションをメソッドに指定する際に使用するライブラリと同じです。ライブラリについては、「(a) ライブラリの組み込み」を参照してください。

(b) コーディング例

先行プリペア機能を使用する場合、@PctoTransactionBranchアノテーションのprePreparedOn属性にtrueを設定します。prePreparedOn属性の詳細については、「8.2.13 @PctoTransactionBranchアノテーション」を参照してください。

@PctoTransactionBranch(prePreparedOn = true)
public void service() {
    
    // 業務処理
    
}

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

先行プリペア機能の使用によって、アプリケーションでエラーハンドリングが必要なエラーは発生しません。

(3) 注意事項

先行プリペアを実行した@PctoTransactionBranchアノテーションを指定したメソッドの実行後に、@PctoTransactionBranchアノテーションを指定した別のメソッドを実行した場合、SQLは実行できません。先行プリペア実行後にSQLを実行するためにJDBC Proxy Driverのメソッドを実行した場合は、PctoPrePreparedException例外を送出して、SQLを実行しないで無視します。トランザクションがコミットするかロールバックするかには影響しません。アプリケーションでPctoPrePreparedException例外をキャッチしてロールバックするかどうかを判断してください。