GReaper / MadridLive

Madrid Live repository
0 stars 0 forks source link

Error que provoca las desconexiones de Madrid Live #120

Closed GReaper closed 10 years ago

GReaper commented 10 years ago

Después de investigar, con ayuda de la versión que subí el otro día a la MV, tengo la traza del error que ocurre en servidor y que provoca que sea necesario reiniciar la MV:

Traza

java.sql.SQLException: No operations allowed after connection closed.
Connection was closed due to the following exception:

** BEGIN NESTED EXCEPTION ** 
java.sql.SQLException\nMESSAGE: Communication link failure: java.io.EOFException, underlying cause: null

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1319)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1463)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1854)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1109)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1203)
at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1164)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2087)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2037)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1156)
at ucm.ssii.turismo.connection.MySQL.tablas.UsuarioSQL.comprobarUsuario(Unknown Source)
at LoginServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

** END NESTED EXCEPTION **

STACKTRACE:

java.sql.SQLException: Communication link failure: java.io.EOFException, underlying cause: null

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1319)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1463)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1854)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1109)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1203)
at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1164)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2087)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2037)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1156)
at ucm.ssii.turismo.connection.MySQL.tablas.UsuarioSQL.comprobarUsuario(Unknown Source)
at LoginServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

** END NESTED EXCEPTION **

at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1638)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1854)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1109)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1203)
at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1164)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2087)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2037)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1156)
at ucm.ssii.turismo.connection.MySQL.tablas.UsuarioSQL.comprobarUsuario(Unknown Source)
at LoginServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

** END NESTED EXCEPTION **

at com.mysql.jdbc.Connection.checkClosed(Connection.java:2225)
at com.mysql.jdbc.Connection.createStatement(Connection.java:1131)
at com.mysql.jdbc.Connection.createStatement(Connection.java:1150)
at ucm.ssii.turismo.connection.MySQL.tablas.UsuarioSQL.comprobarUsuario(Unknown Source)
at LoginServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)\n
GReaper commented 10 years ago

Posibles relaciones

GReaper commented 10 years ago

Posibles causas

Para ello habría que usar funciones como http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#isClosed%28%29 . Aún así ésta no garantiza que se devuelva el valor correcto en caso de errores, por lo que lo que se debería hacer es tratar de comprobar si se lanzan SQLException. Esto debe hacerse dentro de MySQLConnector para evitar tener que cambiar todos los demás códigos.

Posible forma: un simple SELECT que comprobará si la conexión está activa (http://stackoverflow.com/questions/14320231/is-there-a-safe-way-to-tell-if-a-jdbc-connection-is-still-ok o http://www.coderanch.com/t/294876/JDBC/databases/Dose-checking-JDBC-Connection-alive).

GReaper commented 10 years ago

http://thomas11.wordpress.com/2008/05/14/how-hard-can-it-be-to-check-a-jdbc-connection/

GReaper commented 10 years ago

http://stackoverflow.com/questions/274822/programmatically-checking-for-open-connection-in-jdbc

GReaper commented 10 years ago

Actualizo He aplicado la solución mencionada. En cuanto pueda subiré una nueva versión con este arreglo y avisaré de ello. Si se soluciona, cerraría issue.

GReaper commented 10 years ago

Nueva traza tras la actualización

java.lang.NullPointerException
at ucm.ssii.turismo.recomendador.RecomendadorPlantillasAbstractas.recomendar(Unknown Source)
at ucm.ssii.turismo.recomendador.RecomendadorPlantillasConcretas.recomendar(Unknown Source)
at RecomendadorServlet.doPost(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

¿De dónde viene este NullPointerException? ¿Qué cambios recientes ha habido en el código del recomendador?

GReaper commented 10 years ago

Actualizo El error salta al recomendar museos. Voy a revisar los cambios que hice en ese módulo.

[Edito] No es correcto, me acaba de ocurrir al marcar todo menos museos.

[Edito] La traza puesta sale solamente con museos marcados. Si marco restaurantes, parques y paseos salta otro NullPointerException relacionado con OntoBridge. Si solo marco restaurantes no hay problema.

GReaper commented 10 years ago

Actualizo Ante los problemas vistos, resubo una nueva versión a la MV haciendo una limpieza del proyecto.

GReaper commented 10 years ago

El error sigue aún con la nueva versión.

GReaper commented 10 years ago

Actualizo Revertido el commit del cambio en el conector a la base de datos por si fuese la causa. Subiendo nueva versión para probar.

Si falla, probar una conexión para ver si los datos enviados son correctos.

GReaper commented 10 years ago

Actualizo Ya no sale el error con los museos, de modo que el problema está en el nuevo modelo de conector, debe revisarse.

IMPORTANTE:

GReaper commented 10 years ago

Actualizo Ayer dejé subido un error y parece que ya funcionaban los museos. Esta mañana la máquina ha aparecido caída, de hecho Tomcat no estaba funcionando (el proceso no estaba activo). Estaré pendiente de ver si se repite o es que se me olvidó reiniciarlo correctamente.

GReaper commented 10 years ago

Actualizo Tras tres días funcionando sin caídas, voy a suponer que el problema ha quedado resuelto (cruzaré los dedos). En caso de que reaparezca se puede retomar la issue.