Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

jpa

.pdf
Скачиваний:
12
Добавлен:
02.06.2015
Размер:
2 Мб
Скачать
☆

Транзакционные характеристики

Целостность обновления

◦Изменения не могут быть зафиксированы, если изменяемые данные устарели

Надежность чтения

◦Все данные, считанные в течение транзакции, не устарели к моменту фиксации изменений

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