[Seasar-user:15453] トランザクション制御について

陳捷 [E-MAIL ADDRESS DELETED]
2008年 8月 21日 (木) 17:01:22 JST


お疲れ様です。陳です。

僕はHibernateを使う経験がありますが、S2Daoについてはまだ初心者です。
トランザクションの手動で制御をしたいが、問題があります。ちょっと長いですが、
呼んでもらえると幸いです。

昔、Hibernateで開発する時、データベース操作の流れは:

1.sessionFactoryを取得(Singleton)
2.sessionFactoryでsessionを生成
3.sessionでbeginTransaction
4.データベースとのCRUD
5.commit / rollback
6.sessionをclose

この手順で、S2Daoで実装したいと思います。以前のメーリングリストを読むと、
container及びuserTransactionを使って実装します。流れは:

1.SingletonS2ContainerFactoryでcontainerを取得
2.container.init();
3.container.getComponet(UserTransaction.class)を使って、userTransactionを生成
4.trainsaction.begin()
5.データベースとのCRUD
6.commit / rollback
7.container.destroy()

すると、servlet処理で上記の1〜7を一回しか呼び出されないと、正しく実行されます。でも、例えば、
servletに1〜7を二回呼び出されると、例外が出てきます。原因はcontainerです(多分1回目のdestroy
したら、二回目init()ができなくなる)。

例外を出ないように、ステップ1をS2ContainerFactory.create("app.dicon")で替えました。すると、例外
が出なくなります。でも、毎回containerを取得する時、結構重くて、メモリーの負荷も高い。パフォーマンスは
ちょっと良くない。

ここで質問:
1.S2Containerはhibernateのsessionと同じですか?
2.パフォーマンスの改善には、どうすればいいですか?

以上。よろしくお願いいたします。


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