diff src/org/dancres/blitz/txn/AbortCommand.java @ 0:3dc0c5604566

Initial checkin of blitz 2.0 fcs - no installer yet.
author Dan Creswell <dan.creswell@gmail.com>
date Sat, 21 Mar 2009 11:00:06 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/dancres/blitz/txn/AbortCommand.java	Sat Mar 21 11:00:06 2009 +0000
@@ -0,0 +1,54 @@
+package org.dancres.blitz.txn;
+
+import java.io.Serializable;
+
+import java.util.logging.Level;
+
+import net.jini.core.transaction.UnknownTransactionException;
+
+import org.prevayler.Command;
+import org.prevayler.PrevalentSystem;
+
+/**
+   Command to issue abort against transaction held in TxnManagerState
+ */
+class AbortCommand implements Command {
+    static final long serialVersionUID = 182858469530698187L;
+
+    private TxnId theId;
+
+    AbortCommand(TxnId anId) {
+        theId = anId;
+    }
+
+    public Serializable execute(PrevalentSystem aSystem) throws Exception {
+        TxnManagerState mySystem = (TxnManagerState) aSystem;
+
+        try {
+            mySystem.abort(theId);
+        } catch (UnknownTransactionException aUTE) {
+            /*
+              We may have logged the abort command whilst the transaction was
+              in active state which means there's no prior prepare command in
+              the log.  If we then run recovery, the first time we'll do
+              anything with the transaction is when we load and execute abort.
+              Because there's no prior prepare, we will have no state loaded
+              for the transaction. Thus, if we can't find the transaction it's
+              okay but we shouldn't take further action.
+
+              Of course, we could be asked to abort something we're
+              unaware of which can happen under various circumstances 
+              (including a buggy TxnMgr) but it's okay to swallow that silently.
+            */
+            TxnManager.theLogger.log(Level.FINE,
+                                     "Abort failed - transaction is missing",
+                                     aUTE);
+        }
+
+        return null;
+    }
+
+    public String toString() {
+        return " AB : " + theId;
+    }
+}