struts2 + hibernate  + mysql数据库  放在windows XP tomcat服务器上。
该项目运行一段时间  或者隔夜就报错,
而且是访问登录页不报错,一旦点击登录就报错。换句话说就是访问数据库报错。
以本人浅薄的知识初步判断为mysql数据库8小时无连接自动关闭的原因。但是延长了数据库关闭的时间,依旧如此。
以下为tomcat后台报错:
2012-1-14 8:47:37 org.apache.catalina.core.StandardWrapperValve invoke
: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:707)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:467)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)

以下为前台页面报错:
Struts has detected an unhandled exception: Messages: Software caused connection abort: socket write error 
The last packet successfully received from the server was57161 milliseconds ago.The last packet sent successfully to the server was 57161 milliseconds 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. 
 FreeMarker template error!Method public java.lang.String org.hibernate.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on org.hibernate.exception.JDBCConnectionException: could not execute query
The problematic instruction:
----------
==> ${msg[0]} [on line 68, column 29 in org/apache/struts2/dispatcher/error.ftl]
----------Java backtrace for programmers:
----------
freeer.template.TemplateModelException: Method public java.lang.String org.hibernate.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on org.hibernate.exception.JDBCConnectionException: could not execute query
at freeer.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)
at freeer.ext.beans.SimpleMethodModel.get(SimpleMethodModel.java:138)
at freeer.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:111)
at freeer.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:90)
at freeer.core.Expression.getAsTemplateModel(Expression.java:89)
at freeer.core.Expression.getStringValue(Expression.java:93)
at freeer.core.DollarVariable.accept(DollarVariable.java:76)
at freeer.core.Environment.visit(Environment.java:208)
at freeer.core.MixedContent.accept(MixedContent.java:92)
at freeer.core.Environment.visit(Environment.java:208)
at freeer.core.IfBlock.accept(IfBlock.java:82)
at freeer.core.Environment.visit(Environment.java:208)
at freeer.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179)
at freeer.core.Environment.visit(Environment.java:415)
at freeer.core.IteratorBlock.accept(IteratorBlock.java:102)
at freeer.core.Environment.visit(Environment.java:208)
at freeer.core.MixedContent.accept(MixedContent.java:92)
at freeer.core.Environment.visit(Environment.java:208)
at freeer.core.IfBlock.accept(IfBlock.java:82)
at freeer.core.Environment.visit(Environment.java:208)
at freeer.core.MixedContent.accept(MixedContent.java:92)
at freeer.core.Environment.visit(Environment.java:208)
at freeer.core.Environment.process(Environment.java:188)
at freeer.template.Template.process(Template.java:237)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:703)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:467)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at freeer.ext.beans.SimpleMemberModel.unwrapArguments(SimpleMemberModel.java:85)
at freeer.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:106)
... 38 more

解决方案 »

  1.   

    我记得我也遇到过这样的问题,把Mysql数据库的配置文件改了下就好了,就像楼主说的那样。
    你确定没改错吧?
      

  2.   

    看看这篇文章http://gundumw100.iteye.com/blog/547852
      

  3.   

    绝对没改错,但是更改数据库配置文件 延长mysql自动关闭的时间 并不能完全解决这个问题。。
      

  4.   

    这两种方法我都已经添加上了 我想应该还有更好的办法,还有就是没有有力的证据证明这就是mysql8小时的问题
      

  5.   

    tomcat服务器的问题,, 配置jvm 等
      

  6.   

    从错误信息来看,就是mysql数据库8小时无连接自动关闭的原因,可以加大参数配置
    或者采用数据库连接池,让连接池帮你管理数据库连接
      

  7.   

    报空指针异常
    是不是你用那个HIBERNATE只开不关?