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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Aug 23 15:04:58 EDT 2009


Author: whitingjr
Date: 2009-08-23 15:04:58 -0400 (Sun, 23 Aug 2009)
New Revision: 29035

Added:
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/exception/ConflictingWriteException.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/STMTransactionImpl.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Bike.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/LeccyCar.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/InjectedSTM.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/STMEntity.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/STMTransaction.java
Removed:
   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/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/impl/TransactionImpl.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldReadParameter.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldWriteParameter.java
   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/VersionManager.java
Modified:
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/entitymanager/STMEntityManagerImpl.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/STMFactory.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/TransactionFactory.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractFieldParameter.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/model/Car.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/Tracker.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersioningAspect.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/STM.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TransactionManager.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Read.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Write.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/transaction/compressor/PostCommitTransactionMerger.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/META-INF/jboss-aop.xml
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/log4j.xml
Log:
Fixed bugs.

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/entitymanager/STMEntityManagerImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/entitymanager/STMEntityManagerImpl.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/entitymanager/STMEntityManagerImpl.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -174,6 +174,7 @@
          }
       }
       */
+      //TODO: jrw replace this implementation, should go into STM and check the model store for existence.
       isstmEntity = true;
       if (isstmEntity)
       {// STM entity class, create an instance

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/exception/ConflictingWriteException.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/exception/ConflictingWriteException.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/exception/ConflictingWriteException.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,19 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.exception;
+
+public class ConflictingWriteException extends Exception
+{
+
+   /** The serialVersionUID */
+   private static final long serialVersionUID = 1037838644833482768L;
+
+   public ConflictingWriteException(String message)
+   {
+      super(message);
+   }
+}

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/STMFactory.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/STMFactory.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/STMFactory.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -12,7 +12,7 @@
  * The purpose of this factory is an attempt to bind a reference of
  * the STM allocated to a Thread (of control). It should be allocated
  * a deallocated. Allocating and deallocating should occur at the same
- * time logical Connection objects are release by the EntityManager. 
+ * time logical Connection objects are released by the EntityManager. 
  * 
  * @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/factory/TransactionFactory.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/TransactionFactory.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/TransactionFactory.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -2,8 +2,8 @@
 
 import java.util.concurrent.atomic.AtomicLong;
 
-import uk.ac.ncl.sdia.a8905943.impl.TransactionImpl;
-import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
+import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
+import uk.ac.ncl.sdia.a8905943.stm.transaction.STMTransaction;
 
 /**
  * The purpose of this object is to get a transaction object.
@@ -22,7 +22,7 @@
    {
       if (null == currentTransaction.get() && create)
       {
-         currentTransaction.set(new TransactionImpl(version.incrementAndGet()));
+         currentTransaction.set(new STMTransactionImpl(version.incrementAndGet()));
       }
       return currentTransaction.get();
    }
@@ -31,6 +31,13 @@
    {
       return factory;
    }
+   public static void deallocate()
+   {
+      if (null != currentTransaction.get())
+      {
+         currentTransaction.remove();
+      }
+   }
    
    private TransactionFactory()
    {}

Deleted: 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	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,88 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- * 
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.handle;
-
-import java.io.Serializable;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-
-public final class TransactedObjectReference implements Serializable
-{
-   /** The serialVersionUID */
-   private static final long serialVersionUID = 2497531722707627406L;
-   final Long lookupIdentity;
-   private Object value;
-   private Long nextIdentity;
-   private Long version;
-   transient final ReentrantReadWriteLock prepared = new ReentrantReadWriteLock();
-   
-   public TransactedObjectReference(Long identity, Object value, long version)
-   {
-      lookupIdentity = identity;
-      this.value = value; 
-      this.version = version;
-   }
-
-   public Object getValue()
-   {
-      return value;
-   }
-
-   public Long getLookupIdentity()
-   {
-      return lookupIdentity;
-   }
-
-   public Long getNextIdentity()
-   {
-      return nextIdentity;
-   }
-
-   public void setNextIdentity(Long nextIdentity)
-   {
-      this.nextIdentity = nextIdentity;
-   }
-   public long getVersion()
-   {
-      return version;
-   }
-   public void setVersion(long version)
-   {
-      this.version = version;
-   }
-   public void setValue(Object value)
-   {
-      this.value = value;
-   }
-   @Override
-   public boolean equals(Object other)
-   {
-      boolean returnValue = false;
-      if (null != other)
-      {
-         if (other == this)
-         {
-            returnValue = true;
-         }
-         else
-         {
-            if (other.getClass() == getClass())
-            {
-               TransactedObjectReference otherReference = (TransactedObjectReference)other;
-               returnValue = new EqualsBuilder().append(this.getLookupIdentity(), otherReference.getLookupIdentity()).append(this.getVersion(), otherReference.getVersion()).isEquals();
-            }
-         }
-      }
-      return returnValue;
-   }
-
-   public ReentrantReadWriteLock getPrepared()
-   {
-      return prepared;
-   }
-}

Deleted: 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	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,12 +0,0 @@
-/*
- * 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
-{
-   
-}

Deleted: 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	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,15 +0,0 @@
-/*
- * 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<InternalReferenceState> state = new AtomicReference<InternalReferenceState>(); 
-   
-}

Copied: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/STMTransactionImpl.java (from rev 28969, 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/STMTransactionImpl.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/STMTransactionImpl.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,132 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.transaction.Status;
+
+import org.apache.log4j.Logger;
+
+import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
+import uk.ac.ncl.sdia.a8905943.stm.model.LoadEntityParameter;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
+import uk.ac.ncl.sdia.a8905943.stm.transaction.STMTransaction;
+
+/**
+ * The purpose of this object is to perform the transaction functionality.
+ * 
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+public class STMTransactionImpl implements STMTransaction
+{
+   // status available for inspection
+   protected volatile int status = Status.STATUS_NO_TRANSACTION;
+   protected final Map<Long, TransactedObjectReference> deferredReads = new HashMap<Long, TransactedObjectReference>();
+   protected final Map<Long, TransactedObjectReference> deferredWrites = new HashMap<Long, TransactedObjectReference>();
+
+   /**
+    * The version number of this transaction
+    */
+   private final Long version;
+
+   private static final Logger logger = Logger.getLogger(STMTransactionImpl.class);
+
+   private Isolation isolation;
+
+   public void commit()
+   {
+      // 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
+      // notify all transactions committed, cleanup reader and writer traces.
+   }
+
+   @Override
+   public void startTransaction()
+   {
+      if (logger.isInfoEnabled())
+      {
+         logger.info("Starting transaction.");
+      }
+      if (null == this.isolation)
+      {
+         throw new RuntimeException("The STM transaction is not ready to be started.");
+      }
+      this.status = Status.STATUS_ACTIVE;
+   }
+
+   public STMTransactionImpl(long version)
+   {
+      this.version = version;
+   }
+
+   @Override
+   public Object read(FieldReadParameter fieldRead)
+   {
+      fieldRead.setReads(this.deferredReads);
+      fieldRead.setWrites(this.deferredWrites);
+      return this.isolation.read(fieldRead);
+   }
+
+   @Override
+   public Boolean write(FieldWriteParameter fieldWrite)
+   {
+      fieldWrite.setWrites(this.deferredWrites);
+      fieldWrite.setVersion(this.version);
+      return this.isolation.write(fieldWrite);
+   }
+
+   @Override
+   public void setIsolationLevel(Isolation isolation)
+   {
+      this.isolation = isolation;
+   }
+
+   public Long getVersion()
+   {
+      return this.version;
+   }
+
+   public Map<Long, TransactedObjectReference> getDeferredReads()
+   {
+      return deferredReads;
+   }
+
+   public void abort()
+   {
+      this.status = Status.STATUS_ROLLEDBACK;
+   }
+
+   @Override
+   public Object load(LoadEntityParameter load)
+   {
+      // FIXME load
+      return null;
+   }
+
+   @Override
+   public Map<Long, TransactedObjectReference> getDeferredWrites()
+   {
+      return this.deferredWrites;
+   }
+
+   @Override
+   public int getStatus()
+   {
+      return this.status;
+   }
+   @Override
+   public void setStatus(int status)
+   {
+      this.status = status;
+   }
+}

Deleted: 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-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,106 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- * 
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.transaction.Status;
-
-import org.apache.log4j.Logger;
-
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
-import uk.ac.ncl.sdia.a8905943.isolation.FieldReadParameter;
-import uk.ac.ncl.sdia.a8905943.isolation.FieldWriteParameter;
-import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
-import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
-
-/**
- * The purpose of this object is to perform the transaction functionality.
- * 
- * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
- * @version $Revision: 1.1 $
- */
-public class TransactionImpl implements STMTransaction
-{
-   // status available for inspection
-   private volatile int status = Status.STATUS_NO_TRANSACTION;
-
-   protected final Map<Long, TransactedObjectReference> deferredReads = new HashMap<Long, TransactedObjectReference>();
-
-   protected final Map<Long, TransactedObjectReference> deferredWrites = new HashMap<Long, TransactedObjectReference>();
-
-   /**
-    * The version number of this transaction
-    */
-
-   private final Long version;
-
-   private static final Logger logger = Logger.getLogger(TransactionImpl.class);
-
-   private Isolation isolation;
-
-   public void commit()
-   {
-
-      // 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
-      // notify all transactions committed, cleanup reader and writer traces.
-   }
-
-   @Override
-   public void startTransaction()
-   {
-      if (logger.isInfoEnabled())
-      {
-         logger.info("Starting transaction.");
-      }
-      if (null == this.isolation)
-      {
-         throw new RuntimeException("The STM transaction is not ready to be started.");
-      }
-      this.status = Status.STATUS_ACTIVE;
-   }
-
-   public TransactionImpl(long version)
-   {
-      this.version = version;
-   }
-
-   @Override
-   public Object read(FieldReadParameter fieldRead)
-   {
-      fieldRead.setReads(this.deferredReads);
-      fieldRead.setWrites(this.deferredWrites);
-      return this.isolation.read(fieldRead);
-   }
-
-   @Override
-   public Boolean write(FieldWriteParameter fieldWrite)
-   {
-      fieldWrite.setWrites(this.deferredWrites);
-      fieldWrite.setVersion(this.version);
-      return this.isolation.write(fieldWrite);
-   }
-
-   @Override
-   public void setIsolationLevel(Isolation isolation)
-   {
-      this.isolation = isolation;
-   }
-
-   public Long getVersion()
-   {
-      return this.version;
-   }
-
-   public Map<Long, TransactedObjectReference> getDeferredReads()
-   {
-      return deferredReads;
-   }
-}

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractFieldParameter.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractFieldParameter.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractFieldParameter.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -8,7 +8,7 @@
 
 import java.util.Map;
 
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
 
 public class AbstractFieldParameter
 {

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-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,5 +1,7 @@
 package uk.ac.ncl.sdia.a8905943.isolation;
 
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
 import uk.ac.ncl.sdia.a8905943.tracker.TransactionWriteSet;
 
 public abstract class AbstractIsolation implements Isolation {

Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldReadParameter.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldReadParameter.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldReadParameter.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,40 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- * 
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.isolation;
-
-import java.util.Map;
-
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
-
-public class FieldReadParameter extends AbstractFieldParameter
-{
-   private Map<Long, TransactedObjectReference> reads;
-
-   public FieldReadParameter(Map<Long, TransactedObjectReference> reads, Map<Long, TransactedObjectReference> writes,
-         Map<Long, TransactedObjectReference> objectStore, long handle)
-   {
-      this.reads = reads;
-      this.writes = writes;
-      this.objectStore = objectStore;
-      this.handle = handle;
-   }
-
-   public Map<Long, TransactedObjectReference> getReads()
-   {
-      return reads;
-   }
-
-   public void setReads(Map<Long, TransactedObjectReference> reads)
-   {
-      this.reads = reads;
-   }
-
-   public FieldReadParameter(long handle)
-   {
-      this.handle = handle;
-   }
-}
\ No newline at end of file

Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldWriteParameter.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldWriteParameter.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldWriteParameter.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,27 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- * 
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.isolation;
-
-
-public class FieldWriteParameter extends AbstractFieldParameter
-{
-   private Object newObject;
-
-   public Object getNewObject()
-   {
-      return newObject;
-   }
-   public void setNewObject(Object newObject)
-   {
-      this.newObject = newObject;
-   }
-   public FieldWriteParameter(long handle, Object newObject)
-   {
-      this.handle = handle;
-      this.newObject = newObject;
-   }
-}
\ No newline at end of file

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-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,8 +1,11 @@
 package uk.ac.ncl.sdia.a8905943.isolation;
 
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
 
 
 
+
 public interface Isolation {
 	
 	public boolean supportsRepeatableRead();

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-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -2,7 +2,9 @@
 
 import org.apache.log4j.Logger;
 
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
 
 /**
  * This object defines the behaviour for reads and writes for a
@@ -32,6 +34,10 @@
       if (fieldRead.getWrites().containsKey(fieldRead.getHandle()))
       {// found
          returnValue = fieldRead.getWrites().get(fieldRead.getHandle()).getValue();
+         if (!fieldRead.getReads().containsKey(fieldRead.getHandle()))
+         {// in case the field has not previously been read
+            fieldRead.getReads().put(fieldRead.getHandle(), fieldRead.getWrites().get(fieldRead.getHandle()));
+         }
       }
       else if (fieldRead.getReads().containsKey(fieldRead.getHandle()))
       {// has been read previously in transaction, return the previous value
@@ -42,7 +48,7 @@
          // retrieve from shared memory back to caller
          if (fieldRead.getObjectStore().containsKey(fieldRead.getHandle()))
          {
-            returnValue = fieldRead.getObjectStore().get(fieldRead.getHandle() );
+            returnValue = fieldRead.getObjectStore().get(fieldRead.getHandle() ).getValue();
          }
          else
          {
@@ -76,7 +82,7 @@
       }
       else
       {// place in the store a transacted object representing a null 
-         
+         //TODO:jrw complete this
       }
       return returnValue;
    }

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Bike.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Bike.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Bike.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,45 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.model;
+
+import javax.persistence.Id;
+
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMReadable;
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMWriteable;
+import uk.ac.ncl.sdia.a8905943.stm.annotation.STMEntity;
+
+ at STMEntity
+public class Bike
+{
+
+   @Id
+   private Long id;
+   private String name;
+   
+   public Bike(Long identity)
+   {
+      this.id = identity;
+   }
+   @STMReadable
+   public String getName()
+   {
+      return name;
+   }
+   @STMWriteable
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+   
+   public Long getId()
+   {
+      return id;
+   }
+   
+}
+
+

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Car.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Car.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Car.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,30 +1,29 @@
 package uk.ac.ncl.sdia.a8905943.model;
 
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 
- at Entity
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMReadable;
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMWriteable;
+import uk.ac.ncl.sdia.a8905943.stm.annotation.STMEntity;
+
+
+ at STMEntity
 public class Car {
 
    @Id
-   @GeneratedValue
    private Long id;
-   
-   
    private String make;
+   
    public Long getId()
    {
       return id;
    }
-   public void setId(Long id)
-   {
-      this.id = id;
-   }
+   @STMReadable
    public String getMake()
    {
       return make;
    }
+   @STMWriteable
    public void setMake(String make)
    {
       this.make = make;
@@ -37,8 +36,4 @@
       this.id = identity;
    }
    
-   public  Car()
-   {
-   }
-
 }

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/LeccyCar.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/LeccyCar.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/LeccyCar.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,46 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.model;
+
+import javax.persistence.Id;
+
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMReadable;
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMWriteable;
+import uk.ac.ncl.sdia.a8905943.stm.annotation.STMEntity;
+
+ at STMEntity
+public class LeccyCar
+{
+   @Id
+   private Long id;
+   private String name;
+   
+   /**
+    * Constructor that fulfils contract with STMEntity annotation
+    * 
+    * @param identity
+    */
+   public LeccyCar(Long identity)
+   {
+      this.id = identity;
+   }
+   public Long getId()
+   {
+      return id;
+   }
+   @STMReadable
+   public String getName()
+   {
+      return name;
+   }
+   @STMWriteable
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+}
+

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -6,10 +6,11 @@
  */
 package uk.ac.ncl.sdia.a8905943.persistence.xa;
 
-import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Serializable;
 import java.sql.SQLException;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.naming.NamingException;
@@ -23,11 +24,10 @@
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.apache.log4j.Logger;
-import org.infinispan.manager.CacheManager;
-import org.infinispan.manager.DefaultCacheManager;
 
 import uk.ac.ncl.sdia.a8905943.persistence.jdbc.STMDataSource;
 import uk.ac.ncl.sdia.a8905943.stm.STM;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
 
 public final class STMXADatasourceImpl extends STMDataSource implements XADataSource, Serializable, Referenceable
 {
@@ -39,7 +39,8 @@
    private static final String DATABASE_NAME = "databaseName";
    private static final ConcurrentHashMap<String, STM> stmDatabases = new ConcurrentHashMap<String, STM>();
    private static final Logger logger = Logger.getLogger(STMXADatasourceImpl.class );
-   private CacheManager cacheManager ; // heavy weight object
+   private Map<Long, TransactedObjectReference> transactedFieldStore ; 
+   private Map<String, List<Object>> transactedModelStore;
 
    /** The serialVersionUID */
    private static final long serialVersionUID = 2341586268344164513L;
@@ -67,13 +68,13 @@
       else
       {// the stm does not exist create an instance and attempt to put it into the map
          STM newSTM = null;
-         if (null != this.cacheManager)
+         if (null != this.transactedFieldStore)
          {
-            newSTM = new STM(getDatabaseName(), this.cacheManager.getCache(getDatabaseName()));
+            newSTM = new STM(getDatabaseName(), this.transactedFieldStore, this.transactedModelStore );
          }
          else
          {
-            newSTM = new STM(getDatabaseName(), null);
+            newSTM = new STM(getDatabaseName(), null, null);
             logger.warn("Starting the STM witout replication enabled.");
          }
          
@@ -221,13 +222,7 @@
          logger.info("Instance of XADataSource created.");
       }
       
-      try
-      {// this is not great performing work inside a constructor that can barf 
-         this.cacheManager = new DefaultCacheManager("../server/default/conf/cluster-cfg.xml");
-      } 
-      catch (IOException ioe)
-      {
-         logger.error("The configuration file for the replicated memory system could not be found.");
-      }
+      this.transactedFieldStore = new ConcurrentHashMap<Long, TransactedObjectReference>();
+      this.transactedModelStore = new ConcurrentHashMap<String, List<Object>>();
    }
 }

Deleted: 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-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,28 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- * 
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.spec;
-
-import uk.ac.ncl.sdia.a8905943.isolation.FieldReadParameter;
-import uk.ac.ncl.sdia.a8905943.isolation.FieldWriteParameter;
-import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
-
-
-/**
- * Purpose of this object is for behaviour of a transaction that 
- * uses memory to control changes.a
- * 
- * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
- * @version $Revision: 1.1 $
- */
-public interface STMTransaction 
-{
-   public Boolean write(FieldWriteParameter fieldWrite);
-   public Object read(FieldReadParameter fieldRead);
-   public void setIsolationLevel(Isolation isolation);
-   public void startTransaction();
-   
-}

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/Tracker.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/Tracker.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/Tracker.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -2,14 +2,14 @@
 
 import javax.transaction.xa.Xid;
 
-import uk.ac.ncl.sdia.a8905943.impl.TransactionImpl;
+import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
 
 
 public interface Tracker {
 
 	public void auditRead();
 	public void auditWrite();
-	public void discardHistory(TransactionImpl transaction);
+	public void discardHistory(STMTransactionImpl transaction);
 	public void discardHistory(Xid xid); // used for nested transactions
 	
 }

Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersionManager.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersionManager.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersionManager.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,11 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- * 
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.spec;
-
-public interface VersionManager
-{
-}

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersioningAspect.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersioningAspect.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersioningAspect.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -6,7 +6,6 @@
  */
 package uk.ac.ncl.sdia.a8905943.spec;
 
-import org.jboss.aop.joinpoint.ConstructorInvocation;
 import org.jboss.aop.joinpoint.FieldWriteInvocation;
 import org.jboss.aop.joinpoint.MethodInvocation;
 

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/STM.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/STM.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/STM.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,16 +1,19 @@
 package uk.ac.ncl.sdia.a8905943.stm;
 
+import java.util.List;
+import java.util.Map;
+
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.log4j.Logger;
-import org.infinispan.Cache;
 
 import uk.ac.ncl.sdia.a8905943.factory.TransactionFactory;
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
-import uk.ac.ncl.sdia.a8905943.isolation.FieldReadParameter;
-import uk.ac.ncl.sdia.a8905943.isolation.FieldWriteParameter;
 import uk.ac.ncl.sdia.a8905943.isolation.factory.IsolationFactory;
-import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
 import uk.ac.ncl.sdia.a8905943.stm.exception.IsolationLevelNotConfiguredException;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
+import uk.ac.ncl.sdia.a8905943.stm.model.LoadEntityParameter;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
+import uk.ac.ncl.sdia.a8905943.stm.transaction.STMTransaction;
 import uk.ac.ncl.sdia.a8905943.stm.transaction.TransactionManager;
 
 /**
@@ -24,9 +27,11 @@
 {
    private final String databaseName;
    private static final Logger logger = Logger.getLogger(STM.class);
-   private final Cache<Long, TransactedObjectReference> replicatedFieldMemory ;
+   private final Map<Long, TransactedObjectReference> transactedFieldMemory ;
+   private final Map<String, List<Object>> transactedModelMemory;
    private final TransactionManager transactionManager = new TransactionManager();
    private ThreadLocal<Integer> isolationLevel = new ThreadLocal<Integer>();
+   private int RETRY_COUNT = 2000;
    
    /**
     * This method is where transactional updates are made..
@@ -38,22 +43,23 @@
    public Boolean write(FieldWriteParameter fieldWrite)
    {
       Boolean returnValue = null;
-      fieldWrite.setObjectStore(this.replicatedFieldMemory);
+      fieldWrite.setObjectStore(this.transactedFieldMemory);
       returnValue = TransactionFactory.getFactory().getCurrentTransaction(false).write(fieldWrite);
       return returnValue;
    }
    public Object read( FieldReadParameter fieldRead)
    {
-      fieldRead.setObjectStore(this.replicatedFieldMemory);
+      fieldRead.setObjectStore(this.transactedFieldMemory);
       STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
       
       return transaction.read(fieldRead); 
    }
 
-   public STM(String name, Cache replicatedMemory)
+   public STM(String name, Map<Long, TransactedObjectReference> transactedFieldMemory, Map<String, List<Object>> transactedModelMemory)
    {
       this.databaseName = name;
-      this.replicatedFieldMemory = replicatedMemory;
+      this.transactedFieldMemory = transactedFieldMemory;
+      this.transactedModelMemory = transactedModelMemory;
    }
    
    @Override
@@ -93,6 +99,9 @@
    {
       //TODO: jrw complete, complete implementation to release (unlock) prepared resources.
       this.isolationLevel.remove();
+      STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
+      this.transactionManager.abort(this.transactedFieldMemory, transaction);
+      TransactionFactory.getFactory().deallocate(); 
    }
    /**
     * Notify the transactional system the changes should be locked for future
@@ -100,20 +109,11 @@
     */
    public boolean prepare()
    {
-      //TODO:jrw complete implementation to return the appropriate response from the STM system
-      return false; //returning false will cause the transaction to be aborted
+      boolean returnValue = false;
+      STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
+      returnValue = this.transactionManager.prepare(this.transactedFieldMemory, transaction.getDeferredWrites(), RETRY_COUNT);
+      return returnValue; //returning false will cause the transaction to be aborted
    }
-   /**
-    * Inform the transactional system that transactional activity will start
-    * to happen for this thread. Make changes in transactional memory.
-    * @deprecated 
-    */
-   public void begin(int isolationLevel)
-   {
-      logger.debug("begin invoked on stm system.");
-      STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(true);
-      setCurrentTransactionIsolation(isolationLevel);
-   }
    
    /**
     * This method tells the STM to create a transaction. The transaction is
@@ -145,6 +145,9 @@
    public void discard()
    {
       this.isolationLevel.remove();
+      STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
+      this.transactionManager.abort(this.transactedFieldMemory, transaction);
+      TransactionFactory.getFactory().deallocate();
    }
    
    public String getDatabaseName()
@@ -161,17 +164,7 @@
    {
       this.isolationLevel.set(isolationLevel);
       STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
-      /*
-      if (null != transaction)
-      {
-         transaction.setIsolationLevel(IsolationFactory.createIsolationLevel(isolationLevel));
-      }
-      else
-      {
-         logger.warn("Attempt to set the transaction isolation level when a transaction has not been created.");
-      }
-      */
-   }
+    }
    /**
     * This method is used to indicate no more changes are going to be issued to the
     * STM for this thread-STMTransaction.
@@ -181,4 +174,16 @@
       //TODO:jrw, errm, do something......
       
    }
+   public Object loadEntity(LoadEntityParameter entityLoad)
+   {
+      entityLoad.setReplicatedModelMemory(this.transactedModelMemory);
+      STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
+      
+      return transaction.load(entityLoad);
+   }
+
+   public Map<String, List<Object>> getModel()
+   {
+      return this.transactedModelMemory;
+   }
 }

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/InjectedSTM.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/InjectedSTM.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/InjectedSTM.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,24 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.stm.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Fields annotated with this are injected with an STM reference.
+ * 
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+ at Target ({ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface InjectedSTM {
+
+}

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/STMEntity.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/STMEntity.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/STMEntity.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,25 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.stm.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates the entity annotated is part of the STM system.
+ * 
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+ at Target(ElementType.TYPE)
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface STMEntity 
+{
+
+}

Copied: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/STMTransaction.java (from rev 28944, 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/stm/transaction/STMTransaction.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/STMTransaction.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.stm.transaction;
+
+import java.util.Map;
+
+import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
+import uk.ac.ncl.sdia.a8905943.stm.model.LoadEntityParameter;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
+
+
+/**
+ * Purpose of this object is for behaviour of a transaction that 
+ * uses memory to control changes.a
+ * 
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+public interface STMTransaction 
+{
+   public int getStatus();
+   public Boolean write(FieldWriteParameter fieldWrite);
+   public Object read(FieldReadParameter fieldRead);
+   public void setIsolationLevel(Isolation isolation);
+   public void startTransaction();
+   public Object load(LoadEntityParameter load);
+   public Map<Long, TransactedObjectReference> getDeferredWrites();
+   public void setStatus(int status);
+}

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TransactionManager.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TransactionManager.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TransactionManager.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -6,26 +6,28 @@
  */
 package uk.ac.ncl.sdia.a8905943.stm.transaction;
 
+import java.util.ArrayDeque;
+import java.util.Deque;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.transaction.Status;
+
 import org.apache.log4j.Logger;
-import org.infinispan.Cache;
 
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
-import uk.ac.ncl.sdia.a8905943.impl.TransactionImpl;
-import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
+import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
 
 public class TransactionManager
 {
-   private final Map<Long, TransactionImpl> transactionsKeyedByVersion = new ConcurrentHashMap<Long, TransactionImpl>();
+   private final Map<Long, STMTransactionImpl> transactionsKeyedByVersion = new ConcurrentHashMap<Long, STMTransactionImpl>();
    private static final Logger logger = Logger.getLogger(TransactionManager.class);
 
-   public TransactionImpl findTransaction(Long version)
+   public STMTransactionImpl findTransaction(Long version)
    {
       return this.transactionsKeyedByVersion.get(version);
    }
-   public boolean addTransaction(TransactionImpl transaction)
+   public boolean addTransaction(STMTransactionImpl transaction)
    {
       return (null == this.transactionsKeyedByVersion.put(transaction.getVersion() , transaction) ? Boolean.TRUE.booleanValue(): Boolean.FALSE.booleanValue());
    }
@@ -43,7 +45,7 @@
     * @param transaction the transaction to prepare
     * @return did the prepare of resources succeed without conflict
     */
-   public boolean prepare(TransactionImpl transaction)
+   public boolean prepare(STMTransactionImpl transaction)
    {
       boolean returnValue = false;
       
@@ -57,22 +59,86 @@
     * @param transaction
     * @return
     */
-   public boolean validate(TransactionImpl transaction, Cache<Long, TransactedObjectReference> replicatedFieldMemory)
+   public boolean validate(STMTransactionImpl transaction, Map<Long, TransactedObjectReference> replicatedFieldMemory)
    {
       boolean returnValue = true;
       /* get the reads, check the version of all fields read during the transaction against all shared versions.*/
-      for (TransactedObjectReference read : transaction.getDeferredReads().values())
+      for (TransactedObjectReference read : transaction.getDeferredReads().values()) // values() is not great performance 
       {
-         boolean fail = read.getVersion() == replicatedFieldMemory.get(read.getLookupIdentity()).getVersion();
-         if (fail)
-         {// validation failure occured
+         long readVersion = read.getVersion();
+         long currentVersion = replicatedFieldMemory.get(read.getLookupIdentity()).getVersion() ;
+         if (readVersion < currentVersion)
+         {// validation failured
             logger.info("Validation phase for STM Transaction found a serialization conflict. The validation failed for transaction.");
+            returnValue = false;
             break; // drop out of further validation. Validating is over and nothing can recover the situation
          }
       }
       return returnValue;
    }
+   private boolean isStale(TransactedObjectReference read, TransactedObjectReference current)
+   {
+      return read.getVersion() < current.getVersion();
+   }
    
+   public void abort(Map<Long, TransactedObjectReference> fieldMemory, STMTransaction transaction)
+      throws IllegalStateException
+   {
+      /* Depending on how far this transaction has progressed need to undo locks and clear 
+       * collection objects. */
+      logger.info("STMTransaction has been called to abort the transaction.");
+      try
+      {
+         if (Status.STATUS_PREPARED == transaction.getStatus()) 
+         {// release all the locks on resources
+            transaction.setStatus(Status.STATUS_MARKED_ROLLBACK);
+            for (TransactedObjectReference reference : transaction.getDeferredWrites().values())
+            {
+               TransactedObjectReference sharedReference = fieldMemory.get(reference.getLookupIdentity());
+               if (sharedReference.getPrepared().isHeldByCurrentThread())
+               {
+                  sharedReference.getPrepared().unlock();
+               }
+               else
+               {
+                  logger.error("Problem occured, prepared lock is not held by current thread. Interleaving threads not working properly.");
+               }
+            }
+            logger.info("STMTransaction has finished releasing all the locks aquired during prepare phase.");
+         }
+         transaction.setStatus(Status.STATUS_ROLLEDBACK);
+      }
+      catch (Exception e)
+      {
+         logger.error(e.getMessage(), e);
+      }
+   }
+   
+   public boolean prepare(Map<Long, TransactedObjectReference> fieldMemory, Map<Long, TransactedObjectReference> writes, int retryCount)
+   {
+      logger.info("STMTransaction has been called to prepare transaction.");
+      Deque<TransactedObjectReference> lockedFields = new ArrayDeque<TransactedObjectReference>(writes.values().size());
+      
+      
+      for (TransactedObjectReference write : writes.values())
+      {
+         // try and get the lock
+         boolean locked = fieldMemory.get(write.getLookupIdentity()).getPrepared().tryLock();
+         if (locked)
+         {
+            lockedFields.addFirst(write);
+         }
+         
+         // now validate to ensure the shared value is not updated between validation and lock
+      }
+   
+      
+      // loop through the write list, validate and attempt lock
+      
+      return false;
+   }
+    
+   
    public TransactionManager()
    {
    }

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Read.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Read.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Read.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -8,7 +8,7 @@
 
 import javax.transaction.xa.Xid;
 
-import uk.ac.ncl.sdia.a8905943.impl.TransactionImpl;
+import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
 import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
 
 
@@ -44,7 +44,7 @@
 
    }
    @Override
-   public void discardHistory(TransactionImpl transaction)
+   public void discardHistory(STMTransactionImpl transaction)
    {
       // FIXME discardHistory
       

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Write.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Write.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Write.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -8,7 +8,7 @@
 
 import javax.transaction.xa.Xid;
 
-import uk.ac.ncl.sdia.a8905943.impl.TransactionImpl;
+import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
 import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
 
 
@@ -45,7 +45,7 @@
    }
 
    @Override
-   public void discardHistory(TransactionImpl transaction)
+   public void discardHistory(STMTransactionImpl transaction)
    {
       // FIXME discardHistory
       

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/transaction/compressor/PostCommitTransactionMerger.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/transaction/compressor/PostCommitTransactionMerger.java	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/transaction/compressor/PostCommitTransactionMerger.java	2009-08-23 19:04:58 UTC (rev 29035)
@@ -6,7 +6,7 @@
  */
 package uk.ac.ncl.sdia.a8905943.transaction.compressor;
 
-import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
+import uk.ac.ncl.sdia.a8905943.stm.transaction.STMTransaction;
 
 public class PostCommitTransactionMerger
 {

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/META-INF/jboss-aop.xml
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/META-INF/jboss-aop.xml	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/META-INF/jboss-aop.xml	2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,12 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <aop xmlns="urn:jboss:aop-beans:1.0">
-   <!-- 
-   <aspect class="uk.ac.ncl.sdia.a8905943.aspects.VersioningAspectImpl"/>
-    -->
-   <!-- field pointcut -->
-   <!-- 
-   <bind pointcut="set(* uk.ac.ncl.sdia.a8905943.model.Car->*)">
-      <advice  aspect="uk.ac.ncl.sdia.a8905943.aspects.VersioningAspectImpl" name="version"/>
-   </bind>
- -->
+	<aspect name="stmreadaspect" class="uk.ac.ncl.sdia.a8905943.aspects.STMReadAspect" />
+	<aspect name="stmwriteaspect" class="uk.ac.ncl.sdia.a8905943.aspects.STMWriteAspect" />
+	<aspect name="stminjectionaspect"
+		class="uk.ac.ncl.sdia.a8905943.aspects.STMInjectionAspect" />
+
+	<bind
+		pointcut="execution(* *->@uk.ac.ncl.sdia.a8905943.aspects.annotation.STMWriteable(..))">
+		<advice name="stmwrite" aspect="stmwriteaspect" />
+	</bind>
+
+	<bind
+		pointcut="execution(* *->@uk.ac.ncl.sdia.a8905943.aspects.annotation.STMReadable(..))">
+		<advice name="stmread" aspect="stmreadaspect" />
+	</bind>
+
+	<bind
+		pointcut="field(uk.ac.ncl.sdia.a8905943.stm.STM *->@uk.ac.ncl.sdia.a8905943.stm.annotation.InjectedSTM )">
+		<advice name="access" aspect="stminjectionaspect" />
+	</bind>
+
 </aop>

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/log4j.xml
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/log4j.xml	2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/log4j.xml	2009-08-23 19:04:58 UTC (rev 29035)
@@ -37,7 +37,7 @@
 
 	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
 		<param name="Target" value="System.out" />
-		<param name="Threshold" value="INFO" />
+		<param name="Threshold" value="DEBUG" />
 
 		<layout class="org.apache.log4j.PatternLayout">
 			<!-- The default pattern: Date Priority [Category] Message\n -->



More information about the jboss-svn-commits mailing list