Al hacer login en la aplicación, aveces, sale el siguiente error:
javax.servlet.ServletException: could not execute query
org.ai.kandelo.utils.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:73)
causa raíz
javax.servlet.ServletException: could not execute query
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.ai.kandelo.filters.LoginFilter.doFilter(LoginFilter.java:75)
org.ai.kandelo.utils.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:42)
Logged In: YES
user_id=85578
Originator: NO
Ayer lo estuve hablando con Borja y el motivo podría ser:
(17:58:59) borjaAI: a ver, el problema es que es un error resbaladizo
(17:59:23) borjaAI: Punto 1: Sabes lo que es el patron vista-session?
(17:59:33) borjaAI: :S
(18:00:12) borjaAI: en spring viene por defecto pero en struts te lo tienes que hacer tu
(18:00:17) acsg: hmmm, creo que no
(18:00:36) acsg: aunque me lo imagino
(18:00:55) borjaAI: bueno, sabes que hibernate hace carga lazy de los objetos, no?
(18:01:03) borjaAI: (si no le indicas lo contrario)
(18:01:20) acsg: los carga cuando los necesita .... más o menos lo conozco :)
(18:01:50) borjaAI: el problema está en que si haces que tu Action cargue unos datos de la BD y los mandas al jsp y cierras la conexion
(18:02:34) borjaAI: si el motor de tomcat quiere cargar ciertos datos del objeto se encuentra con un dato sin inicializar (lazy) -> CATA CRAAAAAAAACK!!!
(18:03:14) borjaAI: que se hace? pues se mete un filtro (servlets) y lo que haces es abrir la conexion a la BD antes de hacer nada y cerrarla despues de haber hecho todo...
(18:03:46) borjaAI: y esa es la clase HibernateSessionRequestFilter que da el error
(18:03:56) borjaAI: peeeeero
(18:04:01) borjaAI: el error no es ese
(18:04:25) borjaAI: el error viene con el MySQL
(18:04:57) borjaAI: la cosa es que aunque se cierra la conexión, no sé porque se debe quedar algo abierto
(18:05:32) borjaAI: que pasa... que cuando eso se queda así durante mucho tiempo Mysql te da un error como que esa conexión ya ha pasado demasiados datos y no puede pasar más....
(18:05:50) borjaAI: y por eso da error al abrir una nueva conexión
Logged In: NO
Para ver las conexiones que tiene abiertas MySQL:
http://dev.mysql.com/doc/refman/5.0/en/server-status-variables.html (Threads_connected)
mysqladmin -u root extended-status | grep Threads
| Threads_cached | 2 |
| Threads_connected | 2 |
| Threads_created | 4 |
| Threads_running | 1 |
Voy a probar a entrar y salir varias veces de Kandelo a ver como evoluciona.
Logged In: YES
user_id=85578
Originator: NO
Las conexiones se abren y se cierran bien en la entrada y salida de sesión. Habrá que seguir probando.
Logged In: YES
user_id=85578
Originator: NO
Este error vimos el otro día que no tiene que ver con que se abran conexiones de más en MySQL y el motor deje de funcionar. El problema es interno en nuestro código y se produce después de funcionar un tiempo la aplicación. Como será delicada su solución no lo consideramos bloqueante para la 1.0 y si es necesario, programamos reinicios diarios del servicio hasta que demos con el fallo.