您的位置:首页 > 产品设计 > UI/UE

org.hibernate.exception.JDBCConnectionException: could not execute query

2008-07-02 10:25 495 查看
数据库为mysql,客户端使用hibernate进行连接,结果长时间没有数据访问的话,重新访问数据库就会报错:

javax.servlet.ServletException: org.hibernate.exception.JDBCConnectionException: could not execute query
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
com.monet.common.servlet.ExtendActionServlet.process(ExtendActionServlet.java:85)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause

org.hibernate.exception.JDBCConnectionException: could not execute query
org.hibernate.exception.SQLStateConverter.convert(Unknown Source)
org.hibernate.exception.JDBCExceptionHelper.convert(Unknown Source)
org.hibernate.loader.Loader.doList(Unknown Source)
org.hibernate.loader.Loader.listIgnoreQueryCache(Unknown Source)
org.hibernate.loader.Loader.list(Unknown Source)
org.hibernate.loader.hql.QueryLoader.list(Unknown Source)
org.hibernate.hql.ast.QueryTranslatorImpl.list(Unknown Source)
org.hibernate.engine.query.HQLQueryPlan.performList(Unknown Source)
org.hibernate.impl.SessionImpl.list(Unknown Source)
org.hibernate.impl.QueryImpl.list(Unknown Source)
com.monet.ecai.bean.MemberDAO.getUserName(MemberDAO.java:42)
com.monet.lottery.user.UserAction.doUserReg(UserAction.java:154)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.monet.common.servlet.ActionExtend.callActionMethod(ActionExtend.java:214)
com.monet.common.servlet.ActionExtend.execute(ActionExtend.java:144)
org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:53)
org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:64)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
com.monet.common.servlet.ExtendActionServlet.process(ExtendActionServlet.java:85)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was55512 seconds ago.The last packet sent successfully to the server was 55512 seconds ago, which  is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
java.lang.reflect.Constructor.newInstance(Unknown Source)
com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3246)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1917)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885)
org.hibernate.jdbc.AbstractBatcher.getResultSet(Unknown Source)
org.hibernate.loader.Loader.getResultSet(Unknown Source)
org.hibernate.loader.Loader.doQuery(Unknown Source)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Unknown Source)
org.hibernate.loader.Loader.doList(Unknown Source)
org.hibernate.loader.Loader.listIgnoreQueryCache(Unknown Source)
org.hibernate.loader.Loader.list(Unknown Source)
org.hibernate.loader.hql.QueryLoader.list(Unknown Source)
org.hibernate.hql.ast.QueryTranslatorImpl.list(Unknown Source)
org.hibernate.engine.query.HQLQueryPlan.performList(Unknown Source)
org.hibernate.impl.SessionImpl.list(Unknown Source)
org.hibernate.impl.QueryImpl.list(Unknown Source)
com.monet.ecai.bean.MemberDAO.getUserName(MemberDAO.java:42)
com.monet.lottery.user.UserAction.doUserReg(UserAction.java:154)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.monet.common.servlet.ActionExtend.callActionMethod(ActionExtend.java:214)
com.monet.common.servlet.ActionExtend.execute(ActionExtend.java:144)
org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:53)
org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:64)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
com.monet.common.servlet.ExtendActionServlet.process(ExtendActionServlet.java:85)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause

java.net.SocketException: Software caused connection abort: socket write error
java.net.SocketOutputStream.socketWrite0(Native Method)
java.net.SocketOutputStream.socketWrite(Unknown Source)
java.net.SocketOutputStream.write(Unknown Source)
java.io.BufferedOutputStream.flushBuffer(Unknown Source)
java.io.BufferedOutputStream.flush(Unknown Source)
com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3227)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1917)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885)
org.hibernate.jdbc.AbstractBatcher.getResultSet(Unknown Source)
org.hibernate.loader.Loader.getResultSet(Unknown Source)
org.hibernate.loader.Loader.doQuery(Unknown Source)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Unknown Source)
org.hibernate.loader.Loader.doList(Unknown Source)
org.hibernate.loader.Loader.listIgnoreQueryCache(Unknown Source)
org.hibernate.loader.Loader.list(Unknown Source)
org.hibernate.loader.hql.QueryLoader.list(Unknown Source)
org.hibernate.hql.ast.QueryTranslatorImpl.list(Unknown Source)
org.hibernate.engine.query.HQLQueryPlan.performList(Unknown Source)
org.hibernate.impl.SessionImpl.list(Unknown Source)
org.hibernate.impl.QueryImpl.list(Unknown Source)
com.monet.ecai.bean.MemberDAO.getUserName(MemberDAO.java:42)
com.monet.lottery.user.UserAction.doUserReg(UserAction.java:154)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.monet.common.servlet.ActionExtend.callActionMethod(ActionExtend.java:214)
com.monet.common.servlet.ActionExtend.execute(ActionExtend.java:144)
org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:53)
org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:64)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
com.monet.common.servlet.ExtendActionServlet.process(ExtendActionServlet.java:85)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

查阅相关文档,造成报错的原因在于:Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。

hibernate 配置如下
<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<property name="hibernate.c3p0.min_size">10</property>
<property name="hibernate.c3p0.max_size">100</property>
<property name="hibernate.c3p0.timeout">10</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">300</property>
<property name="hibernate.c3p0.acquire_increment">5</property>
<property name="hibernate.c3p0.validate">true</property>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐