|
该帖已经被评为精华帖
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-04-28
aniken 写道 hantsy 写道 aniken 写道 request(请求)->open session并开始transaction->controller->View(Jsp)->结束transaction并 close session. 应该是这样的。 Hibernate本身也提供了HibernteFilter,功能类似Spring的OpenSesionInViewFilter,只不过后者是绑定了Spring。 Hibernate wiki 提到的一些高级的Session管理模式,如long conversation (跨越几个请求),在Spring中没有实现。 而在seam发挥得淋漓尽致。 如果流程如上所述,就是一个request只对应一个transaction? 默认情况下,OpenSessionInView 实现的应该是session per request 模式(这在hibernate wiki上有描述)。如果使用jdbc transaction,一个session之内可以先后进行几次事务,在spring中取决于spring实现和事务的使用,Spring内部如何管理Hibernate事务就没有研究过了。 |
|
| 返回顶楼 | |
|
时间:2008-04-28
hantsy 写道 aniken 写道 hantsy 写道 aniken 写道 request(请求)->open session并开始transaction->controller->View(Jsp)->结束transaction并 close session. 应该是这样的。 Hibernate本身也提供了HibernteFilter,功能类似Spring的OpenSesionInViewFilter,只不过后者是绑定了Spring。 Hibernate wiki 提到的一些高级的Session管理模式,如long conversation (跨越几个请求),在Spring中没有实现。 而在seam发挥得淋漓尽致。 如果流程如上所述,就是一个request只对应一个transaction? 默认情况下,OpenSessionInView 实现的应该是session per request 模式(这在hibernate wiki上有描述)。如果使用jdbc transaction,一个session之内可以先后进行几次事务,在spring中取决于spring实现和事务的使用,Spring内部如何管理Hibernate事务就没有研究过了。 我说嘛,上述的流程怎么就对了呢,怎么看也应该是session per request,N transactions per session。 |
|
| 返回顶楼 | |
|
时间:2008-04-30
楼主谈到了一个很好的数据库session维护的方案,从技术上先赞一个!
但个人以为,这样的设计在提倡MVC分离过程中是不好的。我们可以在模型层获取足够的数据,而后关闭session的对话,将完整的model传输到view层,如果view层仍需要数据库支持,这里再次打开一个会话。这样做看似麻烦,但是保证了每个设计层面事务的封闭性。而且我们应该尽量争取在一次的session会话中获得足够的数据,这个是可以尝试的。 |
|
| 返回顶楼 | |
|
时间:2008-05-02
引用 servlet的session机制基于cookies,关闭浏览器的cookies则session失效即不能用网站的登录功能。 如果浏览器关闭了cookies功能,servlet可以使用jsessionid去得到当前的session,但这需要在servlet中多写点代码。如何在mvc框架中使用尚不知道。
没有看过seam如何解决open session in view的问题。 |
|
| 返回顶楼 | |
|
时间:2008-05-02
引用 我们可以大约了解的OpenSessionInViewFilter调用流程: request(请求)->open session并开始transaction->controller->View(Jsp)->结束transaction并 close session. OpenSessionInViewInterceptor的调用流程如何?类似?
|
|
| 返回顶楼 | |





