[jboss-svn-commits] JBL Code SVN: r27652 - in labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943: handle/internal and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 6 14:25:32 EDT 2009


Author: whitingjr
Date: 2009-07-06 14:25:31 -0400 (Mon, 06 Jul 2009)
New Revision: 27652

Added:
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionReadSet.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionWriteSet.java
Modified:
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/FieldUtils.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/HandleUtils.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/TransactionStack.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/TransactionStatus.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java
Log:
Updated with isolation behaviour, added atomic references to shared objects.

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/FieldUtils.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/FieldUtils.java	2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/FieldUtils.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -12,10 +12,8 @@
 import javax.persistence.Id;
 
 import org.apache.commons.beanutils.PropertyUtils;
-import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 
-
 import uk.ac.ncl.sdia.a8905943.handle.exception.FieldNotFoundException;
 
 public class FieldUtils

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/HandleUtils.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/HandleUtils.java	2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/HandleUtils.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -21,7 +21,7 @@
    {
       return new HashCodeBuilder(17, 37).append(entity.getName()).append(id).append(fieldName).toHashCode();
    }
-   public long getHandle(Class entity, String entityId, int fieldIndex)
+   public long getFieldHandle(Class entity, String entityId, int fieldIndex)
    {
       return new HashCodeBuilder(17, 37).append(entity.getName()).append(entityId).append(fieldIndex).toHashCode();
    }

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -0,0 +1,29 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.handle;
+
+public class TransactedObjectReference<T>
+{
+   final Long lookupIdentity;
+   final T value;
+   
+   public TransactedObjectReference(Long identity, T value)
+   {
+      lookupIdentity = identity;
+      this.value = value; 
+   }
+
+   public T getValue()
+   {
+      return value;
+   }
+
+   public Long getLookupIdentity()
+   {
+      return lookupIdentity;
+   }
+}

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -0,0 +1,12 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.handle.internal;
+
+public class InternalReferenceState
+{
+   
+}

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -0,0 +1,15 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.handle.internal;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+public class InternalTransactedObjectReference
+{
+   private final AtomicReference<State> state = new AtomicReference<State>; 
+   
+}

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java	2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -14,8 +14,12 @@
 import javax.transaction.Transaction;
 import javax.transaction.xa.XAResource;
 
+import org.apache.log4j.Logger;
+
 import uk.ac.ncl.sdia.a8905943.model.TransactionStatus;
 import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionReadSet;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionWriteSet;
 /**
  * The purpose of this object is to perform the transaction functionality.
  * 
@@ -24,15 +28,36 @@
  */
 public class TransactionImpl implements STMTransaction{
 
-	private volatile TransactionStatus status;
+   // status available for inspection
+   private volatile TransactionStatus status = TransactionStatus.NOTSTARTED;
+   /**
+    * the statusModifer should be used for updating the status field. Any part of the system that is responsible
+    * for transitioning a transaction through it's states should use this field.
+    */
 	private final AtomicReferenceFieldUpdater<Transaction, TransactionStatus> statusModifier = AtomicReferenceFieldUpdater.newUpdater(Transaction.class, TransactionStatus.class, "status");
+	/**
+	 * This thread local variable holds the current transaction for this thread.
+	 *  hmm is this really going to work with nested transactions ????????? TODO: work this one out
+	 */
 	private static final ThreadLocal<TransactionImpl> currentLocalTransaction = new ThreadLocal<TransactionImpl>();
-	private final 
-	
+	/**
+	 * Nested writes are a record of writes performed by nested classes. Access to them is necessary so this transaction is not isolated completely. 
+	 */
+	private final TransactionWriteSet nestedWrites = new TransactionWriteSet();
+	/**
+	 * This TM system deferred update to synchronize updates. This field stores all the updates performed by this transaction. 
+	 */
+    private final TransactionWriteSet writeSet = new TransactionWriteSet();
+    /**
+     * This TM needs to keep it's readset for validation to check for conflicts.
+     */
+    private final TransactionReadSet readSet = new TransactionReadSet();
+    private static final Logger logger = Logger.getLogger(TransactionImpl.class);
+    
 
 	@Override
 	public void commit() {
-		// TODO: go through list of readers and writers depending on isolation. resolve any conflicts. 
+		 
 		// make object versioned fields visible to all other transactions (depending on isolation)
 		// make versioned collection objects fields visible to all other transactions (depending on isolation)
 		// change status
@@ -92,5 +117,20 @@
       return null;
    }
 
+   @Override
+   public void startTransaction()
+   {
+      if (logger.isInfoEnabled())
+      {
+         logger.info("Starting transaction with id ["++"].");
+      }
+         
+      if ()
+      {
+         
+      }
+      
+   }
+
 }
 

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java	2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -1,32 +1,20 @@
 package uk.ac.ncl.sdia.a8905943.isolation;
 
 import uk.ac.ncl.sdia.a8905943.spec.History;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionReadSet;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionWriteSet;
 
 public abstract class AbstractIsolation implements Isolation {
 
-	protected final History readhistory;
-	protected final History writeHistory;
+	protected History readhistory;
+	protected History writeHistory;
 	
-	@Override
-	public History getReadHistory() {
-		return readhistory;
+	public TransactionWriteSet getNestedTransactionWriteSet()
+	{
+	   return nestedWrites;
 	}
-
-	@Override
-	public void setReadHistory(History history) {
-		readhistory = history;
-	}
-	@Override
-	public History getWriteHistory() {
-		return writeHistory;
-	}
-
-	@Override
-	public void setWriteHistory(History history) {
-		writeHistory = history;
-	}
 	
-	public abstract Object read();
+	public abstract Object read( TransactionReadSet currentReadSet, TransactionReadSet nested, Long lookupIdentity);
 	
-	public abstract Object write(Object newObject);
+	public abstract Object write(TransactionWriteSet currentWriteSet, Object newObject);
 }

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java	2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -4,10 +4,6 @@
 
 public interface Isolation {
 
-	public History getReadHistory();
-	public void setReadHistory(History history);
-	public History getWriteHistory();
-	public void setWriteHistory(History history);
 	
 	public boolean supportsRepeatableRead();
 	public boolean supportsWriteSkew();

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java	2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -3,6 +3,10 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import uk.ac.ncl.sdia.a8905943.spec.History;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionReadSet;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionWriteSet;
+
 /**
  * This object defines the behaviour for reads and writes for a
  * transaction with RepeatableRead isolation. After initial 
@@ -33,7 +37,6 @@
     * Read the value requested. First check for version previously read and
     * return it. If not found then read the shared value, add to have read list.
     */
-   @Override
    public Object read(Long lookupIdentity)
    {
       Object returnValue = null;
@@ -49,16 +52,51 @@
       }
       else
       {// not found in this transaction, read shared value
-         
+         //TODO: read from shared store, first check to see if it has been locked, pass responsibility to 
+         // retrieve from shared memory back to caller
       }
-      return null;
+      return returnValue;
    }
 
+
+   /**
+    * Read the value requested. First check for version previously read and
+    * return it. If not found then read the shared value, add to have read list.
+    */
    @Override
-   public Object write(Object newObject)
+   public Object read(TransactionReadSet currentTransaction, TransactionReadSet nested, Long lookupIdentity)
    {
-      // FIXME write
+      Object returnValue = null;
+      /* check for the value initially in the writes, then reads otherwise
+       * retrieve the shared version*/
+      if (writes.containsKey(lookupIdentity))
+      {// found
+         returnValue = writes.get(lookupIdentity);
+      }
+      else if (reads.containsKey(lookupIdentity))
+      {
+         returnValue = writes.get(lookupIdentity);
+      }
+      else
+      {// not found in this transaction, read shared value
+         //TODO: read from shared store, first check to see if it has been locked, pass responsibility to 
+         // retrieve from shared memory back to caller
+      }
+      return returnValue;
+   }
+
+   @Override
+   public Object write(TransactionWriteSet currentWriteSet, Object newObject)
+   {
+      Object returnValue = null;
+      if (null != newObject)
+      {
+         currentWriteSet.getWriteSet().re
+      }
+      else
+      {
+         
+      }
       return null;
    }
-
 }

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/TransactionStack.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/TransactionStack.java	2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/TransactionStack.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -12,7 +12,7 @@
  * (nested) transaction it is pushed down the stack. The transaction with the deepest 
  * nesting is a the bottom. This means the "top level" transaction is at the bottom.
  * This class encapsulates behaviour for the interaction between transactions when
- * reads and writes occur and how they effect transactions as updates bubble up. 
+ * reads and writes occur and how they effect transactions as commited updates bubble up. 
  * 
  * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
  * @version $Revision: 1.1 $

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/TransactionStatus.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/TransactionStatus.java	2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/TransactionStatus.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -1,6 +1,33 @@
 package uk.ac.ncl.sdia.a8905943.model;
 
+/**
+ * Definition of the states an STM transaction can go through
+ * 
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
 public enum TransactionStatus {
 
-	INFLIGHT, ABORTED, COMMITTED, NOTSTARTED
+   // initial state
+   NOTSTARTED
+   // in progress transaction state
+   , RUNNING
+   // 2pc states, 1st phase
+   , PREPARED
+   // p2c states, 2nd phase
+   , ABORTING, COMMITING
+   // final states for transactions
+   , ABORTED, COMMITTED 
+   // aditional states for STM design to work
+   , VALIDATING
+   
+   /* initial state transition model 
+   NOTSTARTED -> RUNNING
+   RUNNING -> VALIDATING or ABORTING
+   VALIDATING -> PREPARED
+   PREPARED -> ABORTING or COMMITTING
+   ABORTING -> ABORTED
+   COMMITTING -> COMMITTED
+   */
+   
 }

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java	2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -19,5 +19,6 @@
 {
    public Object readField();
    public Object writeField();
+   public void startTransaction();
    
 }

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionReadSet.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionReadSet.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionReadSet.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -0,0 +1,12 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.tracker;
+
+public class TransactionReadSet
+{
+
+}

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionWriteSet.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionWriteSet.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionWriteSet.java	2009-07-06 18:25:31 UTC (rev 27652)
@@ -0,0 +1,20 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.tracker;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class TransactionWriteSet
+{
+   private final Map<Long, Object> writes = new  HashMap<Long, Object>();
+   
+   public Map<Long, Object> getWriteSet()
+   {
+      return writes;
+   }
+}




More information about the jboss-svn-commits mailing list