论坛首页 Java企业应用论坛

ServletFilter+ThreadLocal+DAO,10分钟Hibernate再体验

浏览 31374 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-08-02  
用ServletFilter来处理SessionFactory的初始化和Session的关闭是不是会稍微增加WEB层和持久层的一些耦合度?能不能在DAO那一层就实现seesion-per-request呢?大家有什么别的解决方案吗?

我的一个想法: 写一个DAO的抽象类, 在其构造函数里初始化SessionFactory, 然后在finalize()里关闭session。
问题是finalize()是由JVM决定GarbageCollection时调用的, 这样如果用户很多的话岂不是要消耗很多的数据库连接?

另一个想法: 如果采用有SessionBean的架构“Struts + StatelessSessionBean + DAO + hibernate ”, 可不可以在SLSB的ejbCreate()里初始化SessionFactory, 然后在ejbRemove()里关掉session呢?
这同样会有前面一个想法的问题。可是虽然ejbRemove()同样由Container决定什么时候调用,但SLSB是有池的,用它来服务很多用户应该没问题。

大家是怎么看的?
0 请登录后投票
   发表时间:2004-12-15  
玩了一下,发现每二次后的请求Request上来会出错:net.sf.hibernate.HibernateException: Session is closed
0 请登录后投票
   发表时间:2005-01-18  
请问在这里说的dao,请问你的dao是针对不同的持久还是针对不同的数据库呢?
这个要说清楚,不然会误道别人!
0 请登录后投票
   发表时间:2005-01-18  
楼上的朋友,我并没有其他的意思。我只是说这里毕竟有很多人以前做dao对是针对不同的数据库来考虑。而现在的dao是针对不同的持久来做。比如有hibernateDAO有jdoDAO等。我并没有其他意思!
0 请登录后投票
   发表时间:2005-01-18  
用了Spring的HibernateDaoSupport和 JdoDaoSupport
看上去BaseDaoImpl的意义也不大了
0 请登录后投票
   发表时间:2006-08-06  
xanada 写道
呵呵,这只不过是一个toy,目的是让后来人能看到一个完整的能run起来的例子而已。要说应用到实际里,该修正的地方还多呢。

anyway,谢谢提醒。


总感觉用完 Session不关闭,在Fileter里面关不可靠(万一关闭的时候出现异常怎麽办?),而且Filter中关闭session的操作没有在finally里面,万一没有关闭成功,又会报
 session was  never closed after transaction ....


用 Hibernate 最怕看到这个信息了 
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics