Это частично связано с моим предыдущим вопросом . Как говорится в предыдущем вопросе, у меня есть настольное приложение, которое вызывает другой метод Main, который запускает определенный процесс. Как настольное приложение, так и отдельный метод Main будут обращаться к одной и той же базе данных HSQLDB.
До этого мое настольное приложение только что получило доступ к базе данных HSQLDB с помощью URL-адреса подключения, подобного следующему:
jdbc:hsqldb:file:/some/path/myDatabase
Теперь это прекрасно работает в однопользовательской среде. Теперь, когда у меня есть многопользовательская среда с настольным приложением и отдельным основным процессом, который хочет читать / записывать в / из этой базы данных, я хотел сделать эту базу данных общим ресурсом.
Я посмотрел документацию HSQLDB и этот пост о Создание общей базы данных HSQLDB , но безрезультатно.
В сообщении говорится о запуске сервера с помощью кода. Я не думаю, что это то, что я хочу делать, потому что я хотел бы, чтобы база данных HSQLDB работала и работала все время, поскольку в настольном приложении может быть несколько пользователей.
Глядя на официальную документацию HSQLDB, в ней говорится, что вы можете запустить сервер HSQLDB следующим образом:
java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 xdb
Если я запускаю указанную выше команду со своим собственным файлом базы данных и именем, кажется, что все в порядке:
[Server@6ca1c]: [Thread[main,5,main]]: checkRunning(false) entered
[Server@6ca1c]: [Thread[main,5,main]]: checkRunning(false) exited
[Server@6ca1c]: Startup sequence initiated from main() method
[Server@6ca1c]: Loaded properties from [/some/path/myDatabase/server.properties]
[Server@6ca1c]: Initiating startup sequence...
[Server@6ca1c]: Server socket opened successfully in 16 ms.
Затем я изменил URL своего соединения на следующий:
jdbc:hsqldb:hsql://localhost/xdb
Кажется, это не работает для меня. Есть идеи о том, что я сделал неправильно или чего мне не хватает?
Кроме того, когда настольное приложение вызывает внешний метод Main, настольное приложение просто зависает, поскольку внешний метод Main замечает, что настольное приложение, похоже, заблокировало базу данных. Как только я закрываю настольное приложение, внешний метод Main делает то, что ожидал.