Откат транзакции после разрыва соединения с контроллером (т. Е. Время ожидания клиента истекло) - PullRequest
5 голосов
/ 11 сентября 2011

Изображение сцены;У меня есть мобильное приложение, которое снимает 20 долларов с управляемого сервера Spring и ждет подтверждения, прежде чем пометить его как завершенное в приложении.

Однако;

  1. Мобильное приложение отправляет запрос на вывод на сервер

  2. Контроллер получает запрос и вызывает уровень сервера, как обычно уровень обслуживания принимаетдолгое время для снятия денег (причина не важна).

  3. Время ожидания мобильного приложения (с SocketException) и запрос помещаются в очередь, пока он не сможет снова обратиться к приложению.

  4. Сервер завершает запрос от 1, но не знает, что время ожидания истекло у клиента.

Теперь у нас есть сценарий, в котором мобильное приложениесчитает, что 20 долларов не удалось, но сервер выполнил запрос.

Итак, вопросы;

• Может ли транзакция Spring откатиться, когда сокеты закрыты (т.е. когда мобильное приложение истекло время ожидания запроса)?

• Если нет - каков наилучший подход для достижения вышеуказанного?

Некоторая информация о сервере • Spring 3.1 • Контроллеры / службы / DAO на основе Spring.• Hibernate (JPA) • MYSQL Data store

Спасибо,

Ян.

1 Ответ

0 голосов
/ 19 сентября 2011

Может ли транзакция Spring откатиться, когда сокеты закрыты (т.е. когда мобильное приложение истекло время ожидания запроса)?

В настоящий момент я не могу представить, как это могло бы работать ...

Если нет - каков наилучший подход для достижения вышеуказанного?

Я бы решил проблему следующим образом:

  • мобильное приложение отправляет некоторый токен / UUID, который идентифицирует вывод
  • если время ожидания истекло, мобильное приложение помечает вывод как некое состояние «неизвестного результата», и вместо перепланирования мобильное приложение может запросить у сервера состояние с помощью токена
  • «неизвестный результат» должен быть действителен только в течение некоторого времени (например, 5 минут), в противном случае предположим, что снятие не сработало, и перенесите его
  • транзакция на сервере также должна иметь тайм-аут (и соответствовать времени «неизвестного результата»)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...