Несколько Приложения Java, обращающиеся к одной HSQLDB, вызывают зависание приложения

Это частично связано с моим предыдущим вопросом . Как указано в предыдущем вопросе, у меня есть настольное приложение, которое вызывает другой метод Main, который запускает определенный процесс. И настольное приложение, и отдельный метод Main будут обращаться к одной и той же базе данных HSQLDB.

До того, как зайти так далеко, мое настольное приложение только что получало доступ к базе данных HSQLDB, используя URL-адрес подключения, подобный этому:

jdbc:hsqldb:file:/some/path/myDatabase

Теперь это работает нормально в однопользовательской среде. Теперь, когда у меня есть многопользовательская среда с настольным приложением и отдельным процессом Main, который хочет читать / писать в / из этой базы данных, я хотел сделать эту базу данных общим ресурсом.

Я ' Мы просмотрели документацию 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 действительно делает то, что я ожидал.

8
задан Community 23 May 2017 в 12:00
поделиться