Я выполняю установку клиент-сервер, где есть одно серверное приложение и несколько клиентов (клиенты написаны на JavaFX, а также на Android).
Мне нужен способ ограничить доступ к определенным объектам базы данных только для одного устройства за раз. Поэтому, если одно устройство использует этот объект, никакие другие устройства не смогут использовать его, пока устройство, использующее его, не выполнит свою задачу (например, блокировку).
Мы используем Spring Boot с MongoDB на сервере, и клиенты могут подключаться к нему через HTTP-запросы.
Вызов
Клиент (особенно Android) может никогда не снять блокировку, так как он может быть убит / закрыт / потерян в сети
Пример
У нас есть 1 ресурсный объект Order-12.
У нас есть 2 клиента Client-A и Client-B под управлением Android.
У нас есть 1 сервер, на котором запущен Tomcat с MongoDB.
Клиент-А хочет получить доступ к Заказу-12. Запрашивает доступ с сервера. Сервер выполняет некоторую проверку (может быть столбцом таблицы или даже хэш-картой в памяти) и предоставляет доступ к Client-A.
Во время работы с Заказом-12 Клиент-А разряжается и немедленно выключается. В результате сервер не получил запрос от Клиента-A на снятие блокировки для Order-12.
Теперь другой клиент Client-B хочет получить доступ к Order-12. Это запрос доступа с сервера. Сервер выполняет проверку (как указано выше, может быть из базы данных или даже карты) и видит, что Клиент-А уже использует Заказ-12. Следовательно, сервер будет отказывать Клиенту-B в доступе к Порядку-12, поскольку он по-прежнему считает, что Клиент-А использует его, хотя это уже не так, поскольку Клиент-А уже отключен из-за проблем с батареей.
Любая помощь с благодарностью.