Можно ли использовать точки сохранения JDBC в Restful Webservices? - PullRequest
0 голосов
/ 13 июня 2019

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

  1. позволяет пользователям вносить некоторые изменения в свои данные
  2. отмените, если хотите
  3. наконец зафиксирует свои изменения

Чтобы реализовать это, я использовал точки сохранения JDBC и держал их в стеке, этот стек разрешает операции отмены. Я устанавливаю точку сохранения перед оператором обновления, при отмене я хочу, чтобы она откатилась до последней точки сохранения, а фиксация проста.

Сначала я проверил его в настольном приложении, и оно работало нормально, но здесь, в веб-приложении, оно не работает.

Класс соединения с базой данных

private static Map<String, Connection> userConnections;

public static Connection getConnection(configsJson) {
  ... //getdata from json
  if (userConnections == null) {
    userConnections = new HashMap<>();
  } else {
    userConnection = userConnections.get(userKey);
  }

  if (userConnection == null) {
    userConnection = DriverManager.getConnection("jdbc:oracle:thin:@" + sourceIP + ":" + sourcePort + ":" + sourceInstance, sourceUser, sourcePass);
    userConnection.setAutoCommit(false);
    userConnections.put(userKey, userConnection);
  }
  return userConnection;
}

Моя функция обновления

private static Map<String, Stack<Savepoint>> userSavePoints = new HashMap<>();

@ResponseBody
@RequestMapping(value = "/webservice/updateRecord", method = RequestMethod.POST)
public int updateRecord(HttpServletRequest request, @RequestParam String configs) throws SQLException, JSONException, ParseException {
    Connection con = DBService.getConnection(configJson);
    ...
    userSavePoints.get(userKey).push(con.setSavepoint());
    return statement.executeUpdate(sql);

}

Если здесь нет оператора точки сохранения, то после обновления я вижу измененные записи на моей веб-странице, эти записи еще не сохраняются в базе данных, поскольку для autocommit установлено значение false. Проблема в том, что с этим оператором точки сохранения сетка не показывает измененные записи. Что мне кажется, что записи не обновились или они автоматически откатились до этой точки сохранения.

Что-то не так с моей логикой? или эти точки сохранения не работают с успокоительным API?

1 Ответ

0 голосов
/ 13 июня 2019

Произошла глупая ошибка, в которую я даже не заглянул, эта строка возвращала ноль и не двигалась дальше.Консоль также не отображала никаких исключений.

userSavePoints.get (userKey)

Мне просто нужно было инициализировать это, чтобы решить мою проблему.

...