關於Jdon的CloseSessionInViewFilter

cats_tiger發表於2008-03-25
對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老大的這個思路還是很讓人佩服呀,呵呵。

相關文章