У меня есть приложение для Android, которое выполняет синхронизацию нескольких данных с сервлетом Java, и мне нужно убедиться, что ответ передан на устройство Android, прежде чем вносить изменения в базу данных.
Проблема сейчас в том, что пользователь отправляет запрос, сервер вносит некоторые изменения, фиксирует их и затем отправляет ответ пользователю. Иногда пользователь никогда не получает ответ (ненадежная сеть), а затем через некоторое время пользователь снова отправляет тот же запрос (теперь у меня есть дублированные данные).
Мне не нужно знать, правильно ли обрабатывает ответ Android, мне просто нужно убедиться, что он получил ответ.
Как мне убедиться, что клиент получил ответ?
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String data = IOUtils.toString(request.getInputStream(), "UTF-8");
JSONObject dataJson = new JSONObject(data);
Transaction trx = new Transaction(true);
JSONObject responseJson = SyncService.processSync(trx, dataJson);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(responseJson.toString());
// Here the transaction to the database is commited regardless if the client receives response (no error thrown)
trx.commit();
trx.close();
}