首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

hibernate3使用了一段时间以后,Connection reset 无法连接数据库,该如何解决

2012-03-08 
hibernate3使用了一段时间以后,Connection reset 无法连接数据库APP:ORACLE10GapplicationServerDB:ORACLE

hibernate3使用了一段时间以后,Connection reset 无法连接数据库
APP:ORACLE   10G   application   Server
DB:ORACLE   10G
表示层使用STRUTS,持久化层直接使用hibernate3,没有用spring进行管理
连接使用APP   server的DATASOURCE   进行连接

每次调用数据连接时,都会用HibernateSessionFactory.getCurrentSession()去取
使用后都会用,HibernateSessionFactory.closeSession()去释放连接

<?xml   version= "1.0 "   encoding= "utf-8 "?>
<!DOCTYPE   hibernate-configuration   PUBLIC
                    "-//Hibernate/Hibernate   Configuration   DTD   3.0//EN "
                    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd ">

<hibernate-configuration>
<session-factory>
<property   name= "connection.datasource "> java:comp/env/jdbc/OracleDS </property>
<property   name= "hibernate.dialect "> org.hibernate.dialect.Oracle9Dialect </property>
<property   name= "hibernate.jdbc.fetch_size "> 50 </property>
<property   name= "hibernate.jdbc.batch_size "> 30 </property>
<property   name= "hibernate.query.factory_class "> org.hibernate.hql.classic.ClassicQueryTranslatorFactory </property>
<property   name= "hibernate.show_sql "> true </property>

=========================================================================

使用了一段时间以后,页面会报错,但刷新一下又会恢复正常
再使用一段时间以后,数据连接就会断掉,刷新也无法恢复正常
只有重起APP的服务才能恢复正常

后台LOG信息报错如下
2007-07-16   13:35:15,556   ERROR   [org.hibernate.util.JDBCExceptionReporter]   -   Io   exception:   Connection   reset  
 
org.hibernate.exception.GenericJDBCException:   could   not   execute   query  
 
        at   org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)  
 
        at   org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)  
 
        at   org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)  
 
        at   org.hibernate.loader.Loader.doList(Loader.java:2223)  
 
        at   org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)  
 
        at   org.hibernate.loader.Loader.list(Loader.java:2099)  
 
        at   org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)  
 
        at   org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)  
 
        at   org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)  
 
        at   com.dianda.database.HibernateBaseDao.find(HibernateBaseDao.java:256)  
 
        at   com.dianda.product.Product.getLatestProduct(Product.java:205)  
 
        at   com.dianda.servlet.action.IndexAction.setIndexDisplay(IndexAction.java:154)  
 
        at   com.dianda.servlet.action.IndexAction.execute(IndexAction.java:60)  
 
        at   org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)  


 
        at   org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)  
 
        at   org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)  
 
        at   org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)  
 
        at   javax.servlet.http.HttpServlet.service(HttpServlet.java:743)  
 
        at   javax.servlet.http.HttpServlet.service(HttpServlet.java:856)  
 
        at   com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:719)  
 
        at   com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:376)  
 
        at   com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:270)  
 
        at   com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:42)  
 
        at   com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:204)  
 
        at   oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:283)  
 
        at   com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:209)  
 
        at   com.evermind.server.http.EvermindPageContext.forward(EvermindPageContext.java:322)  
 
        at   _index._jspService(_index.java:49)  
 
        at   com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)  
 
        at   oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:416)  
 
        at   oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:478)  
 
        at   oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:401)  
 
        at   javax.servlet.http.HttpServlet.service(HttpServlet.java:856)  
 
        at   com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:719)  
 
        at   com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:376)  
 
        at   com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:870)  
 
        at   com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:451)  
 
        at   com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:299)  
 
        at   com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:187)  
 
        at   oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)  
 
        at   com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)  


 
        at   java.lang.Thread.run(Thread.java:595)  
 
Caused   by:   java.sql.SQLException:   Io   exception:   Connection   reset  
 
        at   oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:138)  
 
        at   oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:175)  
 
        at   oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:287)  
 
        at   oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:649)  
 
        at   oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:1048)  
 
        at   oracle.jdbc.driver.T4CPreparedStatement.execute_maybe_describe(T4CPreparedStatement.java:535)  
 
        at   oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1126)  
 
        at   oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3001)  
 
        at   oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3043)  
 
        at   oracle_jdbc_driver_T4CPreparedStatement_Proxy.executeQuery()  
 
        at   org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)  
 
        at   org.hibernate.loader.Loader.getResultSet(Loader.java:1787)  
 
        at   org.hibernate.loader.Loader.doQuery(Loader.java:674)  
 
        at   org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)  
 
        at   org.hibernate.loader.Loader.doList(Loader.java:2220)  
 
        ...   38   more  
 
==============================================================

由于是使用myeclipse的hibernate3插件直接生成的包,朋友曾经提及可能是配置文件或者包方面的错误,将原来1,636KB的hibernate3.jar换成了2,190KB的JAR包,问题还是没有解决

这个问题已经捆饶我很久了,请问各位高手有没有遇到过类似的问题,该如何解决?

谢谢!!!

[解决办法]
HibernateSessionFactory.getCurrentSession()是取当前线程的Session,使用完以后不要马上用HibernateSessionFactory.closeSession()关闭,要到本次线程不再使用这个Session时关闭。
如果不用spring管理,可以自己用ThreadLocal来管理你的Session。

热点排行