2011-08-24 3 views
6

私はTomcatにデプロイされているWebアプリケーションを書くためにPlayを使用しています。アプリケーションは大量のデータを処理しないので、私はHibernateでデフォルトのH2データベースを使用しています。新しいバージョンのアプリケーションを展開したいときは、tomcatをシャットダウンし、古いwebappとWARを消去し、新しいWARを追加してバックアップを開始します。再生! H2を正しくシャットダウンしない

これは数日前、データベースコンポーネントを追加するまで機能しました。今、私はしばしばアプリを再デプロイできません。古いディレクトリを削除すると、次の構造で自動的に再生成されます。

$ 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

はここで文句ラインは、ログファイルにあります:

​​

だから、どのように私はこのプロセスを殺すのですか?私のマシンではないのでマシンを再起動できません。topまたはpsでウォッチドッグを見つけることができません。私はPlayが自動的にそれをシャットダウンする方法を好むだろうが、私はそれを私の展開スクリプトに組み込むのではない。

これまでに読んだことがありがとうございました!

+0

を使用します。もう1つのポイントは、明らかにデータベースプロセスが最終的に死ぬことです。どれくらい時間がかかるかは分かりませんが、それは数時間です。それを待っているのは一種の解決策に過ぎませんが、何よりも優れていますか? – andronikus

答えて

8

私は、Tomcat

をシャットダウンし、あなたが完全にTomcatをシャットダウンしましたか? H2データベースは実行中です。 tomcatプロセスを停止すると、データベースも停止します(H2はtomcatプロセス内で実行されているため)。異なるプロセスでデータベースを実行する場合を除きます。

tomcat内にウェブアプリケーションをシャットダウンしましたか?その場合、少なくとも1つのデータベース接続が閉じられていないので、データベースは実行され続けます(この.lock.dbファイルが作成されます)。

ここで私はプレイフレームワークを知らず、すべてのデータベース接続が確実に閉じられるようにする方法については言えません。

データベースを強制的に閉じる1つの方法は、SQL文SHUTDOWNを実行することです。

私は

toppsだけプロセスを表示トップまたはPSとのウォッチドッグを見つけることができません。 H2ウォッチドッグはスレッドのJavaプロセス内にあります。スレッドを表示するには、

jps -l (to get the list of Java processes) 
jstack -l <pid> (to get a full thread dump) 
+0

私はいつものように 'sh bin/shutdown.sh'でサーバをシャットダウンしています。私がやっていなければならないことは他にありますか?遊び!フレームワークはこのようなことを自動的に処理する傾向があるので、 'SHUTDOWN'ステートメントを渡す方法はわかりません。私は月曜日にJavaプロセスを手動で終了しようとします。うまくいけば誰の足元にも足を引っ掛けません。 – andronikus

+0

残念ながら 'jps -l'は私にJPSだけを見せてくれます! – andronikus

関連する問題