From 748398dba8c1cdd47e38407a5f11929352c9e70e Mon Sep 17 00:00:00 2001
From: Tharre <tharre3@gmail.com>
Date: Sun, 17 Jun 2018 01:48:10 +0200
Subject: Rollback in cases where we throw ourselves #27305

---
 .../groupphase/einsatzverwaltung/dao/EmployeeDatabaseDAO.java    | 9 +++++++--
 .../einsatzverwaltung/dao/RegistrationDatabaseDAO.java           | 4 +++-
 .../groupphase/einsatzverwaltung/dao/VehicleDatabaseDAO.java     | 9 +++++++--
 3 files changed, 17 insertions(+), 5 deletions(-)

(limited to 'src/main/java/at/ac/tuwien/sepm')

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 a58c8c7..1d8286b 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
@@ -62,7 +62,10 @@ public class EmployeeDatabaseDAO implements EmployeeDAO {
                 pstmt.executeUpdate();
 
                 try (ResultSet rs = pstmt.getGeneratedKeys()) {
-                    if (!rs.next()) throw new PersistenceException("Failed to insert Employee");
+                    if (!rs.next()) {
+                        con.rollback();
+                        throw new PersistenceException("Failed to insert Employee");
+                    }
 
                     con.commit();
                     return rs.getLong(1);
@@ -88,8 +91,10 @@ public class EmployeeDatabaseDAO implements EmployeeDAO {
                 pstmt.setLong(1, versionId);
                 pstmt.setLong(2, employee.id());
 
-                if (pstmt.executeUpdate() != 1)
+                if (pstmt.executeUpdate() != 1) {
+                    con.rollback();
                     throw new ElementNotFoundException("No such employeeId exists");
+                }
             }
 
             con.commit();
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAO.java
index ed458d6..6770942 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAO.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAO.java
@@ -66,8 +66,10 @@ public class RegistrationDatabaseDAO implements RegistrationDAO {
 
             try (PreparedStatement pstmt = con.prepareStatement(sql2)) {
                 pstmt.setLong(1, vehicleId);
-                if (pstmt.executeUpdate() != 1)
+                if (pstmt.executeUpdate() != 1) {
+                    con.rollback();
                     throw new PersistenceException("Failed to persist registration");
+                }
             }
 
             con.commit();
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDatabaseDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDatabaseDAO.java
index 3144288..fcae6d3 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDatabaseDAO.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDatabaseDAO.java
@@ -64,7 +64,10 @@ public class VehicleDatabaseDAO implements VehicleDAO {
                 pstmt.executeUpdate();
 
                 try (ResultSet rs = pstmt.getGeneratedKeys()) {
-                    if (!rs.next()) throw new PersistenceException("Failed to insert into Vehicle");
+                    if (!rs.next()) {
+                        con.rollback();
+                        throw new PersistenceException("Failed to insert into Vehicle");
+                    }
 
                     id = rs.getLong(1);
                 }
@@ -76,8 +79,10 @@ public class VehicleDatabaseDAO implements VehicleDAO {
                 pstmt.setString(1, name);
                 pstmt.setLong(2, version);
 
-                if (pstmt.executeUpdate() != 1)
+                if (pstmt.executeUpdate() != 1) {
+                    con.rollback();
                     throw new PersistenceException("Failed to update VehicleVersion");
+                }
             }
 
             con.commit();
-- 
cgit v1.2.3-70-g09d2