Как кодировать оптимистическую и пессимистическую блокировку из кода Java - PullRequest
7 голосов
/ 01 января 2012

Я знаю, что такое оптимистическая и пессимистическая блокировка, но когда вы пишете код Java, как вы это делаете?Предположим, я использую Oracle с Java, у меня есть какие-либо методы в JDBC, которые помогут мне сделать это?Как я буду настраивать эту вещь?Будут оценены любые указатели.

Ответы [ 2 ]

12 голосов
/ 16 января 2012

Вы можете реализовать оптимистические блокировки в своей таблице БД следующим образом (вот как в Hibernate делается оптимистическая блокировка):

  1. Добавьте в таблицу целочисленный столбец «версия».
  2. Увеличивать значение этого столбца при каждом обновлении соответствующей строки.
  3. Чтобы получить блокировку, просто прочитайте значение строки "version".
  4. Добавить условие "версия = полученная_версия" к предложению где Ваше обновление заявления. Проверьте количество затронутых строк после обновления. Если ни одна строка не была затронута - кто-то уже изменил вашу запись.

Ваше обновление должно выглядеть как

UPDATE mytable SET name = 'Andy', version = 3 WHERE id = 1 and version = 2

Конечно, этот механизм работает только в том случае, если за ним следуют все стороны, в отличие от предоставляемых СУБД блокировок, которые не требуют специальной обработки.

Надеюсь, это поможет.

3 голосов
/ 01 января 2012

Предположим, я использую Oracle с Java, у меня есть какие-нибудь методы в JDBC, которые помогут мне сделать это?

Этот документ Oracle должен дать вам несколько советов, как это сделать.

Нет конкретных методов JDBC. Скорее, вы добиваетесь оптимистической блокировки путем разработки запросов / обновлений SQL и определения границ транзакций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...