Оптимистическая блокировка в приложении RESTful
На работе мыповторная разработка приложения RESTful, где уровень данных будет обрабатываться Hibernate. Но мы'Вы не знаете, как обрабатывать обновления на объектах.
Мы'повторно планируем сделать следующее:
1) клиент запрашивает сущность по id
2) Hibernate загружает объект, запрошенные поля (всегда с версией) копируются в DTO, который преобразуется в JSON и отправляется клиенту
3) Клиент управляет некоторыми полями и отправляет объект (с номером версии) обратно на сервер.
4) Сервер получает JSON, который преобразуется в DTO.
5) Соответствующий объект загружается из Hibernate и DTO 's реквизиты копируются в сущность. =>
Сущность всегда перезаписывается, даже если был установлен номер версии клиента. Означает ли это, что мы всегда должны сами проверять номер версии клиента по номеру версии загруженного экземпляра, а не делать это в Hibernate?
В обычном приложении с сессиями отдельный экземпляр сохраняется в HttpSession. Всякий раз, когда клиент обновляет объект, экземпляр извлекается из HttpSession, а некоторые атрибуты обновляются. Всякий раз, когда Hibernate фиксирует обновление, выдается исключение ObjectStaleException, если номер версии < номер текущей версии.
Проблема в том, что мы неу меня нет Http-сессии, потому что мыпытаемся быть ОТДЫХАМИ.
Есть ли общее решение для обработки оптимистической блокировки в приложениях RESTful вместо того, чтобы самим проверять номера версий?