В моем веб-приложении есть сетка, в которой данные получены непосредственно из веб-сервиса с использованием jQuery API. Требование к
- позволяет пользователям вносить некоторые изменения в свои данные
- отмените, если хотите
- наконец зафиксирует свои изменения
Чтобы реализовать это, я использовал точки сохранения 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?