JPA оптимистическая обработка версии блокировки - значение версии должно переноситься на клиентскую сторону или? - PullRequest
3 голосов
/ 05 января 2011

Мне интересно, как обрабатывать свойство версии оптимистической блокировки в классе сущностей с помощью JPA (основы toplink) от сервера к клиенту и наоборот.

Вот сценарий.

  1. От пользователя браузера отправьте запрос на сервер с просьбой отредактировать индивидуальную информацию о пользователе.

  2. Сервер обрабатывает запрос и возвращает результат в браузер.Код сервера выглядит примерно так:

    EntityManager em = EmProvider.getInstance (). GetEntityManagerFactory (). CreateEntityManager ();

    Пользователь u = (Пользователь) em.find (Пользователь.class,myUserId);

    вернуть тебя;// ответ обратно в браузер

Здесь я путаюсь с тем, что в таблице User есть столбец "version" для optimistic locking.

Это означает значение версииПоле также отправляется обратно клиенту, даже если клиент (я или кто-либо другой) никогда не будет использовать его .Поле версии должно использоваться в коде на стороне сервера.

Так правильно ли отправлять номер версии клиенту?Потому что иначе я не могу понять, как проверить номер версии в случае, если пользователь нажимает кнопку «ОБНОВИТЬ» на веб-странице с измененными данными.

Пожалуйста, дайте мне знать, если вам нужно больше разъяснений.

1 Ответ

5 голосов
/ 05 января 2011

Да, вы бы отправили номер версии клиенту, чтобы он позже мог отправить его обратно на сервер (вместе с изменениями, которые он хочет сделать для сущности), которые могут использовать его для проверки конфликтующих обновлений.

Как еще сервер узнает, какую версию проверять? (Можно также поместить номер в сеанс на стороне сервера, но это, в основном, вариация на ту же тему). Дело в том, что когда вы «извлекаете» версию для редактирования, вы переносите номер версии с этого момента времени.

Это означает, что значение поля версии также отправляется обратно клиенту, даже если клиент (я или кто-либо другой) никогда не будет его использовать.

Ну, вы можете использовать его на клиенте. Например, если операция редактирования занимает много времени, клиент может время от времени опрашивать, если объект был одновременно обновлен, и затем предупреждать пользователя об этом. (Аналогично сообщению «Новый ответ опубликован» здесь в Stackoverflow).

...