Есть ли способ явно зафиксировать и откатить транзакцию после того, как несколько клиентов и серверов отправят - PullRequest
0 голосов
/ 17 июня 2011

Среда: Приложение использует Spring Framework 2.5.6.SEC01 и iBatis 2.3.4.726.Это MVC дизайн.

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

  1. Ввод / обновление данных с клиента
  2. Нажмите кнопку Обновить, чтобы отправить
  3. Обработка данных и выполнение DML (вставка, обновление, удаление)
  4. Возвращение результата клиенту и отображение данных
  5. Однако после загрузки страницы Мне нужнодля вызова API через Javascript (у меня нет контроля над API, просто нужно передать требуемый параметр и проверить результат, если SUCCESS или ERROR)
  6. Если API возвращает SUCCESS, ничего дляделать.Но он возвращает ОШИБКУ, я выдаю предупреждающее сообщение для информирования пользователя.

    У меня есть уровни доступа (клиент), службы и доступа к данным.Когда клиент выполняет отправку (сценарий № 2), он входит в Службу для обработки данных и автоматически запускает транзакцию (сценарий № 3).Автоматически выполнять фиксацию при выходе в Service и обратно к клиенту для отображения данных (сценарий № 4).

Проблема: Как приостановить транзакцию, чтобы невыполнить фиксацию, а затем вернуться к клиенту для вызова API через Javascript . Когда API возвращает SUCCESS, выполнить коммит через Ajax (или другим способом) или, с другой стороны, откатить его.

Любые указания в правильном направлении приветствуются.

1 Ответ

1 голос
/ 01 июля 2011

Если я правильно понимаю, вы хотите запустить транзакцию базы данных, вставить данные (без фиксации), оставить соединение и транзакцию открытыми, вернуться к клиенту и, основываясь на каком-то результате JavaScript, выполнить коммит.

Это похоже на странный дизайн, в котором клиент может фактически держать соединение открытым, что делает ваше приложение чрезвычайно уязвимым для (D) DOS-атак или проблем клиента в целом.

Я бы очень старался его переделатьследующим образом:

  1. После отправки вызовите javascript, необходимый для подтверждения действия фиксации / сохранения
  2. После успешного завершения javascript отправьте запрос на свой собственный сервер
  3. Выполняйте обычную обработку соединения / транзакции в DAO, не подвергая транзакции клиенту.

Это быстрее, надежнее и, возможно, меньше кода.

...