コンテンツへスキップ

【JavaEE】トランザクション処理で異なるDB

こんばんは。

更新を怠っているとてぃです。

本日は業務でトランザクション関連の修正を行ったのでそれをアウトプットしたいと思います。

そもそも、トランザクション処理とは何かと言う人もいると思うので軽く説明したいと思います。

トランザクションとは、基本情報などの知識で例えると排他処理とよく言われています。

実際に一言で言って伝わる人もいれば自分みたいに全然分からない場合があるとおもいます。

そんな人のために例を上げるとしたら、

物語の始まり

おじいさんが食料確保のために川に向かいました。川には元気な魚が泳いでいます。魚を捕まえて食料にしたいと思っているのです。まず捉えた魚を新鮮に確保するには川で檻みたいなものを作成しました。

では本題に入ります。早速魚を捕まえました。

捕まえた魚を檻に入れます。

→コミットする(保存)

捕まえた魚を流す

→ロールバックする(保存せずに終了)

上記がトランザクションの流れになります。

一通りトランザクション処理の説明を終えたので【JavaEEで分散型トランザクション処理をさせたい場合】の処理を記載したいと思います。

分散型トランザクションと永続性コンテキスト

今回は永続性コンテキストを用いた実装で説明したいと思います。永続性コンテキストはこんな感じになります。該当するクラスでentityManagerの定義を作成していることを前提にします

こちらのメソッドにトランザクションを記述し、継続処理後にエラー判定したい場合を例に書きたいと思います。

エラー判定前にコミットしたい場合別トランザクションを貼ることになります。なぜかと言いますと想像すればわかると思うので解答は書きません。

別トランザクションを貼るために1つクラスを作成し、今度はメソッドの上ではなく、Class定義します。

こんな感じになります。

@Transactional(Transactional.TxType.REQUIRED)

これで複数のメソッドについてはトランザクション管理が別になるのでコミットできるようになります。

最後まで読んで頂きありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください