[jboss-svn-commits] JBL Code SVN: r30060 - in labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats: internal/txoj/abstractrecords and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Nov 6 09:47:21 EST 2009
Author: mark.little at jboss.com
Date: 2009-11-06 09:47:21 -0500 (Fri, 06 Nov 2009)
New Revision: 30060
Added:
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockManager.java
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockRecord.java
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/LockRecord.java
Removed:
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/CadaverLockManager.java
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/CadaverLockRecord.java
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockRecord.java
Modified:
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/Implementations.java
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockManager.java
Log:
https://jira.jboss.org/jira/browse/JBTM-639
Modified: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/Implementations.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/Implementations.java 2009-11-06 14:18:39 UTC (rev 30059)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/Implementations.java 2009-11-06 14:47:21 UTC (rev 30060)
@@ -34,7 +34,7 @@
import com.arjuna.ats.arjuna.coordinator.RecordType;
import com.arjuna.ats.arjuna.coordinator.abstractrecord.RecordTypeManager;
import com.arjuna.ats.arjuna.coordinator.abstractrecord.RecordTypeMap;
-import com.arjuna.ats.txoj.LockRecord;
+import com.arjuna.ats.internal.txoj.abstractrecords.LockRecord;
/**
* Module specific class that is responsible for adding any implementations to
Copied: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockManager.java (from rev 30034, labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/CadaverLockManager.java)
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockManager.java (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockManager.java 2009-11-06 14:47:21 UTC (rev 30060)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (C) 1998, 1999, 2000,
+ *
+ * Arjuna Solutions Limited,
+ * Newcastle upon Tyne,
+ * Tyne and Wear,
+ * UK.
+ *
+ * $Id: CadaverLockManager.java 2342 2006-03-30 13:06:17Z $
+ */
+
+package com.arjuna.ats.internal.txoj.abstractrecords;
+
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.state.*;
+
+import com.arjuna.ats.txoj.LockManager;
+import com.arjuna.ats.txoj.logging.txojLogger;
+import com.arjuna.ats.txoj.logging.FacilityCode;
+
+import com.arjuna.common.util.logging.*;
+
+/*
+ *
+ * Lock concurrency controller
+ *
+ * Lock-base concurrency control management system
+ * Instances of this class are created by CadaverLockRecord class
+ * instances for the sole purpose of lock cleanup due to a locked
+ * object going out of scope prior to action termination.
+ * Serialisability prevents locks being released as scope is exited
+ * thus they must be cleaned up later.
+ *
+ */
+
+class CadaverLockManager extends LockManager
+{
+
+ public CadaverLockManager(Uid objUid, String tName)
+ {
+ super(objUid);
+
+ objectTypeName = new String(tName);
+
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.CONSTRUCTORS,
+ VisibilityLevel.VIS_PUBLIC,
+ FacilityCode.FAC_CONCURRENCY_CONTROL,
+ "CadaverLockManager::CadaverLockManager(" + objUid + ")");
+ }
+ }
+
+ /*
+ * Publically inherited functions
+ */
+
+ public boolean restore_state (InputObjectState os, int t)
+ {
+ return false;
+ }
+
+ public boolean save_state (OutputObjectState os, int t)
+ {
+ return false;
+ }
+
+ public String type ()
+ {
+ return objectTypeName;
+ }
+
+ private String objectTypeName;
+
+}
Copied: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockRecord.java (from rev 30034, labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/CadaverLockRecord.java)
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockRecord.java (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/CadaverLockRecord.java 2009-11-06 14:47:21 UTC (rev 30060)
@@ -0,0 +1,284 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (C) 1998, 1999, 2000, 2001,
+ *
+ * Arjuna Solutions Limited,
+ * Newcastle upon Tyne,
+ * Tyne and Wear,
+ * UK.
+ *
+ * $Id: CadaverLockRecord.java 2342 2006-03-30 13:06:17Z $
+ */
+
+package com.arjuna.ats.internal.txoj.abstractrecords;
+
+import com.arjuna.ats.arjuna.coordinator.AbstractRecord;
+import com.arjuna.ats.arjuna.*;
+import com.arjuna.ats.arjuna.coordinator.*;
+import com.arjuna.ats.arjuna.common.Uid;
+
+import com.arjuna.ats.txoj.LockManager;
+import com.arjuna.ats.txoj.logging.txojLogger;
+import com.arjuna.ats.txoj.logging.FacilityCode;
+
+import com.arjuna.common.util.logging.*;
+
+import com.arjuna.ats.txoj.lockstore.*;
+import java.io.PrintWriter;
+
+import com.arjuna.ats.arjuna.exceptions.FatalError;
+
+/**
+ * @message com.arjuna.ats.txoj.CadaverLockRecord_1 [com.arjuna.ats.txoj.CadaverLockRecord_1] - CadaverLockRecord::nestedAbort - no Current!
+ * @message com.arjuna.ats.txoj.CadaverLockRecord_2 [com.arjuna.ats.txoj.CadaverLockRecord_2] - CadaverLockRecord::nestedCommit - no Current!
+ * @message com.arjuna.ats.txoj.CadaverLockRecord_3 [com.arjuna.ats.txoj.CadaverLockRecord_3] - CadaverLockRecord::topLevelAbort - no Current!
+ * @message com.arjuna.ats.txoj.CadaverLockRecord_4 [com.arjuna.ats.txoj.CadaverLockRecord_4] - CadaverLockRecord::topLevelCommit - no Current!
+ */
+
+/*
+ *
+ * Cadaver Lock Record Class Implementation
+ *
+ * Instances of this record class are created by LockManager if the
+ * object goes out of scope prior to the end of a manipulating action.
+ * The intention is that the operations of this class will clean up
+ * those locks that get left set as the object goes out of scope but
+ * which must remain held until the action ends otherwise serialisability
+ * is compromised
+ *
+ */
+
+public class CadaverLockRecord extends LockRecord
+{
+
+ public CadaverLockRecord (LockStore store, LockManager lm, BasicAction currAct)
+ {
+ super(lm, currAct);
+
+ cadaverLockStore = store;
+ objectTypeName = new String(lm.type());
+
+ if (super.objectModel == ObjectModel.SINGLE)
+ {
+ doRelease = false;
+ }
+ else
+ doRelease = true;
+
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.CONSTRUCTORS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "CadaverLockRecord::CadaverLockRecord("+store+
+ ", "+((lm != null) ? lm.get_uid() : Uid.nullUid())+")");
+ }
+ }
+
+ /*
+ * Public virtual functions. These are all re-implementations of inherited
+ * functions
+ */
+
+ public boolean propagateOnAbort ()
+ {
+ return true;
+ }
+
+ /*
+ * Atomic action controlled functions. These functions create an instance
+ * of CadaverLockManager to handle the lock manipulation that is needed and
+ * then throw it away when done.
+ */
+
+ public int nestedAbort ()
+ {
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "CadaverLockRecord::nestedAbort() for "+order());
+ }
+
+ if (doRelease)
+ {
+ CadaverLockManager manager = new CadaverLockManager(order(), objectTypeName);
+
+ if (super.actionHandle == null)
+ {
+ if (txojLogger.aitLoggerI18N.isFatalEnabled())
+ {
+ txojLogger.aitLoggerI18N.fatal("CadaverLockRecord_1");
+ }
+
+ throw new FatalError(txojLogger.log_mesg.getString("com.arjuna.ats.txoj.CadaverLockRecord_1"));
+ }
+
+ return (manager.releaseAll(super.actionHandle.get_uid()) ? TwoPhaseOutcome.FINISH_OK : TwoPhaseOutcome.FINISH_ERROR);
+ }
+ else
+ return TwoPhaseOutcome.FINISH_OK;
+ }
+
+ public int nestedCommit ()
+ {
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "CadaverLockRecord::nestedCommit() for "+order());
+ }
+
+ if (doRelease)
+ {
+ /*
+ * Need to change the owner of the locks from the current
+ * committing action to its parent. Since no genuine LockManager
+ * exists at this time create one to take care of this.
+ */
+
+ if (super.actionHandle == null)
+ {
+ if (txojLogger.aitLoggerI18N.isFatalEnabled())
+ {
+ txojLogger.aitLoggerI18N.fatal("com.arjuna.ats.txoj.CadaverLockRecord_2");
+ }
+
+ throw new FatalError(txojLogger.log_mesg.getString("com.arjuna.ats.txoj.CadaverLockRecord_2"));
+ }
+
+ CadaverLockManager manager = new CadaverLockManager(order(), objectTypeName);
+
+ return (manager.propagate(super.actionHandle.get_uid(), super.actionHandle.parent().get_uid()) ? TwoPhaseOutcome.FINISH_OK : TwoPhaseOutcome.FINISH_ERROR);
+ }
+ else
+ return TwoPhaseOutcome.FINISH_OK;
+ }
+
+ public int topLevelAbort ()
+ {
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "CadaverLockRecord::topLevelAbort() for "+order());
+ }
+
+ if (doRelease)
+ {
+ if (super.actionHandle == null)
+ {
+ if (txojLogger.aitLoggerI18N.isFatalEnabled())
+ {
+ txojLogger.aitLoggerI18N.fatal("com.arjuna.ats.txoj.CadaverLockRecord_3");
+ }
+
+ throw new FatalError(txojLogger.log_mesg.getString("com.arjuna.ats.txoj.CadaverLockRecord_3"));
+ }
+
+ CadaverLockManager manager = new CadaverLockManager(order(), objectTypeName);
+
+ return (manager.releaseAll(super.actionHandle.get_uid()) ? TwoPhaseOutcome.FINISH_OK : TwoPhaseOutcome.FINISH_ERROR);
+ }
+ else
+ return TwoPhaseOutcome.FINISH_OK;
+ }
+
+ public int topLevelCommit ()
+ {
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "CadaverLockRecord::topLevelCommit() for "+order());
+ }
+
+ if (doRelease)
+ {
+ if (super.actionHandle == null)
+ {
+ if (txojLogger.aitLoggerI18N.isFatalEnabled())
+ {
+ txojLogger.aitLoggerI18N.fatal("com.arjuna.ats.txoj.CadaverLockRecord_4");
+ }
+
+ throw new FatalError(txojLogger.log_mesg.getString("com.arjuna.ats.txoj.CadaverLockRecord_4"));
+ }
+
+ CadaverLockManager manager = new CadaverLockManager(order(), objectTypeName);
+
+ return (manager.releaseAll(super.actionHandle.get_uid()) ? TwoPhaseOutcome.FINISH_OK : TwoPhaseOutcome.FINISH_ERROR);
+ }
+ else
+ return TwoPhaseOutcome.FINISH_OK;
+ }
+
+ public void print (PrintWriter strm)
+ {
+ strm.println("CadaverLockRecord : ");
+ super.print(strm);
+ }
+
+ public String type ()
+ {
+ return "/StateManager/AbstractRecord/LockRecord/CadaverLockRecord";
+ }
+
+ public boolean shouldReplace (AbstractRecord ar)
+ {
+ return (((order().equals(ar.order())) &&
+ ar.typeIs() == RecordType.LOCK ) ? true : false);
+ }
+
+ /*
+ * Already determined that ar is a LockRecord, otherwise replace would
+ * not have been called.
+ * So, get the type from it before it is deleted!
+ */
+
+ public void replace (AbstractRecord ar)
+ {
+ LockRecord lr = (LockRecord) ar;
+
+ objectTypeName = lr.lockType();
+ }
+
+ protected CadaverLockRecord ()
+ {
+ super();
+
+ cadaverLockStore = null;
+ objectTypeName = null;
+ doRelease = false;
+
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.CONSTRUCTORS, VisibilityLevel.VIS_PROTECTED,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "CadaverLockRecord::CadaverLockRecord ()");
+ }
+ }
+
+ private LockStore cadaverLockStore;
+ private String objectTypeName;
+ private boolean doRelease;
+
+}
Copied: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/LockRecord.java (from rev 30034, labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockRecord.java)
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/LockRecord.java (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/internal/txoj/abstractrecords/LockRecord.java 2009-11-06 14:47:21 UTC (rev 30060)
@@ -0,0 +1,371 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (C) 1998, 1999, 2000,
+ *
+ * Arjuna Solutions Limited,
+ * Newcastle upon Tyne,
+ * Tyne and Wear,
+ * UK.
+ *
+ * $Id: LockRecord.java 2342 2006-03-30 13:06:17Z $
+ */
+
+package com.arjuna.ats.internal.txoj.abstractrecords;
+
+import com.arjuna.ats.arjuna.coordinator.AbstractRecord;
+import com.arjuna.ats.arjuna.ObjectType;
+import com.arjuna.ats.arjuna.state.*;
+import com.arjuna.ats.arjuna.common.Uid;
+
+import com.arjuna.ats.txoj.LockManager;
+import com.arjuna.ats.txoj.logging.txojLogger;
+import com.arjuna.ats.txoj.logging.FacilityCode;
+
+import com.arjuna.common.util.logging.*;
+
+import com.arjuna.ats.arjuna.coordinator.*;
+import java.io.*;
+
+/**
+ * @message com.arjuna.ats.txoj.LockRecord_1 [com.arjuna.ats.txoj.LockRecord_1] - LockRecord::set_value() called illegally
+ * @message com.arjuna.ats.txoj.LockRecord_2 [com.arjuna.ats.txoj.LockRecord_2] - LockRecord - release failed for action {0}
+ * @message com.arjuna.ats.txoj.LockRecord_3 [com.arjuna.ats.txoj.LockRecord_3] - LockRecord::nestedAbort - no current action
+ * @message com.arjuna.ats.txoj.LockRecord_4 [com.arjuna.ats.txoj.LockRecord_4] - LockRecord::nestedCommit - no current action
+ * @message com.arjuna.ats.txoj.LockRecord_5 [com.arjuna.ats.txoj.LockRecord_5] - LockRecord - release failed for action {0}
+ * @message com.arjuna.ats.txoj.LockRecord_6 [com.arjuna.ats.txoj.LockRecord_6] - LockRecord::topLevelCommit - no current action
+ * @message com.arjuna.ats.txoj.LockRecord_7 [com.arjuna.ats.txoj.LockRecord_7] - Invocation of LockRecord::restore_state for {0} inappropriate - ignored for {1}
+ */
+
+public class LockRecord extends AbstractRecord
+{
+
+ public LockRecord (LockManager lm, BasicAction currAct)
+ {
+ super(lm.get_uid(), lm.type(), ObjectType.ANDPERSISTENT);
+
+ actionHandle = currAct;
+
+ managerAddress = lm;
+ readOnly = false;
+ managerType = lm.type();
+ }
+
+ public LockRecord (LockManager lm, boolean rdOnly, BasicAction currAct)
+ {
+ super(lm.get_uid(), lm.type(), ObjectType.ANDPERSISTENT);
+
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.CONSTRUCTORS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "LockRecord::LockRecord("+lm.get_uid()+", "
+ +(readOnly ? "PREPARE_READONLY" : "WRITEABLE")+")");
+ }
+
+ actionHandle = currAct;
+
+ managerAddress = lm;
+ readOnly = rdOnly;
+ managerType = lm.type();
+ }
+
+ public int typeIs ()
+ {
+ return RecordType.LOCK;
+ }
+
+ public Object value ()
+ {
+ return (Object) managerAddress;
+ }
+
+ public void setValue (Object o)
+ {
+ if (txojLogger.aitLoggerI18N.isWarnEnabled())
+ txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_1");
+ }
+
+ public int nestedAbort ()
+ {
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "LockRecord::nestedAbort() for "+order());
+ }
+
+ /* default constructor problem. */
+
+ if (managerAddress == null)
+ return TwoPhaseOutcome.FINISH_ERROR;
+
+ if (actionHandle != null)
+ {
+ Uid toRelease = actionHandle.get_uid();
+
+ actionHandle = actionHandle.parent();
+
+ if (!managerAddress.releaseAll(toRelease))
+ {
+ if (txojLogger.aitLoggerI18N.isWarnEnabled())
+ {
+ txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_2",
+ new Object[]{toRelease});
+ }
+
+ return TwoPhaseOutcome.FINISH_ERROR;
+ }
+ }
+ else
+ if (txojLogger.aitLoggerI18N.isWarnEnabled())
+ txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_3");
+
+ return TwoPhaseOutcome.FINISH_OK;
+ }
+
+ public int nestedCommit ()
+ {
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "LockRecord::nestedCommit() for "+order());
+ }
+
+ /* default constructor problem. */
+
+ if (managerAddress == null)
+ return TwoPhaseOutcome.FINISH_ERROR;
+
+ if (actionHandle != null)
+ {
+ Uid toRelease = actionHandle.get_uid();
+
+ actionHandle = actionHandle.parent();
+
+ return (managerAddress.propagate(toRelease, actionHandle.get_uid()) ? TwoPhaseOutcome.FINISH_OK : TwoPhaseOutcome.FINISH_ERROR);
+ }
+ else
+ {
+ if (txojLogger.aitLoggerI18N.isWarnEnabled())
+ txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_4");
+ }
+
+ return TwoPhaseOutcome.FINISH_ERROR;
+ }
+
+ public int nestedPrepare ()
+ {
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "LockRecord::nestedPrepare() for "+order());
+ }
+
+ return TwoPhaseOutcome.PREPARE_OK;
+ }
+
+ public int topLevelAbort ()
+ {
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "LockRecord::topLevelAbort() for "+order());
+ }
+
+ return nestedAbort();
+ }
+
+ public int topLevelCommit ()
+ {
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "LockRecord::topLevelCommit() for "+order());
+ }
+
+ /* default constructor problem. */
+
+ if (managerAddress == null)
+ return TwoPhaseOutcome.FINISH_ERROR;
+
+ if (actionHandle != null)
+ {
+ if (!managerAddress.releaseAll(actionHandle.get_uid()))
+ {
+ if (txojLogger.aitLoggerI18N.isWarnEnabled())
+ {
+ txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_5",
+ new Object[]{actionHandle.get_uid()});
+ }
+
+ return TwoPhaseOutcome.FINISH_ERROR;
+ }
+ }
+ else
+ {
+ if (txojLogger.aitLoggerI18N.isWarnEnabled())
+ txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_6");
+
+ return TwoPhaseOutcome.FINISH_ERROR;
+ }
+
+ return TwoPhaseOutcome.FINISH_OK;
+ }
+
+ public int topLevelPrepare ()
+ {
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "LockRecord::topLevelPrepare() for "+order());
+ }
+
+ if (readOnly)
+ {
+ if (topLevelCommit() == TwoPhaseOutcome.FINISH_OK)
+ return TwoPhaseOutcome.PREPARE_READONLY;
+ else
+ return TwoPhaseOutcome.PREPARE_NOTOK;
+ }
+
+ return TwoPhaseOutcome.PREPARE_OK;
+ }
+
+ public String toString ()
+ {
+ StringWriter strm = new StringWriter();
+
+ print(new PrintWriter(strm));
+
+ return strm.toString();
+ }
+
+ public void print (PrintWriter strm)
+ {
+ super.print(strm);
+ strm.println("LockRecord");
+ }
+
+ /*
+ * restore_state and save_state for LockRecords doesn't generally
+ * apply due to object pointers.
+ */
+
+ public boolean restore_state (InputObjectState o, int t)
+ {
+ if (txojLogger.aitLoggerI18N.isWarnEnabled())
+ {
+ txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_7",
+ new Object[]{type(), order()});
+ }
+
+ return false;
+ }
+
+ public boolean save_state (OutputObjectState o, int t)
+ {
+ return true;
+ }
+
+ public String type ()
+ {
+ return "/StateManager/AbstractRecord/LockRecord";
+ }
+
+ public final boolean isReadOnly ()
+ {
+ return readOnly;
+ }
+
+ public final String lockType ()
+ {
+ return managerType;
+ }
+
+ public void merge (AbstractRecord a)
+ {
+ }
+
+ public void alter (AbstractRecord a)
+ {
+ }
+
+ public boolean shouldAdd (AbstractRecord a)
+ {
+ return false;
+ }
+
+ public boolean shouldAlter (AbstractRecord a)
+ {
+ return false;
+ }
+
+ public boolean shouldMerge (AbstractRecord a)
+ {
+ return false;
+ }
+
+ public boolean shouldReplace (AbstractRecord ar)
+ {
+ if ((order().equals(ar.order())) && typeIs() == ar.typeIs())
+ {
+ /*
+ * The first test should ensure that ar is a LockRecord.
+ */
+
+ if (((LockRecord) ar).isReadOnly() && !readOnly)
+ return true;
+ }
+
+ return false;
+ }
+
+ public LockRecord ()
+ {
+ super();
+
+ if (txojLogger.aitLogger.isDebugEnabled())
+ {
+ txojLogger.aitLogger.debug(DebugLevel.CONSTRUCTORS, VisibilityLevel.VIS_PROTECTED,
+ (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
+ "LockRecord::LockRecord()");
+ }
+
+ actionHandle = null;
+
+ managerAddress = null;
+ readOnly = false;
+ managerType = null;
+ }
+
+ protected BasicAction actionHandle; // must be changed if we propagate
+
+ private LockManager managerAddress;
+ private boolean readOnly;
+ private String managerType;
+
+}
Deleted: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/CadaverLockManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/CadaverLockManager.java 2009-11-06 14:18:39 UTC (rev 30059)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/CadaverLockManager.java 2009-11-06 14:47:21 UTC (rev 30060)
@@ -1,96 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags.
- * See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License, v. 2.1.
- * This program is distributed in the hope that it will be useful, but WITHOUT A
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
- * You should have received a copy of the GNU Lesser General Public License,
- * v.2.1 along with this distribution; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- *
- * (C) 2005-2006,
- * @author JBoss Inc.
- */
-/*
- * Copyright (C) 1998, 1999, 2000,
- *
- * Arjuna Solutions Limited,
- * Newcastle upon Tyne,
- * Tyne and Wear,
- * UK.
- *
- * $Id: CadaverLockManager.java 2342 2006-03-30 13:06:17Z $
- */
-
-package com.arjuna.ats.txoj;
-
-import com.arjuna.ats.arjuna.coordinator.AbstractRecord;
-import com.arjuna.ats.arjuna.*;
-import com.arjuna.ats.arjuna.common.Uid;
-import com.arjuna.ats.arjuna.state.*;
-import com.arjuna.ats.txoj.common.*;
-
-import com.arjuna.ats.txoj.logging.txojLogger;
-import com.arjuna.ats.txoj.logging.FacilityCode;
-
-import com.arjuna.common.util.logging.*;
-
-/*
- *
- * Lock concurrency controller
- *
- * Lock-base concurrency control management system
- * Instances of this class are created by CadaverLockRecord class
- * instances for the sole purpose of lock cleanup due to a locked
- * object going out of scope prior to action termination.
- * Serialisability prevents locks being released as scope is exited
- * thus they must be cleaned up later.
- *
- */
-
-class CadaverLockManager extends LockManager
-{
-
-public CadaverLockManager (Uid objUid, String tName)
- {
- super(objUid);
-
- objectTypeName = new String(tName);
-
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.CONSTRUCTORS, VisibilityLevel.VIS_PUBLIC,
- FacilityCode.FAC_CONCURRENCY_CONTROL,
- "CadaverLockManager::CadaverLockManager("+objUid+")");
- }
- }
-
- /*
- * Publically inherited functions
- */
-
-public boolean restore_state (InputObjectState os, int t)
- {
- return false;
- }
-
-public boolean save_state (OutputObjectState os, int t)
- {
- return false;
- }
-
-public String type ()
- {
- return objectTypeName;
- }
-
-private String objectTypeName;
-
-}
Deleted: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/CadaverLockRecord.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/CadaverLockRecord.java 2009-11-06 14:18:39 UTC (rev 30059)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/CadaverLockRecord.java 2009-11-06 14:47:21 UTC (rev 30060)
@@ -1,284 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags.
- * See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License, v. 2.1.
- * This program is distributed in the hope that it will be useful, but WITHOUT A
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
- * You should have received a copy of the GNU Lesser General Public License,
- * v.2.1 along with this distribution; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- *
- * (C) 2005-2006,
- * @author JBoss Inc.
- */
-/*
- * Copyright (C) 1998, 1999, 2000, 2001,
- *
- * Arjuna Solutions Limited,
- * Newcastle upon Tyne,
- * Tyne and Wear,
- * UK.
- *
- * $Id: CadaverLockRecord.java 2342 2006-03-30 13:06:17Z $
- */
-
-package com.arjuna.ats.txoj;
-
-import com.arjuna.ats.arjuna.coordinator.AbstractRecord;
-import com.arjuna.ats.arjuna.*;
-import com.arjuna.ats.arjuna.coordinator.*;
-import com.arjuna.ats.arjuna.common.Uid;
-
-import com.arjuna.ats.txoj.logging.txojLogger;
-import com.arjuna.ats.txoj.logging.FacilityCode;
-
-import com.arjuna.common.util.logging.*;
-
-import com.arjuna.ats.txoj.common.*;
-import com.arjuna.ats.txoj.lockstore.*;
-import java.io.PrintWriter;
-
-import com.arjuna.ats.arjuna.exceptions.FatalError;
-
-/**
- * @message com.arjuna.ats.txoj.CadaverLockRecord_1 [com.arjuna.ats.txoj.CadaverLockRecord_1] - CadaverLockRecord::nestedAbort - no Current!
- * @message com.arjuna.ats.txoj.CadaverLockRecord_2 [com.arjuna.ats.txoj.CadaverLockRecord_2] - CadaverLockRecord::nestedCommit - no Current!
- * @message com.arjuna.ats.txoj.CadaverLockRecord_3 [com.arjuna.ats.txoj.CadaverLockRecord_3] - CadaverLockRecord::topLevelAbort - no Current!
- * @message com.arjuna.ats.txoj.CadaverLockRecord_4 [com.arjuna.ats.txoj.CadaverLockRecord_4] - CadaverLockRecord::topLevelCommit - no Current!
- */
-
-/*
- *
- * Cadaver Lock Record Class Implementation
- *
- * Instances of this record class are created by LockManager if the
- * object goes out of scope prior to the end of a manipulating action.
- * The intention is that the operations of this class will clean up
- * those locks that get left set as the object goes out of scope but
- * which must remain held until the action ends otherwise serialisability
- * is compromised
- *
- */
-
-class CadaverLockRecord extends LockRecord
-{
-
- public CadaverLockRecord (LockStore store, LockManager lm, BasicAction currAct)
- {
- super(lm, currAct);
-
- cadaverLockStore = store;
- objectTypeName = new String(lm.type());
-
- if (super.objectModel == ObjectModel.SINGLE)
- {
- doRelease = false;
- }
- else
- doRelease = true;
-
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.CONSTRUCTORS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "CadaverLockRecord::CadaverLockRecord("+store+
- ", "+((lm != null) ? lm.get_uid() : Uid.nullUid())+")");
- }
- }
-
- /*
- * Public virtual functions. These are all re-implementations of inherited
- * functions
- */
-
- public boolean propagateOnAbort ()
- {
- return true;
- }
-
- /*
- * Atomic action controlled functions. These functions create an instance
- * of CadaverLockManager to handle the lock manipulation that is needed and
- * then throw it away when done.
- */
-
- public int nestedAbort ()
- {
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "CadaverLockRecord::nestedAbort() for "+order());
- }
-
- if (doRelease)
- {
- CadaverLockManager manager = new CadaverLockManager(order(), objectTypeName);
-
- if (super.actionHandle == null)
- {
- if (txojLogger.aitLoggerI18N.isFatalEnabled())
- {
- txojLogger.aitLoggerI18N.fatal("CadaverLockRecord_1");
- }
-
- throw new FatalError(txojLogger.log_mesg.getString("com.arjuna.ats.txoj.CadaverLockRecord_1"));
- }
-
- return (manager.releaseAll(super.actionHandle.get_uid()) ? TwoPhaseOutcome.FINISH_OK : TwoPhaseOutcome.FINISH_ERROR);
- }
- else
- return TwoPhaseOutcome.FINISH_OK;
- }
-
- public int nestedCommit ()
- {
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "CadaverLockRecord::nestedCommit() for "+order());
- }
-
- if (doRelease)
- {
- /*
- * Need to change the owner of the locks from the current
- * committing action to its parent. Since no genuine LockManager
- * exists at this time create one to take care of this.
- */
-
- if (super.actionHandle == null)
- {
- if (txojLogger.aitLoggerI18N.isFatalEnabled())
- {
- txojLogger.aitLoggerI18N.fatal("com.arjuna.ats.txoj.CadaverLockRecord_2");
- }
-
- throw new FatalError(txojLogger.log_mesg.getString("com.arjuna.ats.txoj.CadaverLockRecord_2"));
- }
-
- CadaverLockManager manager = new CadaverLockManager(order(), objectTypeName);
-
- return (manager.propagate(super.actionHandle.get_uid(), super.actionHandle.parent().get_uid()) ? TwoPhaseOutcome.FINISH_OK : TwoPhaseOutcome.FINISH_ERROR);
- }
- else
- return TwoPhaseOutcome.FINISH_OK;
- }
-
- public int topLevelAbort ()
- {
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "CadaverLockRecord::topLevelAbort() for "+order());
- }
-
- if (doRelease)
- {
- if (super.actionHandle == null)
- {
- if (txojLogger.aitLoggerI18N.isFatalEnabled())
- {
- txojLogger.aitLoggerI18N.fatal("com.arjuna.ats.txoj.CadaverLockRecord_3");
- }
-
- throw new FatalError(txojLogger.log_mesg.getString("com.arjuna.ats.txoj.CadaverLockRecord_3"));
- }
-
- CadaverLockManager manager = new CadaverLockManager(order(), objectTypeName);
-
- return (manager.releaseAll(super.actionHandle.get_uid()) ? TwoPhaseOutcome.FINISH_OK : TwoPhaseOutcome.FINISH_ERROR);
- }
- else
- return TwoPhaseOutcome.FINISH_OK;
- }
-
- public int topLevelCommit ()
- {
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "CadaverLockRecord::topLevelCommit() for "+order());
- }
-
- if (doRelease)
- {
- if (super.actionHandle == null)
- {
- if (txojLogger.aitLoggerI18N.isFatalEnabled())
- {
- txojLogger.aitLoggerI18N.fatal("com.arjuna.ats.txoj.CadaverLockRecord_4");
- }
-
- throw new FatalError(txojLogger.log_mesg.getString("com.arjuna.ats.txoj.CadaverLockRecord_4"));
- }
-
- CadaverLockManager manager = new CadaverLockManager(order(), objectTypeName);
-
- return (manager.releaseAll(super.actionHandle.get_uid()) ? TwoPhaseOutcome.FINISH_OK : TwoPhaseOutcome.FINISH_ERROR);
- }
- else
- return TwoPhaseOutcome.FINISH_OK;
- }
-
- public void print (PrintWriter strm)
- {
- strm.println("CadaverLockRecord : ");
- super.print(strm);
- }
-
- public String type ()
- {
- return "/StateManager/AbstractRecord/LockRecord/CadaverLockRecord";
- }
-
- public boolean shouldReplace (AbstractRecord ar)
- {
- return (((order().equals(ar.order())) &&
- ar.typeIs() == RecordType.LOCK ) ? true : false);
- }
-
- /*
- * Already determined that ar is a LockRecord, otherwise replace would
- * not have been called.
- * So, get the type from it before it is deleted!
- */
-
- public void replace (AbstractRecord ar)
- {
- LockRecord lr = (LockRecord) ar;
-
- objectTypeName = lr.lockType();
- }
-
- protected CadaverLockRecord ()
- {
- super();
-
- cadaverLockStore = null;
- objectTypeName = null;
- doRelease = false;
-
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.CONSTRUCTORS, VisibilityLevel.VIS_PROTECTED,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "CadaverLockRecord::CadaverLockRecord ()");
- }
- }
-
- private LockStore cadaverLockStore;
- private String objectTypeName;
- private boolean doRelease;
-
-}
Modified: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockManager.java 2009-11-06 14:18:39 UTC (rev 30059)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockManager.java 2009-11-06 14:47:21 UTC (rev 30060)
@@ -45,6 +45,8 @@
import com.arjuna.ats.arjuna.coordinator.*;
import com.arjuna.ats.arjuna.state.*;
import com.arjuna.ats.internal.arjuna.common.UidHelper;
+import com.arjuna.ats.internal.txoj.abstractrecords.CadaverLockRecord;
+import com.arjuna.ats.internal.txoj.abstractrecords.LockRecord;
import com.arjuna.ats.internal.txoj.lockstore.BasicLockStore;
import com.arjuna.ats.internal.txoj.lockstore.BasicPersistentLockStore;
import com.arjuna.ats.internal.txoj.semaphore.BasicSemaphore;
Deleted: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockRecord.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockRecord.java 2009-11-06 14:18:39 UTC (rev 30059)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/LockRecord.java 2009-11-06 14:47:21 UTC (rev 30060)
@@ -1,370 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags.
- * See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License, v. 2.1.
- * This program is distributed in the hope that it will be useful, but WITHOUT A
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
- * You should have received a copy of the GNU Lesser General Public License,
- * v.2.1 along with this distribution; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- *
- * (C) 2005-2006,
- * @author JBoss Inc.
- */
-/*
- * Copyright (C) 1998, 1999, 2000,
- *
- * Arjuna Solutions Limited,
- * Newcastle upon Tyne,
- * Tyne and Wear,
- * UK.
- *
- * $Id: LockRecord.java 2342 2006-03-30 13:06:17Z $
- */
-
-package com.arjuna.ats.txoj;
-
-import com.arjuna.ats.arjuna.coordinator.AbstractRecord;
-import com.arjuna.ats.arjuna.ObjectType;
-import com.arjuna.ats.arjuna.state.*;
-import com.arjuna.ats.arjuna.common.Uid;
-
-import com.arjuna.ats.txoj.logging.txojLogger;
-import com.arjuna.ats.txoj.logging.FacilityCode;
-
-import com.arjuna.common.util.logging.*;
-
-import com.arjuna.ats.arjuna.coordinator.*;
-import java.io.*;
-
-/**
- * @message com.arjuna.ats.txoj.LockRecord_1 [com.arjuna.ats.txoj.LockRecord_1] - LockRecord::set_value() called illegally
- * @message com.arjuna.ats.txoj.LockRecord_2 [com.arjuna.ats.txoj.LockRecord_2] - LockRecord - release failed for action {0}
- * @message com.arjuna.ats.txoj.LockRecord_3 [com.arjuna.ats.txoj.LockRecord_3] - LockRecord::nestedAbort - no current action
- * @message com.arjuna.ats.txoj.LockRecord_4 [com.arjuna.ats.txoj.LockRecord_4] - LockRecord::nestedCommit - no current action
- * @message com.arjuna.ats.txoj.LockRecord_5 [com.arjuna.ats.txoj.LockRecord_5] - LockRecord - release failed for action {0}
- * @message com.arjuna.ats.txoj.LockRecord_6 [com.arjuna.ats.txoj.LockRecord_6] - LockRecord::topLevelCommit - no current action
- * @message com.arjuna.ats.txoj.LockRecord_7 [com.arjuna.ats.txoj.LockRecord_7] - Invocation of LockRecord::restore_state for {0} inappropriate - ignored for {1}
- */
-
-public class LockRecord extends AbstractRecord
-{
-
- public LockRecord (LockManager lm, BasicAction currAct)
- {
- super(lm.get_uid(), lm.type(), ObjectType.ANDPERSISTENT);
-
- actionHandle = currAct;
-
- managerAddress = lm;
- readOnly = false;
- managerType = lm.type();
- }
-
- public LockRecord (LockManager lm, boolean rdOnly, BasicAction currAct)
- {
- super(lm.get_uid(), lm.type(), ObjectType.ANDPERSISTENT);
-
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.CONSTRUCTORS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "LockRecord::LockRecord("+lm.get_uid()+", "
- +(readOnly ? "PREPARE_READONLY" : "WRITEABLE")+")");
- }
-
- actionHandle = currAct;
-
- managerAddress = lm;
- readOnly = rdOnly;
- managerType = lm.type();
- }
-
- public int typeIs ()
- {
- return RecordType.LOCK;
- }
-
- public Object value ()
- {
- return (Object) managerAddress;
- }
-
- public void setValue (Object o)
- {
- if (txojLogger.aitLoggerI18N.isWarnEnabled())
- txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_1");
- }
-
- public int nestedAbort ()
- {
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "LockRecord::nestedAbort() for "+order());
- }
-
- /* default constructor problem. */
-
- if (managerAddress == null)
- return TwoPhaseOutcome.FINISH_ERROR;
-
- if (actionHandle != null)
- {
- Uid toRelease = actionHandle.get_uid();
-
- actionHandle = actionHandle.parent();
-
- if (!managerAddress.releaseAll(toRelease))
- {
- if (txojLogger.aitLoggerI18N.isWarnEnabled())
- {
- txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_2",
- new Object[]{toRelease});
- }
-
- return TwoPhaseOutcome.FINISH_ERROR;
- }
- }
- else
- if (txojLogger.aitLoggerI18N.isWarnEnabled())
- txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_3");
-
- return TwoPhaseOutcome.FINISH_OK;
- }
-
- public int nestedCommit ()
- {
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "LockRecord::nestedCommit() for "+order());
- }
-
- /* default constructor problem. */
-
- if (managerAddress == null)
- return TwoPhaseOutcome.FINISH_ERROR;
-
- if (actionHandle != null)
- {
- Uid toRelease = actionHandle.get_uid();
-
- actionHandle = actionHandle.parent();
-
- return (managerAddress.propagate(toRelease, actionHandle.get_uid()) ? TwoPhaseOutcome.FINISH_OK : TwoPhaseOutcome.FINISH_ERROR);
- }
- else
- {
- if (txojLogger.aitLoggerI18N.isWarnEnabled())
- txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_4");
- }
-
- return TwoPhaseOutcome.FINISH_ERROR;
- }
-
- public int nestedPrepare ()
- {
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "LockRecord::nestedPrepare() for "+order());
- }
-
- return TwoPhaseOutcome.PREPARE_OK;
- }
-
- public int topLevelAbort ()
- {
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "LockRecord::topLevelAbort() for "+order());
- }
-
- return nestedAbort();
- }
-
- public int topLevelCommit ()
- {
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "LockRecord::topLevelCommit() for "+order());
- }
-
- /* default constructor problem. */
-
- if (managerAddress == null)
- return TwoPhaseOutcome.FINISH_ERROR;
-
- if (actionHandle != null)
- {
- if (!managerAddress.releaseAll(actionHandle.get_uid()))
- {
- if (txojLogger.aitLoggerI18N.isWarnEnabled())
- {
- txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_5",
- new Object[]{actionHandle.get_uid()});
- }
-
- return TwoPhaseOutcome.FINISH_ERROR;
- }
- }
- else
- {
- if (txojLogger.aitLoggerI18N.isWarnEnabled())
- txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_6");
-
- return TwoPhaseOutcome.FINISH_ERROR;
- }
-
- return TwoPhaseOutcome.FINISH_OK;
- }
-
- public int topLevelPrepare ()
- {
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "LockRecord::topLevelPrepare() for "+order());
- }
-
- if (readOnly)
- {
- if (topLevelCommit() == TwoPhaseOutcome.FINISH_OK)
- return TwoPhaseOutcome.PREPARE_READONLY;
- else
- return TwoPhaseOutcome.PREPARE_NOTOK;
- }
-
- return TwoPhaseOutcome.PREPARE_OK;
- }
-
- public String toString ()
- {
- StringWriter strm = new StringWriter();
-
- print(new PrintWriter(strm));
-
- return strm.toString();
- }
-
- public void print (PrintWriter strm)
- {
- super.print(strm);
- strm.println("LockRecord");
- }
-
- /*
- * restore_state and save_state for LockRecords doesn't generally
- * apply due to object pointers.
- */
-
- public boolean restore_state (InputObjectState o, int t)
- {
- if (txojLogger.aitLoggerI18N.isWarnEnabled())
- {
- txojLogger.aitLoggerI18N.warn("com.arjuna.ats.txoj.LockRecord_7",
- new Object[]{type(), order()});
- }
-
- return false;
- }
-
- public boolean save_state (OutputObjectState o, int t)
- {
- return true;
- }
-
- public String type ()
- {
- return "/StateManager/AbstractRecord/LockRecord";
- }
-
- public final boolean isReadOnly ()
- {
- return readOnly;
- }
-
- public final String lockType ()
- {
- return managerType;
- }
-
- public void merge (AbstractRecord a)
- {
- }
-
- public void alter (AbstractRecord a)
- {
- }
-
- public boolean shouldAdd (AbstractRecord a)
- {
- return false;
- }
-
- public boolean shouldAlter (AbstractRecord a)
- {
- return false;
- }
-
- public boolean shouldMerge (AbstractRecord a)
- {
- return false;
- }
-
- public boolean shouldReplace (AbstractRecord ar)
- {
- if ((order().equals(ar.order())) && typeIs() == ar.typeIs())
- {
- /*
- * The first test should ensure that ar is a LockRecord.
- */
-
- if (((LockRecord) ar).isReadOnly() && !readOnly)
- return true;
- }
-
- return false;
- }
-
- public LockRecord ()
- {
- super();
-
- if (txojLogger.aitLogger.isDebugEnabled())
- {
- txojLogger.aitLogger.debug(DebugLevel.CONSTRUCTORS, VisibilityLevel.VIS_PROTECTED,
- (FacilityCode.FAC_CONCURRENCY_CONTROL | com.arjuna.ats.arjuna.logging.FacilityCode.FAC_ABSTRACT_REC),
- "LockRecord::LockRecord()");
- }
-
- actionHandle = null;
-
- managerAddress = null;
- readOnly = false;
- managerType = null;
- }
-
- protected BasicAction actionHandle; // must be changed if we propagate
-
- private LockManager managerAddress;
- private boolean readOnly;
- private String managerType;
-
-}
More information about the jboss-svn-commits
mailing list