Случайные ошибки в проекте Play, размещенном на TomCat: исключение ClientAbortException: null - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть пример проекта, размещенного на сервере tomcat 5.5, который использует JDBC для подключения к базе данных MSSQL R2. Но случайно и довольно часто я получаю исключение ClientAbortException, и мое приложение вылетает. Что я могу сделать? Отладка не помогает, так как я не могу воспроизвести ошибки:

  • Play version: 1.2.3 и 1.2.4 (в обеих версиях возникают ошибки)
  • Машина: Windows Server 2003 и 2008

Трассировка стека ОШИБКА ~

@698gd0b9n
Internal Server Error (500)

Oops: ClientAbortException
An unexpected error occured caused by exception ClientAbortException: null

play.exceptions.UnexpectedException: Unexpected Error
    at play.Invoker$Invocation.onException(Invoker.java:244)
    at play.Invoker$Invocation.run(Invoker.java:286)
    at play.server.ServletWrapper$ServletInvocation.run(ServletWrapper.java:548)
    at play.Invoker.invokeInThread(Invoker.java:68)
    at play.server.ServletWrapper.service(ServletWrapper.java:142)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:619)
Caused by: ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:370)
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:352)
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:396)
    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:385)
    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:83)
    at play.server.ServletWrapper.copyResponse(ServletWrapper.java:493)
    at play.server.ServletWrapper$ServletInvocation.execute(ServletWrapper.java:558)
    at play.Invoker$Invocation.run(Invoker.java:278)
    ... 18 more
Caused by: java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:751)
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:347)
    at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:774)
    at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:118)
    at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:584)
    at org.apache.coyote.Response.doWrite(Response.java:560)
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:365)
    ... 26 more

Ответы [ 2 ]

2 голосов
/ 22 мая 2012

У меня была похожая проблема, но я использовал базу данных Play-1.2.3 / Tomcat 6 / H2.
Я никогда не понимал источник проблемы, но она была решена путем изменения нашего процесса развертывания и обеспечения полной остановки Tomcat перед заменой файла войны.
Мне также пришлось удалить все временные файлы Tomcat, прежде чем перезапустить Tomcat в первый раз.

Это должно быть как-то связано с тем, что Tomcat пытается выполнить горячую замену военного файла, а Play не закрывает свои ресурсы должным образом, но я прекратил расследование после нахождения допустимого обходного пути.
Я обнаружил, что некоторые исключения не обрабатываются в платформе, что привело к сообщениям об ошибках и зарегистрированному исключению, не имеющему ничего общего с реальной проблемой.

Этот ответ может не соответствовать стандартам stackoverflow (я не уверен, что это та же проблема, и я просто отправляю обходной путь), но я чувствовал, что этот личный опыт был связан. Дайте мне знать, если я должен удалить его, изменить его или еще что-нибудь.

0 голосов
/ 30 августа 2018

Для Play 1.1.1 / Tomcat 7.082 / Нет базы данных (это питание с Джерси 2 REST) ​​

Я удалил все временные файлы в Tomcat / temp и в Tomcat / work / Catalina / localhost.

Это решило эту проблему для меня.

...