[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