关于Jdon的CloseSessionInViewFilter
对Spring的OpenSessionInViewFilter导致性能问题早有耳闻,但是这个东东实在方便,所以一直沿用至今,幸好没有遇到性能方面的问题。
但是,老猫我一直对它谨慎提防。
先解释一下Spring的问题,在OpenSessionInViewFilter中,首先try块中打开了Session,然后doFilter执行请求,最后在finally中关闭Session。大体就是这样,这段代码影响阅读的障碍物挺多,什么isSingleSession,Deferred之类的,但基本流程就是这样的。Spring不管3721就打开Session,如果这个时候遇到一点问题,比如网速慢,那么就会导致长时间打开数据库连接,当然也就影响性能了。
CloseSessionInViewFilter稍有不同,它将打开Session的任务交给DAO,好像就是那个HibernateTemplate中调用SessionProvider的时候,然后,Filter中只是负责关闭Session。
使用这两个Filter有一个前提,尤其是OpenSessionInView,一定把UrlMapping设置为*.do或*.jsf之类的,要不,呵呵,一个gif请求都要打开Hibernate...
Banq老大,在这个前提下,我有一个问题。当一个请求到达后,大致的过程是这样的:Filter(Spring打开Session)->Struts->DAO(JDon打开Session)->渲染页面->Filter(关闭Session)。只要Application收到请求,从Filter到Struts/JSF再到Service/DAO应该是非常快的,此时是不是CloseSessionInViewFilter的优势就不明显了?
不管怎样,Banq老大的这个思路还是很让人佩服呀,呵呵。