Я разрабатываю HTTP-сервер, который обрабатывает транзакционные запросы от клиентов. Они будут связываться через крайне ненадежную беспроводную сеть, поэтому я беспокоюсь о согласованности данных на серверной БД. Вот как я обрабатываю POST
запросы:
void doPost(request, response)
{
transaction = newTransaction();
processBody(request);
transaction.commit();
}
Когда я никогда не получаю запрос, нет проблем. Клиент просто получает timeout error
, и транзакция не выполняется. Однако что произойдет, если ответ будет потерян в сети? Конечно, клиент все равно получит timeout error
, но на этот раз транзакция будет завершена на сервере, и клиент об этом не узнает! Это прискорбный случай, с которым мне нужно иметь дело.
Итак, мой вопрос: как определить, был ли получен ответ, и откатить транзакцию в противном случае?
Я кодирую свое серверное приложение с помощью JavaEE и размещаю его на Glassfish.