HibernateベースのDAOを作った場合に、トランザクション処理をどのように記述するかが問題になることがあります。
たとえば下記のような二つのテーブル
に対してそれぞれMemberDAOとWorkGroupDAOを作ると思います。さらにそのDAOを使用するビジネスメソッド、たとえば
なんてのが定義されると思います。
このとき、ある処理の場合はメソッド単位でトランザクション管理し、ほかの処理の場合は複数のメソッドにまたがってトランザクション管理したい場合があります。上の例だと、
とした場合、
となります。二つめの例を考えるとaddMember内でトランザクション開始と終了の処理をしちゃうとまずいわけですね。Springではこの辺を、トランザクション処理を宣言的に記述することで解決しています。
ところで今回考えるクラス群の全体像は以下の通りです。
またトランザクション処理を考慮しない状態のSpringの設定は以下の通りになっています。
BLのビジネスメソッドに対してトランザクション処理を宣言的に追加することができます。それにはBLの名前をuserManagerBLからuserManagerBLTargetに変更し、userManagerBLを新規に作成します。プログラムが呼ばれる流れとしては
BLを使うプログラム -> userManagerBL
だったのを
BLを使うプログラム -> userManagerBL -> userManagerBLTarget
となり、外部から見たら見た目は同じだけど、実際のBLの間に別のクラスが挟まれる用になります。具体的にはSpringの設定を以下のように変更します。
この記事は
現在のアクセス:8134