From 7b6843703f4a9dbe60e2196c4c10a94de58e466d Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
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/at/ac')

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