2013-06-05 1 views
1

Сегодня у меня возникла серьезная проблема с нашим платежным процессом.
После того как компенсация будет завершена, две вещи:Предотвращение одновременных транзакций БД в приложении play2.1

  • пользователь получает перенаправлены на успех-страницы на нашем сервере, редирект также присоединяет Payment ID
  • поставщик платежных отправляет уведомление об оплате в том числе и идентификатор платежа на наш сервер

Когда пользователь перенаправляется на страницу успеха, мы проверяем, существует ли платеж с идентификатором платежа. Если это не так, мы создаем платеж pending, который мы можем ему показать.

Когда провайдер платежных отправляет платежное извещение мы проверить, существует ли pending платежа с платежным ид и установить его в active, если платеж не существует, мы просто создать active один.

Вот и проблема: оба события могут (и были!) Происходить одновременно, так что обе процедуры не нашли существующий платеж и поэтому были созданы два платежа. Один pending и один active.

Есть ли хороший способ обойти это поведение, возможно, используя замки или что-то в этом роде? Я использую Ebean ORM по умолчанию в java-игре 2.1.0 с MySQL db.

ответ

1

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

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

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

+0

Спасибо за ваш совет. Я понимаю, что это не ошибка игры. Я просто хотел упомянуть о среде, в которой я работаю, поскольку я надеялся, что могут быть некоторые конкретные конфигурации/инструменты, которые могут помешать таким условиям гонки. Так что я думаю, что я буду реструктурировать свой код, чтобы отреагировать, если исключение sql выбрано для правильной работы в соответствующей процедуре. – Daniel

1

Я не знаю, отвечает ли это на ваш вопрос или нет, но here is a link на страницу транзакций Ebean.

+0

Спасибо! Я рассмотрю код игры, чтобы посмотреть, как обрабатываются транзакции, и как я могу справиться с ними с моего контроллера. – Daniel

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

  • Нет связанных вопросов^_^