Tomcat не запускается из-за загрузки драйвера jdbc - PullRequest
13 голосов
/ 09 апреля 2010

Вот соответствующая часть журнала запуска tomcat:

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.

Проблема, которую это вызывает, состоит в том, что это в основном заставляет веб-приложение не запускаться должным образом.

Есть идеи как это исправить?

Ответы [ 4 ]

6 голосов
/ 26 декабря 2011

Очевидно, что это ошибка в стеке провайдера JDBC. Но в любом случае я использовал некоторый подобный код в Jetty:

    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) {}    

}

5 голосов
/ 18 мая 2011

Если это проблема с DBCP, остановите tomcat, убейте все оставшиеся процессы (если у вас запущено более одного tomcat), удалите временный каталог tomcat (и, возможно, рабочий каталог) и повторите попытку.

4 голосов
/ 06 сентября 2015

Иногда, особенно при использовании приложения Spring на Tomcat, сообщение об ошибке вводит в заблуждение - когда вообще нет никакого отношения к какой-либо ошибке драйвера JDBC, а есть только сбой какого-либо init-метода приложения BEAN (или @PostConstruct). Трассировка стека ошибок скрыта и отображается только в tomcat / logs / localhost.xxx файл. Просто будьте в курсе этого поведения. Это стоило мне много времени.

С уважением, Йоси Лев

4 голосов
/ 05 мая 2010

Сообщения SEVERE, касающиеся драйверов JDBC, вызваны проблемой DBCP. См. DBCP-332

...