Я пытаюсь реализовать пессимистичную автономную блокировку, используя Spring и JPA / Hibernate. В моей базе данных есть таблица блокировок, в которой хранятся все блокировки (идентификатор заблокированной записи, отметка времени и пользователя). Интерфейс сервиса LockManager выглядит так:
public interface LockManager {
@Transactional(isolation=Isolation.SERIALIZABLE)
public Boolean TestAndGetLock(Application app, User user);
public void realeaseLock(Application app, User user);
}
Метод TestAndGetLock сначала проверяет, существует ли существующая блокировка записи. Если есть, он возвращает истину и завершается. Если его нет, он возвращает false и создает блокировку (записывает новую блокировку в таблицу блокировок). Только тогда веб-приложение фактически запускает бизнес-транзакцию (в этом случае она показывает форму редактирования для приложения, переданного в качестве параметра).
Не могли бы вы сказать, правильный ли этот дизайн?