Я уже прочитал документы гибернации о параллелизме и, думаю, я понял доступные методы блокировки , но я не уверен, как мне реализовать следующий сценарий.
Два клиента F (быстрый) и S (медленный) получают доступ к базе данных и могут изменять одни и те же объекты.
Теперь еще одно дополнительное требование: для приложения крайне важно, чтобы клиент F выполнял так быстронасколько это возможно.
Как бы вы решили проблему?
Моя проблема с оптимистической блокировкой: предположим, что F пытается обновить свои изменения, но не может сделать это успешно,потому что S уже обновил свои данные.Исключение (StaleObjectStateException) будет выброшено из спящего режима.Я поймаю это исключение, объединю изменения и снова попробую точно такую же транзакцию, верно?Тогда мне не нравится случай, когда F повторяет свои транзакции до тех пор, пока он не будет успешным, и поэтому F может теоретически блокировать длительное время.Должен ли я игнорировать это и надеяться, что это условие редко встречается на практике?Или я могу дать своим клиентам что-то вроде приоритета блокировки базы данных?
Другие пользователи могут жить с этими проблемами:
StaleObjectStateException (оптимистическая блокировка)... мы получаем 3 исключения на 10000 звонков.