Как отключить систему блокировки JPA? - PullRequest
4 голосов
/ 26 августа 2011

Я использую OpenJPA и у меня проблема с блокировкой.Я уже понимаю, что такое OptimisticLockException и когда оно генерируется.

Но как с этим справиться?

Ниже * вы можете найти небольшой абзац об исключениях из оптимистической блокировки.

В двух словах, как я могу полностью отключить менеджер блокировки?

В моем файле persistent.xml у меня есть следующий код xml, но он не работает.Почему?

...
<properties>
  <property name="openjpa.LockManager" value="none" />
</properties>
...

* Согласно вики-книгам о Java Persistent:

Обработка исключений оптимистической блокировки

К сожалению, программисты часто бывают слишком умнымидля их же блага.Первая проблема, которая возникает при использовании оптимистической блокировки, - что делать, когда возникает исключение OptimisticLockException.Типичный ответ дружелюбного соседского супер-программиста - автоматически обработать исключение.Они просто создадут новую транзакцию, обновят объект, чтобы сбросить его версию, и объединят данные обратно в объект и повторно передадут его.Проблема Престо решена, или это так?

Это на самом деле сводит на нет всю точку блокировки в первую очередь.Если это то, что вы хотите, вы также можете использовать без блокировки .К сожалению, исключение OptimisticLockException редко обрабатывается автоматически, и вам действительно нужно беспокоить пользователя об этой проблеме.Вы должны сообщить о конфликте пользователю и сказать «извините, но конфликт редактирования произошел, и ему придется повторить свою работу», или, в лучшем случае, обновить объект и представить пользователю текущие данные иданные, которые они представили, и помогают им объединить эти два, если это необходимо.

Некоторые автоматизированные инструменты слияния будут сравнивать две конфликтующие версии данных, и если ни одно из отдельных полей не конфликтует, то данные будут просто автоматически объединеныбез помощи пользователя.Это то, что делают большинство систем контроля версий программного обеспечения.К сожалению, пользователь обычно лучше может решить, когда что-то конфликтует, чем программа, просто потому, что две версии .java-файла не изменили одну и ту же строку кода, не означает, что не было никакого конфликта, первый пользователь мог удалитьметод, к которому другой пользователь добавил метод для ссылки, и несколько других возможных проблем, которые приводят к тому, что обычно ночная сборка прерывается очень часто.

1 Ответ

4 голосов
/ 06 сентября 2011

Но как с этим справиться?

Это зависит от вашего приложения ... вам нужно делать то, что имеет смысл. Возможно, вам нужно сообщить пользователю, что данные были одновременно изменены, а затем повторно отправили новые (er) данные?

Хотя я не думаю, что отключение OptimisticLocking является правильным решением, я думаю, что установка этих двух свойств избавит от OLE, которые вы видите.

<properties>
  <property name="openjpa.Optimistic" value="false"/>
  <property name="openjpa.LockManager" value="none"/>
</properties>
...