@hunter129

          天天學習,好好向上!

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            21 隨筆 :: 5 文章 :: 37 評論 :: 0 Trackbacks

          由于Spring控制的Hibernate的生命周期只針對數據層和服務層,而未管理到表現層,所以在表現層使用延時加載會出現the owning Session was closed或者no session or session was closed的異常信息。針對這一點,可以通過hibernate filter的方式來解決。

          在WEB.xml文件中配置filter.
          <!-- hibernate session filter -->
          <filter>
              
          <filter-name>OpenSessionInViewFilter</filter-name>
              
          <filter-class>
                  org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
              
          </filter-class>
          </filter>

          <filter-mapping>
              
          <filter-name>OpenSessionInViewFilter</filter-name>
              
          <url-pattern>*.do</url-pattern>
          </filter-mapping>
          我們的系統架構是struts+spring+hibernate,struts跟spring的整合是在struts-config.xml里加了個plugin
          <plug-in
              
          className="org.springframework.WEB.struts.ContextLoaderPlugIn">
              
          <set-property property="contextConfigLocation"
                  value
          ="/WEB-INF/classes/applicationContext.xml" />
              
          </plug-in>

          在WEB.xml中配置hibernateFilter 后,還需要在struts-config.xml里把plugin去掉,在WEB.xml里加上如下代碼:
          <!--Spring ApplicationContext-->
          <context-param>
              
          <param-name>contextConfigLocation</param-name>
              
          <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
          </context-param>

          <listener>
              
          <listener-class>
                  org.springframework.web.context.ContextLoaderListener
              
          </listener-class>
          </listener>

          這樣配置之后如果沒有配置事務,是有問題的。不能進行update和insert操作了。
          怎么辦呢?只需要在filter中加入一個參數
          <init-param>
              <param-name>singleSession</param-name>
              <param-value>true</param-value>
          </init-param>
          就可以了,當然這樣 每次訪問dao都會新開個session,對性能的影響還是比較大的。最好的辦法當然是配置事務了。
          posted on 2008-04-18 10:12 hunter129 閱讀(1515) 評論(0)  編輯  收藏 所屬分類: 基礎
          主站蜘蛛池模板: 鄂尔多斯市| 探索| 营口市| 巴南区| 上蔡县| 平顶山市| 哈尔滨市| 孟连| 伊金霍洛旗| 金堂县| 武功县| 固始县| 常山县| 花莲市| 新竹县| 宿州市| 五大连池市| 施秉县| 鸡西市| 祥云县| 诸暨市| 苍山县| 白朗县| 长治市| 勃利县| 台前县| 仪陇县| 陇川县| 华宁县| 都兰县| 五寨县| 奉贤区| 张家港市| 祁阳县| 乐平市| 乌海市| 错那县| 清镇市| 即墨市| 长春市| 西吉县|