论坛首页 Java企业应用论坛

提问:如何可以让hibernate的connection出现错误后,重新启动

浏览 9819 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2003-10-29  
我使用oracle901,tomcat4.1,jdk1.41,用的是1169k的class12.jar ,hibernate 用了几个版本,都存在问题
不定期的出现错误,而且必须重新启动tomcat才可以,各位可知这是为什么呢?
我已经晕了,我曾经所有的功能都走过了,可就是时间稍微一长就出现这种错误,而且没有什么太强规律可以找到。
我个人怀疑这句提示比较重要
Io 异常: Connection reset by peer: socket write error

因为系统中还有我们以前的程序在跑,因为我们以前的程序有机制,当数据库连接出现错误的时候,自动重新连接数据库,(但是我们的连接池肯定和hibernate不公用)会不会是这个破坏了hibernate的连接,目前还不得而知,但是要命的是hibernate 如果死了就彻底死了

出现如下的提示,
2003-10-29 12:46:17 net.sf.hibernate.util.JDBCExceptionReporter logExceptions
警告: SQL Error: 17002, SQLState: null
2003-10-29 12:46:17 net.sf.hibernate.util.JDBCExceptionReporter logExceptions
严重: Io 异常: Connection reset by peer: socket write error
2003-10-29 12:46:17 net.sf.hibernate.util.JDBCExceptionReporter logExceptions
警告: SQL Error: 17002, SQLState: null
2003-10-29 12:46:17 net.sf.hibernate.util.JDBCExceptionReporter logExceptions
严重: Io 异常: Connection reset by peer: socket write error
2003-10-29 12:46:17 net.sf.hibernate.JDBCException <init>
严重: Could not execute query
java.sql.SQLException: Io 异常: Connection reset by peer: socket write error
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134);
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179);
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333);
        at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:389);
        at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:413);
        at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedState
ment.java:119);
        at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedState
ment.java:92);
        at oracle.jdbc.driver.OracleConnection.privatePrepareStatement(OracleCon
nection.java:950);
        at oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection
.java:802);
        at net.sf.hibernate.impl.BatcherImpl.getPreparedStatement(BatcherImpl.ja
va:233);
        at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.j
ava:60);
        at net.sf.hibernate.loader.Loader.getStatement(Loader.java:528);
        at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:566);

        at net.sf.hibernate.hql.QueryTranslator.iterate(QueryTranslator.java:845
);
        at net.sf.hibernate.impl.SessionImpl.iterate(SessionImpl.java:1505);
        at net.sf.hibernate.impl.QueryImpl.iterate(QueryImpl.java:31);
        at cn.gov.bez.enterprise.security.entity.ResourceController.getResults(R
esourceController.java:46);
        at cn.com.opendata.util.urlfilter.CheckUrlImpl.dealUrl(CheckUrlImpl.java
:25);
        at cn.com.opendata.util.urlfilter.UrlFilterServlet.doFilter(UrlFilterSer
vlet.java:27);
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:213);
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:193);
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:256);
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643);
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480);
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995);

        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:191);
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643);
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480);
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995);

        at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:
2415);
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:180);
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643);
        at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche
rValve.java:171);
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:641);
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:172);
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:641);
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480);
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995);

        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:174);
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643);
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480);
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995);

        at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:22
3);
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:594);
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ssConnection(Http11Protocol.java:392);
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
:565);
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:619);
        at java.lang.Thread.run(Thread.java:536);



hibernate.property
一些相关的信息我注释了,应该不影响吧:)



## Oracle

hibernate.dialect net.sf.hibernate.dialect.Oracle9Dialect
hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
hibernate.connection.username ***	
hibernate.connection.password ***
hibernate.connection.url  ***

###################################
### Apache DBCP Connection Pool ###
###################################

# connection pool

hibernate.dbcp.maxActive 100
hibernate.dbcp.whenExhaustedAction 1
hibernate.dbcp.maxWait 120000
hibernate.dbcp.maxIdle 10

## prepared statement cache

hibernate.dbcp.ps.maxActive 100
hibernate.dbcp.ps.whenExhaustedAction 1
hibernate.dbcp.ps.maxWait 120000
hibernate.dbcp.ps.maxIdle 100

# optional query to validate pooled connections:

hibernate.dbcp.validationQuery select 1 from dual

   发表时间:2003-10-29  
你把问题描述清楚一点,看一下《论坛提问的智慧》第四条。

另外给一些建议:

1、用ojdbc14.jar

2、采用Hibernate自带的DBCP,不使用Tomcat的DBCP
0 请登录后投票
   发表时间:2003-10-29  
唉,还是不行:(
你看看还需要我描述什么?
所有功能运行都是可以的,就是时间一长(连半天都不到)就死掉了
我用了ojdbc14.jar
hibernate.property  也改了 ,难道要我改hibernate 的实现:(
0 请登录后投票
   发表时间:2003-10-29  
你的有时是指运行当中忽然出现吗?查看你的pool连接池的日志,是不是有网临时中断的情况。建议使用tomcat的dbcp连接池,采用jndi方式获得数据库连接。如果使用配置文件中的dbcp,最好增加一些属性。
自动恢复的问题,我没有发现dbcp能自动回复:(,如果你自己的连接池可以的化,应该可以扩展,使hibernate采用你的连接池:lol:
0 请登录后投票
   发表时间:2003-10-29  
这个错误我也遇到过一次,情况是这样的,在自己的机器上使用Oracle8.1.7和WLS7.0,使用WLS的数据库连接池.

由于是在自己的电脑上安装,所以为了节省资源,把Oracle和SGA参数和WLS的JVM都调的很小。然后用Hibernate进行了负载比较重的并发查询,导致WLS的数据库连接池崩溃。错误代码和你上面的一样。

之后就没有做更详细的测试,因为我这个情况的出现主要还是WLS本身和Oracle本身我把参数调太小了,而Hibernate我又用ab并发了很高的数量去请求访问,出现连接池崩溃,也不算意外。

你的错误我判断不出原因,因为你没有提供足够的信息,例如你的Oracle的SGA参数配置,数据库的负载情况和IO情况,SGA使用状况,Tomcat的JVM
状况,DBCP连接池的log等等。。。
0 请登录后投票
   发表时间:2003-10-29  
换成其他的connection pool试试看。

如果必须要用dbcp
那么设置这个试试看:
hibernate.dbcp.testOnBorrow true
hibernate.dbcp.testOnReturn true

good luck
0 请登录后投票
   发表时间:2003-10-31  
多些各位,问题找到了,我在一个权限认证的地方没有close session:(,一直没有找到,又是最经常用到的,结果最终把hibernate给拖死了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics