Open Session In View(未完)

Open Session In View

1.      Lazy LoadSession

为了效率和资源,NHibernate增加了Lazy Load(延迟加载)机制,即数据只有真正使用的时候才去数据库读取。而NHibernate读取数据是依赖Session的,数据库连接由Session管理,当Session关闭的时候数据库连接也会自动关闭。

  Web架构下的Session管理

Web架构下(JSPASP.NETSession不是长连接的。当一个web页面装载完毕之后,本次Session(浏览器与Web服务器的会话)就结束了——因为服务器无法预测用户何时关闭了浏览器,所以页面装载完全后,就自动关闭Session,以减少资源——这就是为什么Web架构下DAO层要立即关闭Session的原因。

Web架构下的Session机制与NHibernate的延迟加载机制相冲突。为了让NHibernate能够延迟加载,而使得Session长期存在是不明智的——我们保证了数据访问的效率和资源,却浪费了Session的资源。用户可能打开一个页面之后很久才加载延迟数据,很容易就浪费Web服务器的资源,如果用户有成千上万个,被浪费的Session资源就很可观了。

2.      Open Session In View

我们能不能做到既能够使用Lazy Load,又可以安全关闭Session呢?

答案是肯定的,使用OpenSessionInView模式就能解决这个问题。

2.1.  Open Session In View 机制

OpenSessionInView的机制是,当Web Request(浏览器请求)开始时,自动打开Session,当Web Request结束时,自动关闭Session。也就是说,Session的生命周期与页面请求保持同步。

2.2.  JSP如何实现OpenSessionInView

JSP下可以使用Spring来完成。

2.3.  ASP.NET如何实现OpenSessionInView

 

 

posted @ 2009-11-05 14:57  深圳大漠  阅读(963)  评论(0)    收藏  举报