Die Installation einer einfachen Grails-Anwendung in Tomcat unter Linux hätte eigentlich eine ganz einfache Aufgabe sein sollen. Stattdessen verbrachte ich einen zunehmend frustrierenden Vormittag damit, eine "hilfreiche" Funktion von HSQLDB aufzuspüren, die dazu führte, dass das Starten mit
org.hsqldb.HsqlException: Die Datenbank wird bereits von einem anderen Prozess verwendet: org.hsqldb.persist.NIOLockFile@6b67bdbe[file =/myDb.lck, exists=true, locked=false, valid=false, fl=null]
Ausnahmen. Um anderen eine ähnliche Zeitverschwendung zu ersparen, finden Sie hier die Ursache und eine Abhilfe:
Ursache
Zwischen den Versionen 1.7.2. und 1.8.0.10. versucht HSQLDB, die Dateien für dateibasierte DBs zu sperren, um "[den] Benutzer davor zu schützen, den Prozess zweimal mit denselben Dateien auszuführen und seine Daten zu beschädigen", wie es heißt. Wenn Ihre DB-Dateien auf NFS liegen, das diese Sperren nicht unterstützt, wird HSQLDB leider mit der oben genannten Ausnahme in die Luft gehen. Es scheint, dass es genug Probleme damit gab, so dass HSQLDB in 1.8.0.10. wieder dazu übergegangen ist, standardmäßig keine Sperren zu verwenden, obwohl dies in zukünftigen Versionen wieder geändert werden könnte.
Abhilfe(n)
- Verschieben Sie Ihre DB-Dateien an einen Nicht-NFS-Speicherort
- Aktualisieren Sie auf Version 1.8.0.10. (oder eine Version vor 1.7.2.)
- Verwenden Sie eine Mem- statt einer Datei-DB
Die Details sind in diesem Thread aus den HSQLDB-Foren beschrieben.
Nach dem, was dort erwähnt wird, scheint es möglich zu sein, das File Locking irgendwie zu deaktivieren. Ich habe es mit
Verfasst von
Andrew Phillips
Contact



