2.2.9 通信によるトランザクションブランチの作成(REST通信-サーバ)
REST通信によるトランザクションブランチを作成するサーバの開発方法について説明します。
REST通信によるトランザクションブランチの作成は、次のアプリケーションで実装してください。
-
Relay-Service
-
Entity-Service(SQL)
-
Entity-Service(TCC)
-
Alternate-Service
-
Alternate-Service(SQL)
サーバでは、HMP-PCTOのフィルタを登録してトランザクションを伝搬する必要があります。フィルタの登録はライブラリの組み込みを行うことで、自動的に行われます。
また、トランザクションブランチを作成することで、通信によるトランザクションブランチのロールバック条件を設定できます。
ライブラリの組み込み方法とトランザクションブランチのロールバック条件の設定方法を次に示します。
- 〈この項の構成〉
(1) フィルタの登録
(a) ライブラリの組み込み
フィルタを登録するには次のライブラリをアプリケーションに組み込む必要があります。
-
hmppcto-entity-service
-
hmppcto-server-http-filter
-
jakarta.ws.rs-api
Gradleで組み込む記載例を次に示します。
dependencies {
implementation 'jp.co.Hitachi.soft.hmppcto:hmppcto-entity-service:<V.R.S>※1'
implementation 'jp.co.Hitachi.soft.hmppcto:hmppcto-server-http-filter:<V.R.S>※1'
implementation 'jakarta.ws.rs:jakarta.ws.rs-api:<rs-apiのV.R.S>※2'
}
- 注※1
-
V.R.Sは使用するHMP-PCTO、およびrs-apiのバージョンに合わせて読み替えてください。
- 注※2
-
<rs-apiのV.R.S>に指定するバージョンは、「表1‒7 HMP-PCTOの前提OSおよび前提プログラム」の「Javaライブラリ」の「jakarta.ws.rs:jakarta.ws.rs-api」を参照してください。
(2) トランザクションブランチのロールバック条件の設定
@PctoBranchRollbackForアノテーションを使用して、通信によるトランザクションブランチのロールバック条件を設定する方法を説明します。@PctoBranchRollbackForアノテーションのAPI仕様の詳細は「8.2.10 @PctoBranchRollbackForアノテーション」を参照してください。@PctoBranchRollbackForアノテーションを付与したメソッドは、別のクラスから呼び出してください。同一クラスの別メソッドから呼び出した場合は、HMP-PCTOの機能は正しく動作しません。
(a) ライブラリの組み込み
トランザクションブランチのロールバック条件を設定する場合に組み込むライブラリは、トランザクションブランチの作成に使用するライブラリと同じです。ライブラリについては、「(a) ライブラリの組み込み」を参照してください。
(b) コーディング例
@PctoBranchRollbackForアノテーションを使用してトランザクションブランチのロールバック条件を設定するコーディング例を次に示します。@PctoBranchRollbackForアノテーションを使用するメソッドのアクセス制御修飾子は、private以外にしてください。privateとした場合は、HMP-PCTOの機能は正しく動作しません。
@PctoBranchRollbackFor(rollbackOn = {},rollbackOnFamily = {Family.CLIENT_ERROR, Family.SERVER_ERROR})
public void service() {
// 業務処理
}
(c) エラーハンドリング
@PctoBranchRollbackForアノテーションの設定によって、アプリケーションでエラーハンドリングが必要なエラーが発生することはありません。
トランザクションブランチのルートとなるメソッドが例外を送出した場合、HMP-PCTOがHTTPステータスを500に設定します。Spring Bootの機能によってエラーページ(/error)へ遷移する前に、HMP-PCTOでHTTPステータスを設定するため、エラーページをカスタマイズしていた場合でもHTTPステータスは500になります。
次の場合はトランザクションをロールバックしません。そのため、トランザクションブランチでトランザクションをロールバックしたい場合は、トランザクション境界を設定したアプリケーションでトランザクションがロールバックする例外を送出してください。
-
トランザクションブランチのルートとなるメソッドが例外を送出した場合
-
HTTPステータス404の場合
-
HTTPステータス405の場合
(d) Spring Bootの機能を使用する場合の制限事項
HTTPステータスコードの設定する手段として、Spring Bootの@ResponseStatusアノテーションを使用しないでください。サーブレットの機能であるHttpServletResponseインタフェースを使用してHTTPレスポンスを設定してください。