Spring Boot DB連携

Atomikosによる分散トランザクション処理を実装してみた(完成イメージ編)

複数のデータベース間で一連のデータ操作を行うことを「分散トランザクション」といい、分散トランザクションにおいてデータの整合性を管理できるオープンソースのJavaライブラリに「Atomikos」がある。今回は、Atomikosを利用したサンプルプログラムを作成してみたので、共有する。

なお、トランザクション・分散トランザクションの概念については、以下のサイトを参照のこと。
https://qiita.com/yShig/items/0168e651d6f3ef105f35

また、今回のサンプルプログラムは長くなるため、前提条件と完成したサンプルプログラムの画面イメージのみ記載し、ソースコードの内容は次回の記事で記載する。

前提条件

下記記事の実装が完了していること。

Spring Bootで全角チェック処理を行う独自アノテーションを作成してみたSpring Bootの独自アノテーションで、特定のフィールドに対するチェック処理も実装することができる。今回は、特定のフィールドの全角...

また、以下のように、USER01ユーザー・USER02ユーザーの各スキーマに、user_dataテーブルとm_sexテーブルに以下のデータが作成されていること。
前提条件_1

前提条件_2 前提条件_3 前提条件_4

完成した画面イメージとログの共有(正常更新時)

データベースが正常に更新される場合の画面・コンソールログの内容は、以下の通り。

1) Spring Boot起動時のコンソールログは、以下の通り
実行結果(正常時)_1

2) Spring Bootアプリケーションを起動し、「http:// (ホスト名):(ポート番号)」とアクセスし、「検索」ボタンを押下
実行結果(正常時)_2

3) 以下のように、一覧画面が表示される
実行結果(正常時)_3

4) 一覧画面表示時点でのコンソールログは以下の通り
実行結果(正常時)_4

5) 一覧画面で「データ追加」ボタンを押下
実行結果(正常時)_5

6) 以下のように入力画面が表示されるので、入力データを指定後「確認」ボタンを押下
実行結果(正常時)_6_1

実行結果(正常時)_6_2

7) 確認画面が表示されるので、「送信」ボタンを押下
実行結果(正常時)_7

8) 以下のように、完了画面が表示される
実行結果(正常時)_8

9) 登録完了後のコンソールログは以下の通りで、赤枠部分がデータinsert時のログである
実行結果(正常時)_9

10) 登録完了後のDB内容は以下の通りで、「テスト プリン4」がUSER01,USER02の両方のデータベースに追加されている
実行結果(正常時)_10_1

実行結果(正常時)_10_2

11) 追加されたデータを画面上で確認すると、以下の通り
実行結果(正常時)_11

12) 更新したいデータの「更新」リンクを押下
実行結果(正常時)_12

13) 以下のように入力画面が表示されるので、データを更新後「確認」ボタンを押下
実行結果(正常時)_13_1

実行結果(正常時)_13_2

14) 確認画面が表示されるので、「送信」ボタンを押下
実行結果(正常時)_14

15) 以下のように、完了画面が表示される
実行結果(正常時)_15

16) 更新完了後のコンソールログは以下の通りで、赤枠部分がデータupdate時のログである
実行結果(正常時)_16

17) 更新完了後のDB内容は以下の通りで、「テスト プリン4」のデータがUSER01,USER02の両方のデータベースで更新されている
実行結果(正常時)_17_1

実行結果(正常時)_17_2

18) 更新されたデータを画面上で確認すると、以下の通り
実行結果(正常時)_18

19) 削除したいデータの「削除」リンクを押下
実行結果(正常時)_19

20) 削除確認画面が表示されるので、「送信」ボタンを押下
実行結果(正常時)_20

21) データが削除され、再度一覧画面が表示される
実行結果(正常時)_21

22) 削除完了後のコンソールログは以下の通りで、赤枠部分がデータdelete時のログである
実行結果(正常時)_22

23) 削除完了後のDB内容は以下の通りで、「テスト プリン4」のデータがUSER01,USER02の両方のデータベースから削除されている
実行結果(正常時)_23_1

実行結果(正常時)_23_2

完成した画面イメージとログの共有(異常更新時)

データベースの更新に失敗した場合の画面・コンソールログの内容は、以下の通り。

1) あらかじめ、以下のようにデータを設定しておく。すると、ID=4のデータを追加しようとすると、USER02のデータベース更新時にエラーになる
実行結果(異常時)_1_1

実行結果(異常時)_1_2

2) 一覧画面にはUSER01スキーマのデータが表示される。ここで「データ追加」ボタンを押下
実行結果(異常時)_2

3) 以下のように入力画面が表示されるので、入力データを指定後「確認」ボタンを押下
実行結果(異常時)_3_1

実行結果(異常時)_3_2

4) 確認画面が表示されるので、「送信」ボタンを押下
実行結果(異常時)_4

5) データ更新に失敗するため、以下のエラー画面が表示される
実行結果(異常時)_5

6) エラー画面遷移後のコンソールログは以下の通りで、赤枠部分で、データ追加時に一意制約エラーが発生していることが確認できる
実行結果(異常時)_6

7) エラー画面遷移後のDB内容は以下の通りで、データが更新されていないことが確認できる
実行結果(異常時)_7_1

実行結果(異常時)_7_2

8) 再度データを画面上で確認すると、以下の通りで、データが追加されていないことが確認できる
実行結果(異常時)_8