kxbin
          成功留給有準備的人
          posts - 10,  comments - 35,  trackbacks - 0

          org.hibernate.exception.GenericJDBCException: Cannot release connection

          問題:
              系統采用Spring MVC 2.5 + Spring 2.5 + Hibernate 3.2架構,其中數據源連接池采用的是Apache commons DBCP。問題是這樣的,系統運行一段時間后(大致每隔8小時),訪問系統會出現如下錯誤,再次訪問恢復正常。
          1. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.GenericJDBCException: Cannot release connection  
          2.  at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:583)  
          3.  at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)  
          4.  at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)  
          5.  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)  
          6.  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)  
          7.  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)  
          8.   
          9. Caused by: org.hibernate.exception.GenericJDBCException: Cannot release connection  
          10.  at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)  
          11.  at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)  
          12.  at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)  
          13.  at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)  
          14.  at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:449)  
          15.  at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:379)  
          16.  at org.hibernate.jdbc.ConnectionManager.manualDisconnect(ConnectionManager.java:333)  
          17.  at org.hibernate.impl.SessionImpl.disconnect(SessionImpl.java:375)  
          18.  at org.springframework.orm.hibernate3.HibernateTransactionManager.doCleanupAfterCompletion(HibernateTransactionManager.java:744)  
          19.  at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:989)  
          20.  at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:855)  
          21.  at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:800)  
          22.  at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:339)  
          23.  at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)  
          24.  at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)  
          25.  at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)  
          26.  at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)  
          27.  at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)  
          28.  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
          29.  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
          30.  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
          31.  at java.lang.reflect.Method.invoke(Method.java:585)  
          32.  at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:421)  
          33.  at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:136)  
          34.  at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:326)  
          35.  at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:313)  
          36.  at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)  
          37.  at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)  
          38.  at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)  
          39.   36 more  
          40. Caused by: java.sql.SQLException: Already closed.  
          41.  at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:77)  
          42.  at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:180)  
          43.  at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.closeConnection(LocalDataSourceConnectionProvider.java:96)  
          44.  at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:445)  
          45.   62 more  
          解決:

              造成Cannot release connection的原因有很多,要具體問題具體分析。從異常分析,造成這個異常 org.hibernate.exception.GenericJDBCException: Cannot release connection 歸根結底是Caused by: java.sql.SQLException: Already closed. 即連接已關閉。所以解決的辦法就要從DBCP的參數配置入手,見下面的參數配置properties文件。

           

          1. #### :: Apache DBCP :: ####  
          2. jdbc.driverClassName=oracle.jdbc.driver.OracleDriver  
          3. jdbcjdbc.url=jdbc:oracle:thin:@10.165.153.9:1521:PRDC  
          4. jdbc.username=guser  
          5. jdbc.password=guser  
          6. #初始化連接  
          7. jdbc.initialSize=0  
          8. #連接池的最大活動個數  
          9. jdbc.maxActive=20  
          10. #沒有人用連接的時候,最大閑置的連接個數。  
          11. jdbc.maxIdle=100  
          12. #沒有人用連接的時候,最小閑置的連接個數。  
          13. jdbc.minIdle=0  
          14. #超時等待時間以毫秒為單位  
          15. jdbc.maxWait=10000  
          16. #是否自動回收超時連接  
          17. jdbc.removeAbandoned=true  
          18. #設置被遺棄的連接的超時的時間(以秒數為單位),即當一個連接被遺棄的時間超過設置的時間,則它會自動轉換成可利用的連接。默認的超時時間是300秒。  
          19. jdbc.removeAbandonedTimeout=60  
          20. #是否在自動回收超時連接的時候打印連接的超時錯誤  
          21. jdbc.logAbandoned = true  
          22. #給出一條簡單的sql語句進行驗證  
          23. jdbc.validationQuery=select 1 from dual  
          24. #在取出連接時進行有效驗證  
          25. jdbc.testOnBorrow=true  
          其中標紅的兩個參數的作用是對池化連接進行驗證,This will ensure that DBCP only hands out good connections to Hibernate. 故加上這兩個參數后,這個異常就不會再出現了。在Spring中指定數據源如下:

           

           

          1. <!--  使用Apache DBCP連接池 -->  
          2.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
          3.         <property name="driverClassName" value="${jdbc.driverClassName}" />  
          4.         <property name="url" value="${jdbc.url}" />  
          5.         <property name="username" value="${jdbc.username}" />  
          6.         <property name="password" value="${jdbc.password}" />  
          7.         <property name="maxActive" value="${jdbc.maxActive}" />  
          8.         <property name="maxIdle" value="${jdbc.maxIdle}" />  
          9.         <property name="maxWait" value="${jdbc.maxWait}" />  
          10.         <property name="removeAbandoned" value="${jdbc.removeAbandoned}" />  
          11.         <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}" />  
          12.         <property name="logAbandoned" value="${jdbc.logAbandoned}" />  
          13.         <property name="validationQuery" value="${jdbc.validationQuery}" />  
          14.         <property name="testOnBorrow" value="${jdbc.testOnBorrow}" />  
          15.     </bean>  

           

          posted on 2011-12-09 09:01 kxbin 閱讀(3892) 評論(0)  編輯  收藏 所屬分類: J2EE
          你恨一個人是因為你愛他;你喜歡一個人,是因為他身上有你沒有的;你討厭一個人是因為他身上有你有的東西;你經常在別人面前批評某人,其實潛意識中是想接近他。

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(5)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          J2EE

          java技術網站

          Linux

          平時常去的網站

          數據庫

          電影網站

          網站設計

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 新泰市| 巢湖市| 新乡县| 滁州市| 宣化县| 龙里县| 汶上县| 革吉县| 葵青区| 新邵县| 峨眉山市| 庐江县| 南城县| 吉隆县| 张家川| 塔城市| 鄯善县| 吕梁市| 乐亭县| 寻甸| 枞阳县| 嵊泗县| 桓仁| 晋江市| 崇礼县| 屯留县| 乌鲁木齐市| 磴口县| 富川| 息烽县| 阜城县| 两当县| 枞阳县| 武鸣县| 陵川县| 志丹县| 视频| 林州市| 百色市| 青海省| 疏附县|