複数のデータベース間で一連のデータ操作を行うことを「分散トランザクション」といい、分散トランザクションにおいてデータの整合性を管理できるオープンソースのJavaライブラリに「Atomikos」がある。今回は、Atomikosを利用したサンプルプログラムを作成してみたので、共有する。
なお、トランザクション・分散トランザクションの概念については、以下のサイトを参照のこと。
https://qiita.com/yShig/items/0168e651d6f3ef105f35
また、今回のサンプルプログラムは長くなるため、前提条件と完成したサンプルプログラムの画面イメージのみ記載し、ソースコードの内容は次回の記事で記載する。
前提条件
下記記事の実装が完了していること。
また、以下のように、USER01ユーザー・USER02ユーザーの各スキーマに、user_dataテーブルとm_sexテーブルに以下のデータが作成されていること。


完成した画面イメージとログの共有(正常更新時)
データベースが正常に更新される場合の画面・コンソールログの内容は、以下の通り。
1) Spring Boot起動時のコンソールログは、以下の通り

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

6) 以下のように入力画面が表示されるので、入力データを指定後「確認」ボタンを押下


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

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


13) 以下のように入力画面が表示されるので、データを更新後「確認」ボタンを押下


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

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


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

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


完成した画面イメージとログの共有(異常更新時)
データベースの更新に失敗した場合の画面・コンソールログの内容は、以下の通り。
1) あらかじめ、以下のようにデータを設定しておく。すると、ID=4のデータを追加しようとすると、USER02のデータベース更新時にエラーになる


2) 一覧画面にはUSER01スキーマのデータが表示される。ここで「データ追加」ボタンを押下

3) 以下のように入力画面が表示されるので、入力データを指定後「確認」ボタンを押下


5) データ更新に失敗するため、以下のエラー画面が表示される

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

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






















