From 7b6843703f4a9dbe60e2196c4c10a94de58e466d Mon Sep 17 00:00:00 2001 From: Dominic Rogetzer Date: Fri, 18 May 2018 23:59:25 +0200 Subject: Use savepoint and rollback at EmployeeDatabaseDao.add [#25950] --- .../einsatzverwaltung/dao/EmployeeDatabaseDao.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java index 53adb45..40a9134 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java @@ -65,7 +65,10 @@ public class EmployeeDatabaseDao implements EmployeeDAO { public long add(Employee employee) throws PersistenceException { // Assumption: the given employee is already validated (from service) + Savepoint savepoint = null; try { + savepoint = connection.setSavepoint(); + connection.setAutoCommit(false); insertEmployeeVersion.setString(1, employee.name()); insertEmployeeVersion.setTimestamp( 2, Timestamp.valueOf(employee.birthday().atStartOfDay())); @@ -82,14 +85,28 @@ public class EmployeeDatabaseDao implements EmployeeDAO { ResultSet resultSetEmployee = insertEmployee.getGeneratedKeys(); if (resultSetEmployee.next()) { + connection.commit(); return resultSetEmployee.getLong(1); } } - throw new PersistenceException("Employee was not created"); + throw new PersistenceException("Employee was not updated"); } catch (SQLException e) { + try { + if (savepoint != null) { + connection.rollback(savepoint); + } + } catch (SQLException e1) { + throw new PersistenceException(e); + } throw new PersistenceException(e); + } finally { + try { + connection.setAutoCommit(true); + } catch (SQLException e) { + throw new PersistenceException(e); + } } } -- cgit v1.2.3-70-g09d2