Я использую Play, чтобы написать веб-приложение, которое развернуто в Tomcat. Поскольку приложение не будет обрабатывать слишком много данных, я использую базу данных H2 по умолчанию с Hibernate. Когда я хочу развернуть новую версию приложения, я закрываю tomcat, стираю старое веб-приложение и WAR, добавляю мою новую WAR и снова запускаю.
Это работало до нескольких дней назад, когда я добавил компонент базы данных. Теперь я часто не могу повторно развернуть приложение. Когда я удаляю старый каталог, он автоматически восстанавливается с такой структурой:
$ ls -laR myapp/
myapp/:
total 24
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .
drwxr-xr-x 13 root root 4096 Aug 24 17:20 ..
drwxr-xr-x 3 root root 4096 Aug 24 17:20 WEB-INF
myapp/WEB-INF:
total 24
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .
drwxr-xr-x 3 root root 4096 Aug 24 17:20 ..
drwxr-xr-x 3 root root 4096 Aug 24 17:20 application
myapp/WEB-INF/application:
total 24
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .
drwxr-xr-x 3 root root 4096 Aug 24 17:20 ..
drwxr-xr-x 3 root root 4096 Aug 24 17:20 db
myapp/WEB-INF/application/db:
total 24
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .
drwxr-xr-x 3 root root 4096 Aug 24 17:20 ..
drwxr-xr-x 2 root root 4096 Aug 24 17:20 h2
myapp/WEB-INF/application/db/h2:
total 24
drwxr-xr-x 2 root root 4096 Aug 24 17:20 .
drwxr-xr-x 3 root root 4096 Aug 24 17:20 ..
-rw-r--r-- 1 root root 100 Aug 24 17:20 play.lock.db
То же самое происходит, когда разархивируется WAR.
Недавно я заметил сообщение в журнале catalina.out, в котором говорится, что мое приложение не закрывает процесс, называемый «H2 File Lock Watchdog». Основываясь на кратком поиске документов H2, я думаю, что этот процесс мешает моему приложению.
EDIT
Вот строка жалобы в файле журнала:
SEVERE: The web application [/myapp] appears to have started a thread named [H2 File Lock Watchdog /var/lib/apache-tomcat-6.0.32/webapps/myapp/WEB-INF/application/db/h2/play.lock.db] but has failed to stop it. This is very likely to create a memory leak.
Итак, как мне убить этот процесс? Я не могу перезапустить машину, потому что она не моя, и я не могу найти сторожевой таймер с top
или ps
. Я бы предпочел, чтобы Play автоматически выключал его, но я не собираюсь встраивать его в свой сценарий развертывания.
Спасибо за миллион, если вы прочитали это далеко!