Я запускаю tomcat под/внутри затмения при разработке веб-приложения. Веб-приложение использует hsqldb во встроенном режиме, с помощью гибернации и guice. Кажется, что все работает нормально, за исключением случаев, когда я останавливаю tomcat. Eclipse имеет зеленую кнопку запуска и красную кнопку остановки для Tomcat. Когда я нажимаю кнопку «Стоп», она не сразу останавливается, как это было до того, как я добавил hibernate и hsqldb в микс. Теперь он ждет несколько секунд, а затем затмение дает мне диалоговое окно о невозможности остановить tomcat и нажать «ОК», чтобы принудительно завершить его.отмена регистрации драйвера JDBC?
Кто-нибудь знает, что мне нужно сделать, чтобы исправить это? Я нашел несколько других ответов, говорящих о том, чтобы поместить файл hsqldb jar в каталог lib tomcat, но мне было интересно, что я могу что-то сделать, это немного менее решительно.
Вот что на выходе ошибки из кота (в окне консоли Eclipse):
Jan 31, 2017 7:04:11 PM org.apache.catalina.loader.WebappClassLoaderBase clearReferencesJdbc
WARNING: The web application [basic] registered the JDBC driver [org.hsqldb.jdbc.JDBCDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Jan 31, 2017 7:04:11 PM org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
WARNING: The web application [basic] appears to have started a thread named [HSQLDB Timer @276f0355] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.lang.Object.wait(Native Method)
org.hsqldb.lib.HsqlTimer$TaskQueue.park(Unknown Source)
org.hsqldb.lib.HsqlTimer.nextTask(Unknown Source)
org.hsqldb.lib.HsqlTimer$TaskRunner.run(Unknown Source)
java.lang.Thread.run(Thread.java:745)
Jan 31, 2017 7:04:11 PM org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
WARNING: The web application [basic] appears to have started a thread named [pool-1-thread-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
Jan 31, 2017 7:04:11 PM org.apache.catalina.loader.WebappClassLoaderBase checkThreadLocalMapForLeaks
SEVERE: The web application [basic] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [[email protected]]) and a value of type [org.hibernate.internal.SessionImpl] (value [SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=ExecutableList{size=0} updates=ExecutableList{size=0} deletions=ExecutableList{size=0} orphanRemovals=ExecutableList{size=0} collectionCreations=ExecutableList{size=0} collectionRemovals=ExecutableList{size=0} collectionUpdates=ExecutableList{size=0} collectionQueuedOps=ExecutableList{size=0} unresolvedInsertDependencies=null])]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Вам необходимо ЗАМЕНЯТЬ базу данных, когда вы останавливаете Tomcat. – fredt
lumpynose is rigth, у вас есть два решения: - запустите «SHUTDOWN;» как команда SQL где-то в конце вашего приложения ИЛИ используйте shutdown = true в вашей строке подключения следующим образом: _Connection = DriverManager.getConnection («jdbc: hsqldb: file: mydb; shutdown = true», «SA», ""); –