2010年11月18日 星期四

OpenSessionInViewFilter教學

如果沒有使用OpenSessionInViewFilter,Session會在transaction結束後關閉。
若有使用則會把一個Hibernate Session和一次完整的request過程對應的thread相綁定,使session在request的整個期間都可以使用。當View層邏輯完成後(如:在jsp用EL取關聯對象),才會通過Filter的doFilter方法自動關閉session。但是之後每一次request中的所有hibernate操作,都被當成同一個session並且被改成readOnly,所以將無法進行save,merge和delete的動作。這時就需要用transaction manager



缺點:會將事務橫跨request 到 response 的整個HTTP 生命週期,長時間占用資料庫連接,可能在用時很方便,但是這一種非常消耗系統資源的解決方案。

在web.xml中加入
注意事項:一個OpenSessionInViewFilter只能管理一個SessionFactory, 若有多個DateSource就必須有多個OpenSessionInViewFilter

 OpenSessionInViewFilter
 org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
 
  sessionFactoryBeanNamesessionFactory


 OpenSessionInViewFilter
 *.do