Избегайте оптимистичной блокировки в веб-приложении Java

У меня есть проблема, касающаяся исключения оптимистической блокировки Java. У меня есть класс обслуживания, который создается (к весне) для каждого нового сеанса пользователя, и он содержит нестатический метод, который выполняет операции с БД. Интересно, как я могу избежать исключения оптимистической блокировки на объекте, который читается / записывается в БД. Я хотел бы добиться такого же результата, как и синхронизированный метод, но я думаю, что использование "synchronized" не может быть и речи, поскольку метод не является статичным и не будет иметь никакого эффекта, когда пользователи имеют собственные экземпляры службы? Могу ли я каким-то образом определить, сохранена ли новая версия объекта в БД, а затем получить новую версию, а затем отредактировать и сохранить ее? Я хочу, чтобы транзакция удерживалась до тех пор, пока все в порядке, даже если это подразумевает, что транзакция должна ждать других транзакций. Моей первой идеей было поместить код транзакции в блок try-catch, а затем повторить транзакцию (чтение и запись), если были сгенерированы исключения из оптимистической блокировки. Это решение "слишком легко" или?

1 ответ

Оптимистическая блокировка используется для повышения производительности, но при этом избегать путаницы в данных.

Если происходит сбой оптимистической блокировки, пользователь (который не прошел обновление) должен решить, хочет ли он выполнить свою операцию снова. Вы не можете автоматизировать это, так как это полностью зависит от того, что было изменено и как.

Так что нет, ваша идея повторить транзакцию с помощью try/catch не является "слишком простым решением". Это не решение, это серьезная (и глупая) ошибка.

Другие вопросы по тегам