2014-08-02 7 views
0

Я разрабатываю приложение Spring MVC, я выполнил основную функцию crud, но я хочу, чтобы моя операция update была потокобезопасной, поэтому один и только один человек может редактировать объект. Итак, я сделал механический подход, который основан на создании атрибута inUse, поэтому всякий раз, когда пользователь хочет отредактировать объект, атрибут inUse имеет значение 1, поэтому ни один другой пользователь не может редактировать этот объект. Ясно, что это не лучшая вещь, потому что я не могу знать, свободен ли ресурс или нет после редактирования! (Например, если пользователь нажмет на редактирование, затем закройте страницу, объект будет заблокирован неопределенно)Блокировка форм весной MVC

Могу ли я решить эту проблему, используя Spring Batch? есть ли лучший способ сделать это с помощью Spring MVC? Благодарю.

+0

Чтобы все было просто, вы можете использовать поле @Version в доменном слое: http://docs.oracle.com/javaee/6/api/javax/persistence/Version.html – gipinani

+0

Я вижу, что аннотация @Version позволяет предотвращать одновременную фиксацию транзакции в поле ... Но в моем случае я не хочу, чтобы пользователь получал доступ к форме (на самом деле форма длинная, это плохая идея, чтобы пользователь мог заполнить поля и только когда захочет чтобы применить изменения, которые он получил исключение! Я хочу этого избежать) – TheByeByeMan

+0

Я мог бы также использовать атрибуты изоляции Transactional. Проверьте справочную документацию, ** Serializable ** является наиболее полным, но имеет небольшую стоимость производительности. Таким образом, вы можете избежать объявления и использовать ** inUse ** переменная/поле –

ответ

0

Если ваши операции CRUD являются транзакциями, обновления будут безопасно сериализованы, и только один POST на ресурс будет обработан сразу. Вам не нужно будет контролировать многопоточность.

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

Смежные вопросы