Springがトランザクション管理の問題点を解決してくれるっぽい
Java EEな図
3つのDAOの処理が成功して、ひとつのトランザクションが成功する場合、Service層でトランザクションの管理をする必要がある、という話。
Spring Frameworkを使っていない場合
- 複数DAOがあるとき、トランザクション管理に困ってるんすよねー
- この図見てくださいよ、真面目にActionクラス、Serviceクラス、DAOクラス分けても、どうしてもトランザクション管理はクラス間を横断してしまうんすよ
- 複数のテーブルを操作する必要があった場合、複数のDAOを呼ぶように作っています。1リクエスト1トランザクションとして、その様な場合、トランザクションはひとつのDAOだけに収まらず、Service Logicレイヤーまで影響してしまうんすよ…
- Service Logicでトランザクションを管理する必要が出てくる、と
- つまりDAOとServiceの切り分けに問題がある、と言うか悩んでいるんです…orz
- トランザクションの話をService Logicまで持ってくると、依存性も高まるし、レイヤー分けてる意味が薄れてくるように思います。クラスは分けているのに債務は分けられていない、みたいな。自分のイメージあってますか?
- 通常、トランザクションをService Logicで管理したいのであれば、HibernateのSessionをService Logicで管理しないといけなくなる、というのが自分の考えです。
この問題点を解決するのが
- ここでSpring Frameworkを使うと、ServiceとDAOをラッパーしてトランザクション管理を代行してくれるんすよ
- SpringがHibernateのSessionもろもろを管理してくれるので、トランザクション開始・終了をDaoでもなくServiceでもなく、Springがやってくれる
というのを考えてて、気づいたら色々書いていた。
自分の確認も含めて!!
これで合っているかな?