Mercurial > hg > blitz_condensed
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; + } +}