summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominic Rogetzer <e1627756@student.tuwien.ac.at>2018-05-18 23:59:25 +0200
committerTharre <tharre3@gmail.com>2018-05-22 17:05:32 +0200
commit7b6843703f4a9dbe60e2196c4c10a94de58e466d (patch)
tree767d30296b2877199a1f38f309f1ae4f6cda711f
parentd8671713dd99f6840663b9ddf95bc29f0aea71eb (diff)
downloadsepm-groupproject-7b6843703f4a9dbe60e2196c4c10a94de58e466d.tar.gz
sepm-groupproject-7b6843703f4a9dbe60e2196c4c10a94de58e466d.tar.xz
sepm-groupproject-7b6843703f4a9dbe60e2196c4c10a94de58e466d.zip
Use savepoint and rollback at EmployeeDatabaseDao.add [#25950]
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java19
1 files changed, 18 insertions, 1 deletions
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);
+ }
}
}