2011-08-22 42 views
6

Estoy desarrollando una aplicación con GWT, Hibernate (asignación basada en XML), MySQL- en Tomcat6.0. IDE- Netbeans 6.9 Configuré la opción "Implementar al guardar" de las propiedades del proyecto en Netbeans.Acceso ilegal: esta instancia de aplicación web ya se ha detenido

Cuando mi aplicación se ejecuta durante mucho tiempo en el servidor de vez en cuando mi solicitud no se puede conectar a la base de datos y desencadena la siguiente excepción

El seguimiento de la pila siguiente eventual es causada por un error lanzado para fines de depuración, así como para intentar terminar el hilo
que causó el acceso ilegal, y no tiene ningún impacto funcional.

java.lang.IllegalStateException 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1273) 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) 
     at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4273) 
     at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1444) 
     at org.hibernate.connection.DriverManagerConnectionProvider.close(DriverManagerConnectionProvider.java:152) 
     at org.hibernate.connection.DriverManagerConnectionProvider.finalize(DriverManagerConnectionProvider.java:142) 
     at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method) 
     at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83) 
     at java.lang.ref.Finalizer.access$100(Finalizer.java:14) 
     at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) 

al reiniciar el servidor Tomcat estoy de nuevo capaz de conectar el Database.Please dime el camino a través del cual puedo conseguir un rendimiento perfecto y puedo hacer el trabajo sin necesidad de reiniciar el gato.

Respuesta

5

Probablemente esté abriendo más y más conexiones y nunca las cierre, llegando finalmente a la cuenta de conexión máxima configurada de su base de datos.

Encuentra dónde estás abriendo las conexiones y asegúrate de cerrarlas. Si abre una conexión para cada solicitud pero no la cierra, es fácil de encontrar y corregir. O tal vez no esté cerrando su conexión cuando reciba un error: verifique su código de manejo de excepciones.

Lo que se recomienda cuando se utilizan conexiones de base de datos es utilizar un try finally hacer un mayor esfuerzo en el cierre conexiones DB:

Connection con; 
try { 
    con = ...; // open connection 
    // do work 
catch (SQLException e) { 
    // do whatever 
} finally { 
    if (con != null && !con.isClosed()) { 
     try { 
      con.close(); 
     catch (SQLException e) { 
      // Don't throw from here or you'll lose any return/exception from above 
      log.error("Failed to close connection", e); 
     } 
    } 
} 
+0

en mi humilde opinión, si ese fuera el caso, yo esperaría un error 500 y no el eso se informa. De hecho, los servlets que no necesitan conexión de DB deberían seguir funcionando. – SJuan76

+0

De hecho, los Servlets que no necesitan DB funcionan bien ... –

+0

Luego busque la solución de Bohemian (pero aún así creo que es un mensaje bastante erróneo ...) – SJuan76

Cuestiones relacionadas