Я использую OpenJPA, и у меня проблема с блокировкой. Я уже понимаю, что такое OptimisticLockException и когда оно возникает.
Но как я могу справиться с этим?
Ниже* вы можете найти небольшой абзац об исключениях для оптимистичных блокировок.
В двух словах, как я могу полностью отключить диспетчер блокировки?
В моем файле persist.xml у меня есть следующий код xml, но он не работает. Почему ?
...
<properties>
<property name="openjpa.LockManager" value="none" />
</properties>
...
*Согласно викиучебникам о Java Persistent:
Обработка исключений оптимистичных блокировок
К сожалению, программисты часто могут быть слишком умными во вред себе. Первая проблема, возникающая при использовании оптимистической блокировки, заключается в том, что делать, когда возникает исключение OptimisticLockException. Типичный ответ дружелюбного соседского супер-программиста — автоматическая обработка исключения. Они просто создадут новую транзакцию, обновят объект, чтобы сбросить его версию, объединят данные обратно в объект и повторно зафиксируют его. Престо проблема решена или нет?
Это на самом деле лишает смысла блокировку. Если это то, что вы хотите, вы также можете не использовать блокировку. К сожалению, исключение OptimisticLockException редко должно обрабатываться автоматически, и вам действительно нужно беспокоить пользователя по поводу этой проблемы. Вы должны сообщить о конфликте пользователю и либо сказать: «Извините, но произошел конфликт редактирования, и им придется переделать свою работу», либо, в лучшем случае, обновить объект и представить пользователю текущие данные и данные, которые они представили, и помочь им объединить их, если это необходимо.
Некоторые инструменты автоматического слияния сравнивают две конфликтующие версии данных, и если ни одно из отдельных полей не конфликтует, данные просто автоматически объединяются без помощи пользователя. Это то, что делает большинство систем контроля версий программного обеспечения. К сожалению, пользователь, как правило, лучше может решить, когда что-то является конфликтом, чем программа, только потому, что две версии файла .java не изменили одну и ту же строку кода, не означает, что конфликта не было, первый пользователь мог удалить метод, на который другой пользователь добавил метод для ссылки, и несколько других возможных проблем, из-за которых обычно ночная сборка время от времени ломается.