1

Derby (JavaDB) をデフォルトのデータベースとして使用する Glassfish で JSF/JPA アプリケーションを開発しています。Persistence Unit の「DROP AND CREATE」ポリシーが確実に機能しないことが判明したため、データベースを削除してから、スキーマを変更するときにデータベースを再作成しました。

または、少なくとも私はそうしようとしています。データベースを削除すると、削除されたデータベースと同じ時刻の「新しい」データベースを作成できなくなります。古いものを開くこともできません。

今のところ私の回避策は、新しい名前でデータベースを作成してそれを使用することです(毎回glassfishリソースxmlファイルを編集する必要があります)が、何が起こっているのか知りたいです. 他の誰かがこの問題を抱えているか、それを修正する方法を知っていますか?

4

1 に答える 1

0

この問題の病理が何であるかを 100% 理解しているとは言えませんが、回避策があります。誰かが Netbeans コミュニティにバグレポートを入力するか、それを行うためのリンクを私に提供してくれるとよいでしょう。

この問題は、GlassFish 3.1 サーバーが管理下にある MacOS バージョンの NetBeans 7.2 で発生します。サーバーを起動してアプリを実行すると、自動的に Derby (Java DB) が起動されます。ただし、GlassFish サーバーを停止したり、Netbeans を終了したりしても、Derby インストールは実行されたままになります。

NetBeans と GlassFish を再起動すると、Derby サーバーを起動しようとすると、ポート 1527 が既に使用されているというメッセージが表示されることに注意してください。通常、これは問題ではありません。アプリケーションは引き続き実行され、開いているポートを介して以前に開始された Derby プロセスと通信するからです。しかし、Netbeans メニューシステムがデータベースを削除および作成するために使用する通信パスは、このデータパスを使用していないのではないかと私は考えています。通信していません。したがって、ロックアップと失敗。

回避策は、Derby プロセスをバックグラウンドで強制終了してから、削除/作成操作を実行することです。これは正常に機能します。MacOS または Linux では、コマンド ウィンドウを開いて、

ps axe | grep -i derby

Java JVM が Derby を実行していることがわかります。プロセスIDをコピーして実行するだけです

kill <pid>

(-9 は必要ないようです) もう一度 ps コマンドを実行すると、プロセスがなくなっていることがわかります。Derby は、次に必要になったときに Netbeans によって開始されます。

于 2012-10-01T20:31:22.490 に答える