2015-05-12 5 views
1

Сейчас у меня следующая ситуация:Возможность отката изменений, когда данные вставки с использованием API сервера

У меня есть создать клиентское Java приложение, которое используется для связи с базой данных MySQL непосредственно. Когда я вставлял много данных, я делал это с выключенным AutoCommit. Это было легко сделать, потому что у меня был прямой доступ к Connection. Я решил сделать это, потому что это позволило мне отменить изменения, когда что-то пошло не так во время синхронизации.

Теперь приложение развивается, и я подумал, что лучше построить API-интерфейс сервера, который связывается с базой данных MySQL. Итак, на данный момент я вставляю данные, выполняя запросы Http. Каждый запрос открывает и закрывает новый Connection.

Теперь я хотел бы иметь возможность отката изменений, когда один из запросов идет не так. Я предполагаю, что не могу работать с AutoCommit, потому что он основан на Connection, и каждый из них отличается для каждого запроса.

Может ли кто-нибудь сказать мне, как это делается обычно?

Я подумал следующее:

  • Первый вызов URL, который устанавливает AutoCommit к ложным, а затем делать все запросы и проверить, если один выходит из строя. Но это может пойти не так, если другой клиент также вставляет данные одновременно.
  • Отправка данных на сервер одним запросом, но это заставит меня радикально изменить мою конструкцию.

Примечание: я знаю, что при задании вопроса обычно требуется какой-то код, но я не вижу, как это улучшит мой вопрос. Однако, если это необходимо, не стесняйтесь просить об этом.

ответ

1

Каждый веб-запрос должен запускаться в собственной транзакции.

Отправляйте все данные, относящиеся к логической транзакции, в одном запросе и завершите фиксацию в конце обработки запроса.

Пространственные операции accros несколько веб-запросов - плохая идея. Подумайте о сбоях клиентов, которые никогда не совершают. Это оставит вас с открытыми транзакциями, которые никогда не закрываются.