[Seasar-user:5213] Re: [S2Dao] トランザクションについて。

lancer005jp [E-MAIL ADDRESS DELETED]
2006年 11月 20日 (月) 16:38:10 JST


竹之内です。

近藤様、ありがとうございます。
解決できました。
1.の方法でも実現できましたが、以下の方法でも実現できました。

サービス層のコンストラクタを以下のように記述し、
サービス層のBeanと使用するDaoを同じDiconに設定することにより
実現できました。

public HogeBean(HogeDao _dao ){
	this.hogeDao = _dao;
}

ありがとうございました。

"mail.list.dev" <[E-MAIL ADDRESS DELETED]> wrote:

> 近藤です。
> 私も同様の現象ではまりました。
> 原因は、updateAdd を実装しているクラスと、daoを別々のContainer
> (別インスタンス)にしていた為、トランザクションが働かない(無効?)
> という状態になりました。
> 
> 対応策としては、
> 
> 1.updateAddメソッドの実装クラスをコンテナから取得する時に、同時に
> daoのインスタンスも取得し、実装クラスにsetterで与えるようにする。
> つまり、updateAddメソッドの実装クラス内でdaoインスタンスを生成
>  しない。
> 2.containerから取得する際、SingletonS2ContainerFactoryを使用する。
> 
> という2つの方法がありますが、私は1.を採用しました。
> 
> 竹之内のソースを確認したわけではないので、はずしているかもしれません。
> 差し支えなければソースを見せてもらえば、より具体的な回答ができるかと
> 思います。
> ※必要なのは、updateAddの呼び出しているクラス、updateAddメソッドの
>  実装クラスです。
> 
> 
> 
> kazuya Takenouchi wrote
> > 竹之内です。
> > お世話になります。
> >
> > サービス層のupdateAddというメソッドにトランザクション(j2ee.requiredTx)
> > をかけ、そのメソッド内で、daoをよび、更新や追加をしています。
> > daoにはトランザクションはかけていません。
> > その際、途中でエラーが出ても、ロールバックがされません。
> >
> > ログにはトランザクションをロールバックしました。
> > と出ているのですが、テーブルを見るとロールバックされていませんでした。
> >
> > どのような原因が考えられますでしょうか?
> >
> > 環境:
> > s2-dao-1.0.39
> > s2-2.3.10
> > DB2 V8.1
> >
> > ご教授頂ければ幸いです。
> > よろしくお願いいたします。
> >




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