Постоянная транзакция в подходе клиент-сервер - PullRequest
0 голосов
/ 26 мая 2011

В моем приложении (клиент-сервер) мне нужно отредактировать некоторые строки (из базы данных), и пока они редактируются, никто не должен иметь возможность редактировать.Это делается транзакциями, конечно.Проблема заключается в том, что в клиентской среде транзакции управляются на стороне сервера, поэтому клиент, который редактирует строки, не может получить доступ к транзакции напрямую.(Я работаю с PHP в этой ситуации, но думаю, что тот же подход принят и в других технологиях).Поэтому мне нужно держать транзакцию открытой (для блокировки строк для редактирования), пока клиент не завершит редактирование.В PHP постоянное соединение не поможет, потому что они могут быть разорваны от других клиентов, расположенных на том же хосте с вышеупомянутым клиентом.У вас есть идеи для моего сценария?

спасибо.

1 Ответ

1 голос
/ 26 мая 2011

Обычно такие случаи обрабатываются с помощью бизнес-блокировок, которые вы устанавливаете непосредственно на объектах или на родительских объектах.

Добавьте столбец с таким «inedition», который вы установили в true, когда пользователь запрашивает редактирование, и в false, когда пользователь подтвердил / отменил его редактирование.

Помните, что транзакции некоторых пользователей могут быть потеряны до того, как вы разблокируете строку, поэтому вам, вероятно, потребуется:

  • либо периодическая обработка, которая разблокирует строки
  • функциональный экран, с которого пользователь или администратор может разблокировать оставшиеся заблокированными строки.

Edit: Такое решение используется всякий раз, когда вы не хотите полагаться на особые функции базы данных, например, Oracle «Выбрать для обновления». В Java EJB-компонент statefull может хранить ссылку на транзакцию из пользовательского интерфейса в базе данных. В зависимости от баз данных могут существовать решения, использующие PHP для Oracle или другие специфические функции базы данных, касающиеся транзакций.

...