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
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs