かつのりの日記2

わんくまでは珍しいJavaを中心とした日記です

目次

Blog 利用状況

書庫

日記カテゴリ

いろいろリンク

宣言的トランザクションに対応してみた

開発中のDIコンテナですが、Seasar2のコードやSpringのコードを参考に宣言的トランザクションを実装してみました。

宣言的トランザクションとは、メソッドの呼び出し結果に対してトランザクションをロールバックもしくはコミットするルールを宣言するトランザクションです。例えばXXXメソッドを呼び出してRuntimeExceptionがスローされたらロールバック、Exceptionがスローされたらコミット、何事もなかったらコミット、というように宣言して使います。

トランザクションの対象となるのはメソッド単位です。トランザクションの対象となるメソッドからトランザクショナルなメソッドが呼び出された場合の処理方法は数種類あります。

トランザクションがある場合 トランザクションがない場合
Required 何もしない TXを開始する
RequiresNew 既存のTXを中断して新しいTXを開始 新しいTXを開始
Mandatory 何もしない エラー
Never エラー 何もしない
NotSupport 既存のTXを中断 何もしない

と、大雑把にこんな感じです。これらのトランザクションをメソッドに割り当てるのはAOPによって割り当てるます。AOPで割り当てる事によって、業務ロジックの中にトランザクション処理を書く必要は一切ありません。アトミックな業務単位をメソッドに割り当てるだけです。

ただしRequiredのようなトランザクションの場合、すでに存在するトランザクションに参加できますので、メソッドを細切れにしても、最初の呼び出しから完了までがアトミックな業務単位となります。

#といっても、Javaでは最近ポピュラーになってきましたが、数年前からVB6とかでもCOM+でできていたんですよね。.NETな人達からすると、何を今更って感じなんだろうな・・・

投稿日時 : 2007年10月2日 1:15

Feedback

# re: 宣言的トランザクションに対応してみた 2007/10/02 10:01 凪瀬

> 数年前からVB6とかでもCOM+でできていたんですよね。
この部分が気になるなぁ。
どこか参考にした情報源とかあります?

.NET系(というかMS系?)と文化の違いに驚くことが多いです…。
昔触っていたころには何も分かっていなかったんだな、自分 orz

# re: 宣言的トランザクションに対応してみた 2007/10/03 23:53 かつのり

使っていたときは、どうしてon errorに入ったときに、
勝手にロールバックするんだろってくらい気持ちでしたよ。
よく知らずに使っていますね。

VB6でActiveXのCOMを作って、
Requiredのようなタイプにしていたような。
後はコンポーネントサービス任せでしたね。
既存のコードを参考にしていました。

最近JTA触るようになって、やっと意味が分かった感じorz

タイトル
名前
Url
コメント