【SpringMVC】複数のサービス間でのトランザクション処理

SpringMVCはコントローラーに対してサービスとエンティティが1対1になって作ることが多く、この形式のままだと1つの処理で複数のテーブルに対してトランザクション処理する場合、やり方に迷う。

複数のサービス(またはエンティティ)に対してトランザクションする場合は、メインのサービスから呼ばれるサービスの「シェアードサービス」を構えて対応する、、、っぽい。

シェアードサービス-エンティティ-テーブルは1対1の構成にしておき、メインのサービスとシェアードサービスは1対多の構成で作るとうまくいった!

 

簡単な図解をしてみた。

 

■登場人物

ビューテンプレート
 contractRegist.jsp(契約登録画面)
 contractCompletejsp (登録完了画面)

コントローラー
 Contract Controller(登録画面から完了画面への橋渡し役)

バリデーター
 Contract Validator (契約情報のバリエーションチェック用)

サービス
 Contract Service(コントローラーから呼ばれるメイン処理、ビジネスロジックなど)

シェアードサービス
 Contract SharedService(契約テーブル用サービス)
 User SharedService(ユーザ情報用サービス)
 ※テーブル(またはエンティティ)と1対1になるサービス。メインサービスから呼ばれる

リポジトリ
 Contract Repository (契約情報のモデル的立ち位置)
 User Repository (ユーザ情報のモデル的立ち位置)

エンティティ
 ContractRegistForm(登録画面の入力フォームの値を保持)
 ContractResultDto(DAO。処理結果など完了画面に必要なデータを保持)
 Contract (契約情報のDAO、getter/setter)
 User Repository (ユーザ情報のDAO、getter/setter)

テーブル
 T_CONTRACT(契約情報テーブル)
 M_USER(ユーザ情報テーブル)

 

■処理の流れ

①、契約登録画面(contractRegist.jsp)からリクエストされたPOSTデータを受け取り、エンティティ(ContractRegistForm)にセットして、コントローラー(Contract Controller)へ渡す

②、コントローラー(Contract Controller)内部で①で受け取ったPOSTデータをバリデーター(Contract Validator )にかけて、バリデーションチェックを行う

③、サービス(Contract ServiceImpl)に対して登録処理を呼び出す

④、サービス(Contract ServiceImpl)内でトランザクション処理を実行。シェアードサービス(Contract SharedServiceImpl、User SharedServiceImpl)を順番に呼び出して、契約情報とユーザ情報をそれぞれ登録する

⑤、登録処理の処理結果をエンティティ(ContractResultDto)にセットし、登録完了画面(contractCompletejsp)渡して画面に表示する

 

時間があるときに、サンプルソースも書いて記事にのっけます。



投稿日:2020-03-19    更新日:2020-03-19

[スポンサーリンク]

サイト内検索
プロフィール

プロフィール

[Name : じゃぶじゃぶ(@jbjb_2019)]
都内で社内SEをしているおじさん。
仕事で得られる知識だけでは限界を感じ、 WEBの勉強がてらITブログを開始。
サーバからWEBサイトまでフルスクラッチで開発しました。
現在は勉強のモチベーションを保つために活用中。
興味があることを雑記的に書いていきます。

[スポンサーリンク]

[スポンサードリンク]

最近の記事