2.2.7 アノテーションによるトランザクションブランチの作成(SQL-Participant限定)
アノテーションによってトランザクションブランチを作成するアプリケーションの開発方法について説明します。アノテーションによるトランザクションブランチの作成は、次のアプリケーションで実装してください。
-
Orchestrator-Service(SQL)
-
Alternate-Service(SQL)
トランザクションブランチの作成には、@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例外をキャッチしてロールバックするかどうかを判断してください。