jpa
.pdfТранзакционные характеристики
Целостность обновления
◦Изменения не могут быть зафиксированы, если изменяемые данные устарели
Надежность чтения
◦Все данные, считанные в течение транзакции, не устарели к моменту фиксации изменений
2-51
Целостность обновления
Пессимистичные блокировки
Реализация уровня изоляции повторных чтений
Оптимистичные проверки
модифицируемых объектов
Изоляция на основе упорядочивания
2-52
Надежность чтения
Пессимистичные блокировки
Оптимистичные проверки
читаемых объектов
Реализация изоляции на основе упорядочивания
2-53
Пессимистичные блокировки
Клиент получает эксклюзивное право на чтение записи
◦Уменьшает максимально допустимое количество обращений
Deadlock возможен, его избежание — забота разработчика
Не определены в JPA
2-54
Оптимистичные проверки
Имплицитно выполняются JPA на изменяемых объектах
◦Необходимо поле версии (@Version)
При изменении проверяется версия
◦Несоответствие версии ведет к откату транзакции
Из-за отсутствия блокировок возможно максимальное количество обращений
2-55
Аннотация @Version
int, short, long, Integer, Long, Short, java.sql.Timestamp
Поле не должно изменяться приложением
Без поля версии, пересекающиеся изменения не распознаются
2-56
Проверки в приложении
Некоторые приложения могут
декомпозировать сущности
◦Web-приложения посылают клиенту атрибуты
Приложение может производить
самостоятельный контроль
версий и посылать клиенту исключения
2-57
Явные блокировки в JPA
EntityManager предоставляет метод lock
◦public void lock(Object entity, LockModeType mode)
Сущность должна быть
управляемой
Транзакция должна быть
активна
2-58
Блокировки на чтение
Метод lock с LockTypeMode.READ
Две транзакции, запрашивающие блокировку на чтение на одну и ту же сущность, успешны, если:
◦Ни одна не изменяет сущность
◦Или реализация заставляет транзакцию сериализоваться
Для успешных транзакций чтение при использовании блокировки на чтение целостно
2-59
Блокировки на запись
Метод lock с LockTypeMode.WRITE
◦Приводит к запросу блокировки в БД или проверке версии при фиксации изменений
◦Требует изменения версии сущности
Две транзакции, запрашивающие блокировку на чтение на одну и ту же сущность, успешны, если:
◦Реализация требует сериализации транзакции
2-60