2010-04-09 17 views
13

Aquí está la parte pertinente del registro de inicio de Tomcat:Tomcat no se puede iniciar debido a la carga del controlador JDBC

SEVERE: Context [/f360] startup failed due to previous errors 
Apr 8, 2010 6:45:56 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 
SEVERE: A web application registered the JBDC driver [org.apache.derby.jdbc.ClientDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 
Apr 8, 2010 6:45:56 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 
SEVERE: A web application registered the JBDC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 
Apr 8, 2010 6:45:56 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 
SEVERE: A web application registered the JBDC driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 

El problema que causa es que, básicamente, hace que la aplicación web falle para que se inicie correctamente.

¿Alguna idea de cómo solucionar esto?

+0

inicio fallaron debido a errores anteriores * *. Por favor, actualice su pregunta para incluir esos errores. Ellos son la ** causa raíz ** de este problema. – BalusC

+0

El problema es que no hay errores enumerados anteriormente. Solo hay mensajes INFO. –

Respuesta

4

Los mensajes SEVERES con respecto a los controladores JDBC son causados ​​por un problema DBCP. Consulte DBCP-332

+0

¿dónde está la parte de DBCP? ¿Gato? Tengo un error anterior con Tomcat6/JDK6/MacOS X, pero (la misma aplicación, usando postgres + jdbc) funciona bien en Tomcat/JDK6/WinXP. ¡Gracias! –

+0

Gracias por la referencia rgielen. Esa explicación tiene sentido. –

5

Si se trata del problema DBCP, detenga tomcat, elimine cualquier proceso restante (en caso de que tenga más de un tomcat en ejecución), elimine el directorio tomcat temp (y tal vez el directorio de trabajo) y vuelva a intentarlo.

+0

Esto realmente me ayudó. Traté de matar a Tomcat, reiniciar, todo. Cuando cerré, borré el directorio de temperatura y luego comencé una copia de seguridad, todo funcionó :-) ¡Gracias! – jpswain

6

Claramente esto es un error en la pila de proveedores JDBC. Pero de todos modos, he utilizado un código similar en el embarcadero:

public class CleanupContextListener implements ServletContextListener { 
@Override 
public void contextDestroyed(ServletContextEvent servletContextEvent) { 
    Logger logger = Logger.getLogger("CleanupContextListener"); 
    Enumeration<Driver> drivers = DriverManager.getDrivers(); 
    while (drivers.hasMoreElements()) { 
     Driver driver = drivers.nextElement(); 
     ClassLoader driverclassLoader = driver.getClass().getClassLoader(); 
     ClassLoader thisClassLoader = this.getClass().getClassLoader(); 
     if (driverclassLoader != null && thisClassLoader != null && driverclassLoader.equals(thisClassLoader)) { 
      try { 
       logger.warn("Deregistering: " + driver); 
       DriverManager.deregisterDriver(driver); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
@Override 
public void contextInitialized(ServletContextEvent servletContextEvent) {}  

}

4

A veces, especialmente cuando se utiliza la aplicación de Primavera en Tomcat, el mensaje de error es engañosa - cuando no hay ninguna relación con cualquier error de controlador JDBC en todo menos una falla de alguna aplicación BEAN init-method (o @PostConstruct). El seguimiento de la pila de errores está oculto y aparece solo en el archivo tomcat/logs/localhost.xxx . Solo tenga en cuenta este comportamiento. Me costó mucho tiempo.

Saludos, Yosi Lev

+0

Esto es cierto. Al implementar mi aplicación Grails (que usa Spring Framework) tiene la contraseña de la base de datos compilada en el archivo conf/DataSource.groovy. Por supuesto, estaba usando la contraseña incorrecta, pero el único error que se informó fue este registro extraño del controlador JDBC. No se registra ningún otro error de base de datos. Debe haber una opción para que Spring registre todas las operaciones de inicio de base de datos. –

+0

Es cierto. La verdadera razón no es nada acerca de jdbc. – flower

+0

¡Esto me costó horas! Gracias Yosi Lev – FuzZ63

Cuestiones relacionadas