Author: michiel
Date: 2009-09-14 17:34:02 +0200 (Mon, 14 Sep 2009)
New Revision: 38605

Modified:
   
mmbase/trunk/core/src/main/java/org/mmbase/storage/implementation/database/RelationalDatabaseStorageManager.java
Log:
the transaction must be rolled back not only on StorageExeption, but on any 
case where the 'local' transaction was not committed

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/storage/implementation/database/RelationalDatabaseStorageManager.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/storage/implementation/database/RelationalDatabaseStorageManager.java
    2009-09-14 15:32:30 UTC (rev 38604)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/storage/implementation/database/RelationalDatabaseStorageManager.java
    2009-09-14 15:34:02 UTC (rev 38605)
@@ -111,6 +111,7 @@
      */
     @Override public void delete(MMObjectNode node, MMObjectBuilder builder) 
throws StorageException {
         boolean localTransaction = !inTransaction;
+        boolean localTransactionCommitted = false;
         if (localTransaction) {
             beginTransaction();
         }
@@ -120,10 +121,17 @@
                 super.delete(node, builder);
                 builder = builder.getParentBuilder();
             } while (builder!=null);
-            if (localTransaction) commit();
-        } catch (StorageException se) {
-            if (localTransaction && inTransaction) rollback();
-            throw se;
+
+            if (localTransaction) {
+                commit();
+                localTransactionCommitted = true;
+            }
+        } finally {
+            if (localTransaction) {
+                if (! localTransactionCommitted) {
+                    rollback();
+                }
+            }
         }
     }
 

_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to