[Seasar-user:21520] [Doma]別フレームワークのトランザクション管理機能を使用する方法について

Kikuchi Yoko [E-MAIL ADDRESS DELETED]
2012年 12月 7日 (金) 16:37:37 JST


お世話になります。
菊地と申します。

Doma 1.25.0 を利用させて頂いております。

DomaとSpring(3.1.1)を連携しているのですが、
Springのトランザクション管理機能を利用するとうまく動作しないため質問させてください。

Springのトランザクションマネージャを利用して、Serviceクラス(Dao呼び出しクラス)の
メソッド単位でトランザクション制御を行っています。
このとき、トランザクション管理が正しく実行されずに困っています。

動作検証は以下の組み合わせを試しました。

(1)
DataSource:org.apache.commons.dbcp.BasicDataSource
TransactionManager:org.springframework.jdbc.datasource.DataSourceTransactionManager
AppConfig:上記DataSourceをラップして、トランザクション管理下のコネクションを返却する
     DataSourceをDIコンテナから取得し返すよう実装

問題事象:トランザクション管理側でコミットやロールバックを実行しようとすると、
     コネクションが既にcloseされているためエラーとなる。

予想原因:DaoImpl内で利用しているCommandクラスの実行(execute)メソッドで
     必ずコネクションのcloseが行われるよう実装されてるためだと考えています。
     (ModifyCommand#execute() L77 など)

(2)
DataSource:JOTMを利用しTomcat側で定義したDataSourceをルックアップ
TransactionManager:org.springframework.transaction.jta.JtaTransactionManager
AppConfig:上記DataSourceをDIコンテナから取得し返すよう実装

問題事象:トランザクションに無関係なコネクションが使用され、
     Daoメソッド終了時点でコミットされる。


(1)について、Daoメソッドにてコネクションをcloseしない方法がありましたらご教授願います。
(2)について、外部フレームワークでトランザクション管理する際の設定方法、Configの実装方法で
注意点などございましたらご教授願います。

お手数おかけいたしますが、よろしくお願いいたします。

以上です。

**************************************************
 菊地庸子  (Kikuchi Yoko)
 E-mail:kikuchi.yoko @ jp.fujitsu.com
**************************************************




Seasar-user メーリングリストの案内