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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 4 10:04:53 EDT 2009


Author: whitingjr
Date: 2009-09-04 10:04:52 -0400 (Fri, 04 Sep 2009)
New Revision: 29182

Added:
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/STMAssociationReadable.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/STMAssociationWriteable.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionAdd.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionClear.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionRemove.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/BankAccountEntity.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/BankEntity.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Flight.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/untransactional/AddressEntity.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/untransactional/PersonEntity.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/PrepareParameter.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractUnitT.java
Removed:
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractTest.java
Modified:
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/.classpath
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/build.xml
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/pom.xml
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/STMInjectionAspect.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/LeccyCar.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/jdbc/STMConnection.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/persistence/xa/STMXAResource.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/model/LoadEntityParameter.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/object/TransactedObjectReference.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/object/collection/AbstractTransactedCollectionReference.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/STMTransaction.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/resources/META-INF/jboss-aop.xml
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestSTMReadAspect.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestSTMWriteAspect.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestVersioningAspectImpl.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/isolation/TestUnitRepeatableReadIsolationImpl.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/TestUnitModelReplicatedMemory.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/TestUnitSTM.java
   labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TestUnitTransactionManager.java
Log:


Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/.classpath
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/.classpath	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/.classpath	2009-09-04 14:04:52 UTC (rev 29182)
@@ -3,7 +3,6 @@
 	<classpathentry kind="src" output="target/classes" path="src/main/java"/>
 	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
 	<classpathentry kind="src" path="src/test/java"/>
-	<classpathentry kind="src" path="src/test/resources"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
 	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.generic.runtimeTarget/JBoss v5.0"/>

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/build.xml
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/build.xml	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/build.xml	2009-09-04 14:04:52 UTC (rev 29182)
@@ -1,99 +1,115 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project name="mvccsamplestm.jar" basedir="." default="usage">
-	
+
 	<target name="build">
 		<echo>Java module build task was executed.</echo>
-		
+
 		<javac destdir="${build.dir}/classes" classpathref="COMPILE_DEPENDENCIES" debug="true" target="1.6">
-			<src path="${basedir}/src/main/java"/>
+			<src path="${basedir}/src/main/java" />
 		</javac>
-		
+
+		<!--copy todir="${build.dir}/classes/uk/ac/ncl/sdia/a8905943/model">
+			<fileset dir="/home/whitingjr/eclipse/workspaces/red-hat/MVCCSampleSTM/target/classes/uk/ac/ncl/sdia/a8905943/model">
+				<include name="*.class" />
+			</fileset>
+		</copy>
+		<copy todir="${build.dir}/classes/uk/ac/ncl/sdia/a8905943/aspects">
+			<fileset dir="/home/whitingjr/eclipse/workspaces/red-hat/MVCCSampleSTM/target/classes/uk/ac/ncl/sdia/a8905943/aspects">
+				<include name="*.class" />
+			</fileset>
+		</copy>
+
+
 		<jar jarfile="${artifact-target}/MVCCSampleSTM.jar" manifest="${basedir}/src/main/resources/META-INF/MANIFEST.MF">
 			<fileset dir="${build.dir}/classes">
-				<include name="uk/ac/ncl/sdia/a8905943/**"/>
-				<patternset refid="testcase.filename.patternset"/>
+				<include name="uk/ac/ncl/sdia/a8905943/**" />
+				<patternset refid="testcase.filename.patternset" />
 			</fileset>
-			
+
 			<fileset dir="${basedir}/src/main/resources">
-				<include name="versioning-aop.xml" />
+				<include name="jboss-aop.xml" />
 			</fileset>
-			
+
 			<metainf dir="${basedir}/src/main/resources/META-INF">
-				<include name="*"/>
+				<include name="*" />
 			</metainf>
-			
-		</jar>
+
+		</jar-->
+
+		<copy tofile="${artifact-target}/MVCCSampleSTM.aop">
+			<!--fileset dir="${artifact-target}">
+				<include name="MVCCSampleSTM.jar" />
+			</fileset-->
+			<fileset dir="/home/whitingjr/eclipse/workspaces/red-hat/MVCCSampleSTM/target">
+				<include name="MVCCSampleSTM-0.0.1-SNAPSHOT.jar" />
+			</fileset>
+		</copy>
+		<copy tofile="${artifact-target}/MVCCSampleSTM.jar">
+			<fileset dir="/home/whitingjr/eclipse/workspaces/red-hat/MVCCSampleSTM/target">
+				<include name="MVCCSampleSTM-0.0.1-SNAPSHOT.jar" />
+			</fileset>
+		</copy>
 	</target>
-	
 
+
 	<target name="usage">
 		<echo>Please do not call this build file directly. Use master build script in ../MVCCSample-build directory.</echo>
 	</target>
-	
 
-	   <target name="prepare">
-	      <path id="jboss.aop.classpath">
-	         <fileset dir="../aop-lesson-1">
-	            <include name="jboss-aop-jdk50-single.jar"/>
-	         </fileset>
-	      </path>
 
-	      <path id="classpath">
-	         <path refid="jboss.aop.classpath"/>
-	         <pathelement path="classes"/>
-	      </path>
+	<target name="prepare">
+		<path id="jboss.aop.classpath">
+			<fileset dir="../aop-lesson-1">
+				<include name="jboss-aop-jdk50-single.jar" />
+			</fileset>
+		</path>
 
-	      <taskdef name="aopc" classname="org.jboss.aop.ant.AopC" classpathref="jboss.aop.classpath"/>
-	   </target>
+		<path id="classpath">
+			<path refid="jboss.aop.classpath" />
+			<pathelement path="classes" />
+		</path>
 
-	   <target name="compile" depends="prepare">
-	   	<delete dir="classes"/>
-	      <mkdir dir="classes"/>
-	      <javac srcdir="src/main/java"
-	         destdir="classes"
-	         debug="on"
-	         deprecation="on"
-	         optimize="off"
-	         includes="**">
-	         <classpath refid="classpath"/>
-	      </javac>
-	   		<javac srcdir="src/test/java"
-	   		         destdir="classes"
-	   		         debug="on"
-	   		         deprecation="on"
-	   		         optimize="off"
-	   		         includes="**">
-	   		         <classpath refid="classpath"/>
-	   		      </javac>
-	         	
-	      <copy todir="classes" filtering="no">
-	         <fileset dir="src">
-	            <include name="**/*.properties"/>
-	         </fileset>
-	      </copy>
-	   </target>
-		
-		<target name="aopc" depends="compile">
-	      <aopc compilerclasspathref="classpath" classpathref="classpath" verbose="true">
-	         <classpath path="classes"/>
-	         <src path="src/main/java"/>
-	         <aoppath path="jboss-aop.xml"/>
-	      </aopc>
-	   </target>
+		<taskdef name="aopc" classname="org.jboss.aop.ant.AopC" classpathref="jboss.aop.classpath" />
+	</target>
 
-	   <target name="run-compile-time" depends="aopc">
-	      <java fork="yes" failOnError="true" className="bank.Bank">
-	         <sysproperty key="jboss.aop.path" value="jboss-aop.xml"/>
-	         <classpath refid="classpath"/>
-	      </java>
-	   </target>
+	<target name="compile" depends="prepare">
+		<delete dir="classes" />
+		<mkdir dir="classes" />
+		<javac srcdir="src/main/java" destdir="classes" debug="on" deprecation="on" optimize="off" includes="**">
+			<classpath refid="classpath" />
+		</javac>
+		<javac srcdir="src/test/java" destdir="classes" debug="on" deprecation="on" optimize="off" includes="**">
+			<classpath refid="classpath" />
+		</javac>
 
-	   <target name="run-load-time" depends="compile">
-	      <java fork="yes" failOnError="true" className="bank.Bank">
-	         <sysproperty key="jboss.aop.path" value="jboss-aop.xml"/>
-	         <jvmarg value="-javaagent:../aop-lesson-1/jboss-aop-jdk50-single.jar"/>
-	         <classpath refid="classpath"/>
-	      </java>
-	   </target>
+		<copy todir="classes" filtering="no">
+			<fileset dir="src">
+				<include name="**/*.properties" />
+			</fileset>
+		</copy>
+	</target>
 
+	<target name="aopc" depends="compile">
+		<aopc compilerclasspathref="classpath" classpathref="classpath" verbose="true">
+			<classpath path="classes" />
+			<src path="src/main/java" />
+			<aoppath path="jboss-aop.xml" />
+		</aopc>
+	</target>
+
+	<target name="run-compile-time" depends="aopc">
+		<java fork="yes" failOnError="true" className="bank.Bank">
+			<sysproperty key="jboss.aop.path" value="jboss-aop.xml" />
+			<classpath refid="classpath" />
+		</java>
+	</target>
+
+	<target name="run-load-time" depends="compile">
+		<java fork="yes" failOnError="true" className="bank.Bank">
+			<sysproperty key="jboss.aop.path" value="jboss-aop.xml" />
+			<jvmarg value="-javaagent:../aop-lesson-1/jboss-aop-jdk50-single.jar" />
+			<classpath refid="classpath" />
+		</java>
+	</target>
+
 </project>
\ No newline at end of file

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/pom.xml
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/pom.xml	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/pom.xml	2009-09-04 14:04:52 UTC (rev 29182)
@@ -29,14 +29,12 @@
          <version>1.2.14</version>
          <scope>compile</scope>
       </dependency>
-      <!-- 
       <dependency>
-         <groupId>uk.ac.ncl.sdia.a8905943</groupId>
-         <artifactId>STMAnnotationsJAR</artifactId>
-         <version>0.0.1-SNAPSHOT</version>
+         <groupId>junit</groupId>
+         <artifactId>junit</artifactId>
+         <version>4.5</version>
          <scope>compile</scope>
       </dependency>
-       -->
 	</dependencies>
 	<build>
 		<plugins>
@@ -77,8 +75,10 @@
 					<useSystemClassLoader>false</useSystemClassLoader>
 					<argLine>-Djboss.aop.path=src/main/resources/META-INF/jboss-aop.xml</argLine>
 					<excludes>
-					    <exclude>**/AbstractTest.java</exclude>
+					    <exclude>**/AbstractTest.java</exclude> 
 					</excludes>
+					<testFailureIgnore>true</testFailureIgnore>
+					
 				</configuration>
 			</plugin>
 		</plugins>

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/STMInjectionAspect.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/STMInjectionAspect.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/STMInjectionAspect.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -11,7 +11,6 @@
 import org.jboss.aop.joinpoint.FieldWriteInvocation;
 
 import uk.ac.ncl.sdia.a8905943.factory.STMFactory;
-import uk.ac.ncl.sdia.a8905943.stm.STM;
 
 /**
  * This object injects a reference to the STM system.

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/STMAssociationReadable.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/STMAssociationReadable.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/STMAssociationReadable.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -0,0 +1,18 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.aspects.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Target ({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface STMAssociationReadable {
+
+}

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/STMAssociationWriteable.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/STMAssociationWriteable.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/STMAssociationWriteable.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -0,0 +1,18 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.aspects.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Target ({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface STMAssociationWriteable {
+
+}

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionAdd.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionAdd.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionAdd.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -0,0 +1,18 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.aspects.annotation.collections.set;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Target ({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface STMCollectionAdd {
+
+}

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionClear.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionClear.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionClear.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -0,0 +1,18 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.aspects.annotation.collections.set;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Target ({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface STMCollectionClear {
+
+}

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionRemove.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionRemove.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/aspects/annotation/collections/set/STMCollectionRemove.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -0,0 +1,18 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.aspects.annotation.collections.set;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Target ({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface STMCollectionRemove {
+
+}

Modified: 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/impl/STMTransactionImpl.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/STMTransactionImpl.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -48,15 +48,19 @@
    private Isolation isolation;
    
 
+   /**
+    * 
+    * @deprecated
+    */
    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.
-      this.status = Status.STATUS_COMMITTED;
-      releaseHeldLocks();
-      this.phaseTwoTerminated.countDown();
+      //this.status = Status.STATUS_COMMITTED;
+      //releaseHeldLocks();
+      //this.phaseTwoTerminated.countDown();
    }
 
    @Override
@@ -110,11 +114,15 @@
       return deferredReads;
    }
 
+   /**
+    * FIXME Comment this
+    *@deprecated
+    */
    public void abort()
    {
       this.status = Status.STATUS_ROLLEDBACK;
-      releaseHeldLocks();
-      this.phaseTwoTerminated.countDown();
+      //releaseHeldLocks();
+      //this.phaseTwoTerminated.countDown();
    }
 
    @Override

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/BankAccountEntity.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/BankAccountEntity.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/BankAccountEntity.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -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.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 BankAccountEntity
+{
+   @Id
+   private Long id;
+   private Double balance;
+   
+   @STMReadable public Double getBalance()
+   {
+      return balance;
+   }
+   @STMWriteable
+   public void setBalance(Double balance)
+   {
+      this.balance = balance;
+   }
+   @STMReadable
+   public Long getId()
+   {
+      return id;
+   }
+}

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/BankEntity.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/BankEntity.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/BankEntity.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -0,0 +1,50 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.model;
+
+import java.util.Collection;
+
+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;
+
+   @STMEntity public class BankEntity
+   {
+      @Id
+      private Long id;
+      private Collection<BankAccountEntity> bankAccounts;
+      @STMReadable
+      public Collection<BankAccountEntity> getBankAccounts()
+      {
+         return bankAccounts;
+      }
+      
+      
+      
+      
+   
+   
+   
+   
+   
+   
+   
+   
+   @STMWriteable
+   public void setBankAccounts(Collection<BankAccountEntity> bankAccounts)
+   {
+      this.bankAccounts = bankAccounts;
+   }
+   @STMReadable
+   public Long getId()
+   {
+      return id;
+   }
+   
+}

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Flight.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Flight.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Flight.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -0,0 +1,35 @@
+package uk.ac.ncl.sdia.a8905943.model;
+
+import java.io.Serializable;
+
+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;
+   
+   @STMEntity
+   public class Flight implements Serializable {
+      @Id
+      private java.lang.Long id;
+      private String airlineName;
+      public Long getId() {
+         return this.id;
+      }
+      @STMReadable public String getAirlineName() {
+         return this.airlineName;
+      }
+      @STMWriteable public void setAirline(String airline) {
+         this.airlineName = airline;
+      }   
+      
+      
+   
+	public Flight() {
+       super();
+       String query = "model/uk.ac.ncl.sdia.a8905943.model.Flight[airlineName='British Airways']";
+	}   
+	   /** The serialVersionUID */
+	   private static final long serialVersionUID = 1L;
+   
+}

Modified: 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	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/LeccyCar.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -6,17 +6,18 @@
  */
 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.aspects.annotation.collections.set.STMCollectionAdd;
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.collections.set.STMCollectionClear;
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.collections.set.STMCollectionRemove;
 import uk.ac.ncl.sdia.a8905943.stm.annotation.STMEntity;
 
 @STMEntity
 public class LeccyCar
 {
-   @Id
-   private Long id;
+   @javax.persistence.Id
+   private java.lang.Long id;
    private String name;
    
    /**
@@ -24,10 +25,12 @@
     * 
     * @param identity
     */
+   
    public LeccyCar(Long identity)
    {
       this.id = identity;
    }
+   @STMCollectionClear
    public Long getId()
    {
       return id;
@@ -44,3 +47,4 @@
    }
 }
 
+

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/untransactional/AddressEntity.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/untransactional/AddressEntity.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/untransactional/AddressEntity.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.model.untransactional;
+
+import javax.persistence.Id;
+
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMReadable;
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMWriteable;
+
+public class AddressEntity
+{
+   @Id
+   private Long id;
+   private String street;
+   private String town;
+   @STMReadable public String getStreet()
+   {
+      return street;
+   }
+   @STMWriteable public void setStreet(String street)
+   {
+      this.street = street;
+   }
+   @STMReadable public String getTown()
+   {
+      return town;
+   }
+   @STMWriteable public void setTown(String town)
+   {
+      this.town = town;
+   }
+   public Long getId()
+   {
+      return id;
+   }
+   
+   
+}

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/untransactional/PersonEntity.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/untransactional/PersonEntity.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/untransactional/PersonEntity.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -0,0 +1,38 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.model.untransactional;
+
+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 PersonEntity
+{
+   @Id
+   private Long id;
+   private AddressEntity address;
+   @STMReadable public AddressEntity getAddress()
+   {
+      return address;
+   }
+   @STMWriteable public void setAddress(AddressEntity address)
+   {
+      this.address = address;
+   }
+   @STMReadable
+   public Long getId()
+   {
+      return id;
+   }
+   
+   public PersonEntity(Long identity)
+   {
+      this.id = identity;
+   }
+}

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/jdbc/STMConnection.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/jdbc/STMConnection.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/jdbc/STMConnection.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -66,7 +66,7 @@
       {
          logger.debug("STMConnection.commit called.");
       }
-      
+      this.xaConnection.getSTM().commit(); // called for 1phase commit
    }
 
    @Override

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-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -10,8 +10,8 @@
 import java.io.Serializable;
 import java.sql.SQLException;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import javax.naming.NamingException;
 import javax.naming.Reference;
@@ -37,10 +37,10 @@
    private String user = StringUtils.EMPTY;
    private static final String SERVER_NAME = "serverName"; // this field is ignored except for calculating equals method
    private static final String DATABASE_NAME = "databaseName";
-   private static final ConcurrentHashMap<String, STM> stmDatabases = new ConcurrentHashMap<String, STM>();
+   private static final ConcurrentMap<String, STM> stmDatabases = new ConcurrentHashMap<String, STM>();
    private static final Logger logger = Logger.getLogger(STMXADatasourceImpl.class );
-   private Map<Long, TransactedObjectReference> transactedFieldStore ; 
-   private Map<String, List<Object>> transactedModelStore;
+   private ConcurrentMap<Long, TransactedObjectReference> transactedFieldStore ; 
+   private ConcurrentMap<String, List<Object>> transactedModelStore;
 
    /** The serialVersionUID */
    private static final long serialVersionUID = 2341586268344164513L;
@@ -61,7 +61,7 @@
          logger.debug("The XA Datasource is providing an XAConnection ");
       }
       STMXAConnectionImpl returnValue = null;
-      if (stmDatabases.contains(getDatabaseName()))
+      if (stmDatabases.containsKey(getDatabaseName()))
       {
          returnValue = new STMXAConnectionImpl(this, stmDatabases.get(getDatabaseName()));
       }

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXAResource.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXAResource.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXAResource.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -82,7 +82,11 @@
          {
             throw new XAException(XAException.XAER_NOTA);
          }
-         //TODO: perform two phase commit of prepared changes.
+         boolean committed = this.xaConnection.getSTM().commit();
+         if (!committed)
+         {
+            throw new XAException(XAException.XA_RBOTHER);
+         }
       }
    }
 
@@ -198,6 +202,7 @@
    @Override
    public int prepare(Xid xId) throws XAException
    {
+      int returnValue = XAResource.XA_RDONLY;
       if (logger.isDebugEnabled())
       {
          logger.debug("XAResource.prepare called.");
@@ -206,9 +211,25 @@
       {
          logger.trace("XAResource.prepare called for branch [" + xId + "].");
       }
-      isXidRecognised(xId);
-
-      return 0;
+      if (!this.xaConnection.isActive())
+      {
+         throw new XAException(XAException.XA_RBPROTO);
+      }
+      if (!isXidRecognised(xId))
+      {
+         throw new XAException(XAException.XAER_NOTA);
+      }
+      boolean prepared = this.xaConnection.getSTM().prepare();
+      if (prepared)
+      {
+         returnValue = XAResource.XA_OK;
+      }
+      else
+      {
+         throw new XAException(XAException.XA_RBOTHER);
+      }
+      
+      return returnValue;
    }
 
    @Override
@@ -227,24 +248,33 @@
    }
 
    @Override
-   public void rollback(Xid arg0) throws XAException
+   public void rollback(Xid xId) throws XAException
    {
       if (logger.isDebugEnabled())
       {
          logger.debug("XAResource.rollback called.");
       }
-      // pass instruction through to STM system to rollback any prepared resources
+      if (!isActive(xId))
+      {
+         throw new XAException(XAException.XAER_NOTA);
+      }
+      if (!isXidRecognised(xId))
+      {
+         throw new XAException(XAException.XAER_NOTA);
+      }
+      this.xaConnection.getSTM().abort();
+      
    }
 
    @Override
-   public boolean setTransactionTimeout(int arg0) throws XAException
+   public boolean setTransactionTimeout(int timeout) throws XAException
    {
-      if (logger.isDebugEnabled())
+      if (logger.isTraceEnabled())
       {
-         logger.debug("XAResource.setTransactionTimeout called.");
+         logger.trace("XAResource.setTransactionTimeout called. ["+timeout+"].");
       }
-      getXAConnection().getSTM().set
-      return false;
+      getXAConnection().getSTM().setTimeout(timeout);
+      return true;
    }
 
    /**

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-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/STM.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -2,17 +2,22 @@
 
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentMap;
 
+import javax.transaction.Status;
+
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.log4j.Logger;
 
 import uk.ac.ncl.sdia.a8905943.factory.TransactionFactory;
+import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
 import uk.ac.ncl.sdia.a8905943.isolation.factory.IsolationFactory;
 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.PrepareParameter;
 import uk.ac.ncl.sdia.a8905943.stm.transaction.STMTransaction;
 import uk.ac.ncl.sdia.a8905943.stm.transaction.TransactionManager;
 
@@ -27,8 +32,8 @@
 {
    private final String databaseName;
    private static final Logger logger = Logger.getLogger(STM.class);
-   private final Map<Long, TransactedObjectReference> transactedFieldMemory ;
-   private final Map<String, List<Object>> transactedModelMemory;
+   private final ConcurrentMap<Long, TransactedObjectReference> transactedFieldMemory ;
+   private final ConcurrentMap<String, List<Object>> transactedModelMemory;
    private final TransactionManager transactionManager = new TransactionManager();
    private ThreadLocal<Integer> isolationLevel = new ThreadLocal<Integer>();
    private ThreadLocal<Integer> timeoutPeriod = new ThreadLocal<Integer>();
@@ -58,7 +63,7 @@
       return transaction.read(fieldRead); 
    }
 
-   public STM(String name, Map<Long, TransactedObjectReference> transactedFieldMemory, Map<String, List<Object>> transactedModelMemory)
+   public STM(String name, ConcurrentMap<Long, TransactedObjectReference> transactedFieldMemory, ConcurrentMap<String, List<Object>> transactedModelMemory)
    {
       this.databaseName = name;
       this.transactedFieldMemory = transactedFieldMemory;
@@ -84,15 +89,21 @@
             }
          }
       }
-      return returnValue;
+      return returnValue;   
    }
    
    /** 
     * Commit the current transaction
     */
-   public void commit()
+   public boolean commit()
    {
+      boolean returnValue = true;
+      STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
+      transaction.setStatus(Status.STATUS_COMMITTING);
+      returnValue =  this.transactionManager.commit(transaction, this.transactedFieldMemory);
       logger.debug("commit invoked on stm");
+      transaction.setStatus(Status.STATUS_COMMITTED);
+      return returnValue;
    }
    /**
     * The changes stored in this transaction are not going to persistent store
@@ -100,11 +111,12 @@
     */
    public void abort()
    {
-      //TODO: jrw complete, complete implementation to release (unlock) prepared resources.
+      STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
+      transaction.setStatus(Status.STATUS_MARKED_ROLLBACK);
       this.isolationLevel.remove();
-      STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
       this.transactionManager.abort(this.transactedFieldMemory, transaction);
       TransactionFactory.getFactory().deallocate(); 
+      transaction.setStatus(Status.STATUS_ROLLEDBACK);
    }
    /**
     * Notify the transactional system the changes should be locked for future
@@ -114,10 +126,19 @@
    {
       boolean returnValue = false;
       STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
+      transaction.setStatus(Status.STATUS_PREPARING);
       /* Calculate the expiry milliseconds, prevents the thread going beyond the timeout
        * the TM is using. */
       long expiryTime = System.currentTimeMillis() + this.timeoutPeriod.get().longValue() - EXPIRE_BEFORE_TIMEOUT;
-      returnValue = this.transactionManager.prepare(this.transactedFieldMemory, transaction.getDeferredWrites(), RETRY_COUNT, expiryTime);
+      returnValue = this.transactionManager.prepare(new PrepareParameter(this.transactedFieldMemory, RETRY_COUNT, expiryTime, transaction));
+      if (returnValue)
+      {
+         transaction.setStatus(Status.STATUS_PREPARED);
+      }
+      else
+      {
+         transaction.setStatus(Status.STATUS_MARKED_ROLLBACK);
+      }
       return returnValue; //returning false will cause the transaction to be aborted
    }
    
@@ -135,10 +156,12 @@
    {
       logger.debug("begin invoked on stm system.");
       STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(true);
+      this.transactionManager.addTransaction((STMTransactionImpl)transaction);
       if (null != this.isolationLevel.get())
       {
+         transaction.setStatus(Status.STATUS_ACTIVE);
          transaction.setIsolationLevel(IsolationFactory.createIsolationLevel(this.isolationLevel.get()));
-         this.isolationLevel.remove();
+         //this.isolationLevel.remove();
       }
       else
       {
@@ -150,6 +173,7 @@
     */
    public void discard()
    {
+      logger.debug("STM.discard called.");
       this.isolationLevel.remove();
       STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
       this.transactionManager.abort(this.transactedFieldMemory, transaction);
@@ -177,11 +201,11 @@
    public void end()
    {
       //TODO:jrw, errm, do something......
-      
+      logger.debug("STM.end() called.");
    }
    public Object loadEntity(LoadEntityParameter entityLoad)
    {
-      entityLoad.setReplicatedModelMemory(this.transactedModelMemory);
+      entityLoad.setModelMemory(this.transactedModelMemory);
       STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
       
       return transaction.load(entityLoad);
@@ -204,4 +228,9 @@
       }
       
    }
+   
+   public Map<Long, TransactedObjectReference> getFieldStore()
+   {
+      return this.transactedFieldMemory;
+   }
 }

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/model/LoadEntityParameter.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/model/LoadEntityParameter.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/model/LoadEntityParameter.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -13,7 +13,7 @@
 {
    private String entityFQCN;
    private Long identity;
-   private Map<String, List<Object>> replicatedModelMemory;
+   private Map<String, List<Object>> modelMemory;
    
    
    public String getEntityFQCN()
@@ -32,13 +32,13 @@
    {
       this.identity = identity;
    }
-   public Map<String, List<Object>> getReplicatedModelMemory()
+   public Map<String, List<Object>> getModelMemory()
    {
-      return replicatedModelMemory;
+      return modelMemory;
    }
-   public void setReplicatedModelMemory(Map<String, List<Object>> replicatedModelMemory)
+   public void setModelMemory(Map<String, List<Object>> replicatedModelMemory)
    {
-      this.replicatedModelMemory = replicatedModelMemory;
+      this.modelMemory = replicatedModelMemory;
    }
    
 }

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/object/TransactedObjectReference.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/object/TransactedObjectReference.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/object/TransactedObjectReference.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -7,6 +7,8 @@
 package uk.ac.ncl.sdia.a8905943.stm.object;
 
 import java.io.Serializable;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.commons.lang.builder.EqualsBuilder;
@@ -16,48 +18,49 @@
    /** The serialVersionUID */
    private static final long serialVersionUID = 2497531722707627406L;
    final Long lookupIdentity;
-   protected Object value;
-   protected Long nextIdentity;
-   protected Long version;
+   protected AtomicReference<Object> value = new AtomicReference<Object>();
+   //protected AtomicLong nextIdentity = new AtomicLong();
+   protected AtomicLong version = new AtomicLong();
    transient final ReentrantLock prepared = new ReentrantLock(true);
+   protected transient Long preparedVersion ;
    
    public TransactedObjectReference(Long identity, Object value, long version)
    {
       lookupIdentity = identity;
-      this.value = value; 
-      this.version = version;
+      this.value.set( value); 
+      this.version.set( version);
    }
 
    public Object getValue()
    {
-      return value;
+      return value.get();
    }
 
    public Long getLookupIdentity()
    {
       return lookupIdentity;
    }
-
+/*
    public Long getNextIdentity()
    {
-      return nextIdentity;
+      return nextIdentity.get();
    }
 
    public void setNextIdentity(Long nextIdentity)
    {
-      this.nextIdentity = nextIdentity;
-   }
+      this.nextIdentity.set( nextIdentity);
+   }*/
    public long getVersion()
    {
-      return version;
+      return version.get();
    }
    public void setVersion(long version)
    {
-      this.version = version;
+      this.version.set( version);
    }
    public void setValue(Object value)
    {
-      this.value = value;
+      this.value.set(  value);
    }
    @Override
    public boolean equals(Object other)
@@ -85,4 +88,14 @@
    {
       return prepared;
    }
+
+   public Long getPreparedVersion()
+   {
+      return preparedVersion;
+   }
+
+   public void setPreparedVersion(Long preparedVersion)
+   {
+      this.preparedVersion = preparedVersion;
+   }
 }

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/object/collection/AbstractTransactedCollectionReference.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/object/collection/AbstractTransactedCollectionReference.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/object/collection/AbstractTransactedCollectionReference.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -7,6 +7,7 @@
 package uk.ac.ncl.sdia.a8905943.stm.object.collection;
 
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
 
 import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
 
@@ -16,6 +17,7 @@
    
    /** The serialVersionUID */
    private static final long serialVersionUID = -8692532420551821737L;
+   protected AtomicLong nextIdentity = new AtomicLong();; 
 
    public AbstractTransactedCollectionReference(Long identity, Object value, long version, Map<Long, TransactedObjectReference> transactionalFieldStore)
    {
@@ -30,4 +32,14 @@
    {
       return getBuilder().construct(this);
    }
+
+   protected Long getNextIdentity()
+   {
+      return nextIdentity.get();
+   }
+
+   protected void setNextIdentity(Long nextIdentity)
+   {
+      this.nextIdentity.set( nextIdentity);
+   }
 }

Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/PrepareParameter.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/PrepareParameter.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/PrepareParameter.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -0,0 +1,59 @@
+/*
+ * 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.stm.object.TransactedObjectReference;
+
+/**
+ * 
+ * This object encapsulates the variables needed to prepare a transaction.
+ * 
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+public final class PrepareParameter
+{
+   private final Map<Long, TransactedObjectReference> fieldMemory;
+
+   private final int retryCount;
+
+   private final long expiredTime;
+
+   private final STMTransaction transaction;
+
+   public PrepareParameter(Map<Long, TransactedObjectReference> fieldMemory, int retryCount, long expiredTime,
+         STMTransaction transaction)
+   {
+      this.fieldMemory = fieldMemory;
+      this.retryCount = retryCount;
+      this.expiredTime = expiredTime;
+      this.transaction = transaction;
+   }
+
+   public Map<Long, TransactedObjectReference> getFieldMemory()
+   {
+      return fieldMemory;
+   }
+
+      public int getRetryCount()
+   {
+      return retryCount;
+   }
+   public long getExpiredTime()
+   {
+      return expiredTime;
+   }
+
+
+   public STMTransaction getTransaction()
+   {
+      return transaction;
+   }
+
+}
\ No newline at end of file

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/STMTransaction.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/STMTransaction.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/STMTransaction.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -7,6 +7,7 @@
 package uk.ac.ncl.sdia.a8905943.stm.transaction;
 
 import java.util.Map;
+import java.util.concurrent.CountDownLatch;
 
 import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
 import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
@@ -31,6 +32,8 @@
    public void startTransaction();
    public Object load(LoadEntityParameter load);
    public Map<Long, TransactedObjectReference> getDeferredWrites();
+   public Map<Long, TransactedObjectReference> getDeferredReads();
    public void setStatus(int status);
    public Long getVersion();
+   public CountDownLatch getPhaseTwoTerminated();
 }

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-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TransactionManager.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -7,9 +7,11 @@
 package uk.ac.ncl.sdia.a8905943.stm.transaction;
 
 import java.util.ArrayDeque;
+import java.util.Collection;
 import java.util.Deque;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -17,13 +19,12 @@
 
 import org.apache.log4j.Logger;
 
-import uk.ac.ncl.sdia.a8905943.factory.TransactionFactory;
 import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
 import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
 
 public class TransactionManager
 {
-   private final Map<Long, STMTransactionImpl> transactionsKeyedByVersion = new ConcurrentHashMap<Long, STMTransactionImpl>();
+   private final ConcurrentMap<Long, STMTransactionImpl> transactionsKeyedByVersion = new ConcurrentHashMap<Long, STMTransactionImpl>();
    private static final Logger logger = Logger.getLogger(TransactionManager.class);
 
    public STMTransactionImpl findTransaction(Long version)
@@ -32,29 +33,16 @@
    }
    public boolean addTransaction(STMTransactionImpl transaction)
    {
-      return (null == this.transactionsKeyedByVersion.put(transaction.getVersion() , transaction) ? Boolean.TRUE.booleanValue(): Boolean.FALSE.booleanValue());
-   }
-   
-   /**
-    * The purpose of this method is to lock all resources needed by the transaction. Need to keep a list of the 
-    * fields locked. On a detected conflict backout. This means unlocking resources in reverse order.
-    * 
-    * Also, between the validation and this prepare a concurrent transaction may have updated a 
-    * field. Need to validate again after aquiring the lock. Yes this is not a great performance but
-    * at least it will work. 
-    * Doing the "lock then validate" in reverse closes any window for a concurrent transaction to update the
-    * field. Again, upon any validation failure unlock the resources in reverse order. 
-    * 
-    * @param transaction the transaction to prepare
-    * @return did the prepare of resources succeed without conflict
-    */
-   public boolean prepare(STMTransactionImpl transaction)
-   {
       boolean returnValue = false;
-      
-      //TODO: jrw complete implemenation
+      if (null != transaction)
+      {
+         Object present = this.transactionsKeyedByVersion.put(transaction.getVersion() , transaction);
+         returnValue = (null == present);
+      }
       return returnValue;
    }
+   
+   
    /**
     * The purpose of this validate is to check all the fields in the transaction object
     * for reads that are now stale.
@@ -92,14 +80,16 @@
       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())
+         transaction.setStatus(Status.STATUS_MARKED_ROLLBACK);
+         for (TransactedObjectReference reference : transaction.getDeferredWrites().values())
+         {
+            TransactedObjectReference sharedReference = fieldMemory.get(reference.getLookupIdentity());
+            if (null != sharedReference)
             {
-               TransactedObjectReference sharedReference = fieldMemory.get(reference.getLookupIdentity());
                if (sharedReference.getPrepared().isHeldByCurrentThread())
                {
+                  sharedReference.setPreparedVersion(null);
+                  //sharedReference.notifyAll();
                   sharedReference.getPrepared().unlock();
                }
                else
@@ -107,62 +97,102 @@
                   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.");
          }
+         logger.info("STMTransaction has finished releasing all the locks aquired during prepare phase.");
          transaction.setStatus(Status.STATUS_ROLLEDBACK);
+         transaction.getPhaseTwoTerminated().countDown();
       }
       catch (Exception e)
       {
          logger.error(e.getMessage(), e);
       }
    }
+   /**
+    * The purpose of this method is to lock all resources needed by the transaction. Need to keep a list of the 
+    * fields locked. On a detected conflict backout. This means unlocking resources in reverse order.
+    * 
+    * Also, between the validation and this prepare a concurrent transaction may have updated a 
+    * field. Need to validate again after aquiring the lock. Yes this is not a great performance but
+    * at least it will work. 
+    * Doing the "lock then validate" in reverse closes any window for a concurrent transaction to update the
+    * field. Again, upon any validation failure unlock the resources in reverse order. 
+    * 
+    * @param transaction the transaction to prepare
+    * @return did the prepare of resources succeed without conflict
+    */
    
    /**
     * Purpose of this method is to prepare the transaction resources. Will acquire locks
-    * on each field. On a detected conflict back out and retry. Either
+    * on each field. On a detected conflict back out and retry.
+    * On detected conflict with prepared transaction get the 2nd phase termination latch, wait (bounded timeout) for it to open.  
+    * @param prepareParameter All the objects necessary to prepare the transaction
+    * @param writes
     * 
-    * @param fieldMemory
-    * @param writes
-    * @param retryCount
-    * @return
+    * @return prepared transaction, all reasources are locked
     */
-   public boolean prepare(Map<Long, TransactedObjectReference> fieldMemory, Map<Long, TransactedObjectReference> writes, int retryCount, long expiredTime)
+   public boolean prepare(PrepareParameter prepareParameter)
    {
       logger.info("STMTransaction has been called to prepare transaction.");
       boolean returnValue = false;
-      for (int count = 0 ; count < retryCount ; count = count + 1)
+      for (int count = 0 ; count < prepareParameter.getRetryCount() ; count = count + 1)
       {
          boolean backout = false;
+         boolean abort = false;
          CountDownLatch latch = null;
          
-         Deque<TransactedObjectReference> lockedFields = new ArrayDeque<TransactedObjectReference>(writes.values().size());
-         for (TransactedObjectReference write : writes.values())
+         
+         Deque<TransactedObjectReference> lockedFields = new ArrayDeque<TransactedObjectReference>(prepareParameter.getTransaction().getDeferredWrites().values().size());
+         for (TransactedObjectReference write : prepareParameter.getTransaction().getDeferredWrites().values())
          {// loop through the write list, attempt lock and validate
             // try and get the lock
-               boolean locked = fieldMemory.get(write.getLookupIdentity()).getPrepared().tryLock();
+               TransactedObjectReference sharedField = prepareParameter.getFieldMemory().get(write.getLookupIdentity());
+               boolean locked = sharedField.getPrepared().tryLock();
                if (locked)
                {
+                  /* Invariant alert: small window between lock acquisition and setting of prepared version. TODO: refactor*/
+                  sharedField.setPreparedVersion(prepareParameter.getTransaction().getVersion());
                   lockedFields.addFirst(write);
+                  if (isStale(prepareParameter.getTransaction().getDeferredReads().get(write.getLookupIdentity()), prepareParameter.getFieldMemory().get(write.getLookupIdentity())))
+                  {// this transaction is invalidated, the shared version of data has been updated 
+                     backout = true;
+                     abort = true;
+                     sharedField = null;
+                     break;
+                  }
                   // now validate to ensure the shared value is not updated between validation and lock
                }
                else
-               {// conflict detected, determine whether to backout, this creates a DAG using the transaction version 
-                  if (isBackoutNecessary(this.findTransaction( write.getVersion()), this.findTransaction(fieldMemory.get(write.getLookupIdentity()).getVersion())))
+               {// conflict detected, determine whether to backout, this creates a DAG using the transaction version
+                  STMTransaction compareTo = this.findTransaction(sharedField.getPreparedVersion());
+                  if (isBackoutNecessary(prepareParameter.getTransaction() , compareTo ))
                   {
                      backout = true;
-                     STMTransactionImpl preparedTransaction = this.findTransaction(fieldMemory.get(write.getLookupIdentity()).getVersion());
+                     STMTransactionImpl preparedTransaction = this.findTransaction(prepareParameter.getFieldMemory().get(write.getLookupIdentity()).getVersion());
                      if (Status.STATUS_PREPARED ==  preparedTransaction.getStatus())
                      {// other transaction is prepared, get latch and wait for transaction 2nd phase termination
                         latch =  preparedTransaction.getPhaseTwoTerminated();
+                        preparedTransaction = null;
+                        compareTo = null;
+                        sharedField = null;
                         break;
                      }
                   }
                   else
                   {// entitled to acquire the lock
-                     fieldMemory.get(write.getLookupIdentity()).getPrepared().lock();
+                     //prepareParameter.getFieldMemory().get(write.getLookupIdentity()).getPrepared().lock(); // this is going to block, is this really the desired behaviour ?
+                     //TODO: check for livelock
+                     backout = true;
                   }
                }
          }
+         if (!backout && null == latch)
+         {// no problem acquiring locks, clear out deque and change status
+            lockedFields.clear();
+            prepareParameter.getTransaction().setStatus(Status.STATUS_PREPARED);
+            returnValue = true;
+            break; // break out of retry loop
+         }
+         
          if (backout)
          {// release all the locks acquired to complete backout
             for (TransactedObjectReference locked  : lockedFields)
@@ -171,6 +201,8 @@
                {
                   if (locked.getPrepared().isHeldByCurrentThread())
                   {// small window here when this thread is barged from the lock
+                     locked.setPreparedVersion(null);
+                     locked.getPrepared().notifyAll();
                      locked.getPrepared().unlock();
                   }
                }
@@ -179,12 +211,18 @@
                   logger.warn(imse.getMessage(), imse);
                }
             }
+            lockedFields.clear();
          }
+         if (abort)
+         {// drop out of retry loop and return a false vote for prepared
+            break;
+         }
+         
          if (null != latch)
          {// await the latch being released or timeout
             try
             {
-               latch.await(expiredTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
+               latch.await(prepareParameter.getExpiredTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
             }
             catch (InterruptedException ie)
             {
@@ -192,9 +230,7 @@
             }
          }
       }
-       
-      
-      return false;
+      return returnValue;
    }
    
    /**
@@ -218,11 +254,53 @@
       return returnValue;
    }
    
-   private boolean locksAcquired()
+   /**
+    * Make all the changes to the shared version of system state.
+    * 
+    * @param transaction
+    * @param fieldMemory
+    * @return success indicator
+    */
+   public boolean commit(STMTransaction transaction, ConcurrentMap<Long, TransactedObjectReference> fieldMemory)
    {
-      
+      boolean returnValue = false;
+      boolean isValid = true;
+      // loop through all the writes and swap them for the current value.
+      Collection<TransactedObjectReference> collection = transaction.getDeferredWrites().values();
+      for (TransactedObjectReference deferredWrite  : collection)
+      {// replace the values, retain the prepared lock
+         // quick validation nothing has been modified. should not happen because locks have been acquired.
+         TransactedObjectReference sharedReference = fieldMemory.get(deferredWrite.getLookupIdentity());
+         if (isStale( transaction.getDeferredReads().get( deferredWrite.getLookupIdentity()),sharedReference))
+         {
+            logger.error("STM TransactionManager has detected a validation error during commit. A field is stale. ["+deferredWrite.toString()+"]");
+            isValid = false;
+            break;
+         }
+         /* don't really want to substitute the shared version with the deferred write. 
+          * should update values and use the count down latch to notify resource available. */
+         // go ahead and replace all the values inside the shared transacted reference.
+         sharedReference.setValue(deferredWrite.getValue());
+         sharedReference.setVersion(deferredWrite.getVersion());
+         sharedReference.setPreparedVersion(null);
+      }
+      if (isValid)
+      {
+         for (TransactedObjectReference deferredWrite  : collection)
+         {// release the locks
+            TransactedObjectReference sharedReference = fieldMemory.get(deferredWrite.getLookupIdentity());
+            if (sharedReference.getPrepared().isHeldByCurrentThread())
+            {
+               sharedReference.getPrepared().unlock();
+            }
+         }
+         transaction.getPhaseTwoTerminated().countDown();
+         returnValue = true;
+      }
+      return returnValue;
    }
    
+   
    private boolean isExpired(long expiryTime)
    {
       return expiryTime > System.currentTimeMillis();

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-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/META-INF/jboss-aop.xml	2009-09-04 14:04:52 UTC (rev 29182)
@@ -5,7 +5,7 @@
 	<aspect name="stminjectionaspect"
 		class="uk.ac.ncl.sdia.a8905943.aspects.STMInjectionAspect" />
 
-	<bind
+	<!-- bind
 		pointcut="execution(* *->@uk.ac.ncl.sdia.a8905943.aspects.annotation.STMWriteable(..))">
 		<advice name="stmwrite" aspect="stmwriteaspect" />
 	</bind>
@@ -18,6 +18,20 @@
 	<bind
 		pointcut="field(uk.ac.ncl.sdia.a8905943.stm.STM *->@uk.ac.ncl.sdia.a8905943.stm.annotation.InjectedSTM )">
 		<advice name="access" aspect="stminjectionaspect" />
-	</bind>
+	</bind-->
 
+   <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/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestSTMReadAspect.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestSTMReadAspect.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestSTMReadAspect.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -11,9 +11,9 @@
 import org.junit.Test;
 
 import uk.ac.ncl.sdia.a8905943.model.Bike;
-import uk.ac.ncl.sdia.a8905943.stm.AbstractTest;
+import uk.ac.ncl.sdia.a8905943.stm.AbstractUnitT;
 
-public class TestSTMReadAspect extends AbstractTest
+public class TestSTMReadAspect extends AbstractUnitT
 {
    /**
     * This test checks the read aspect is invoked. 

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestSTMWriteAspect.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestSTMWriteAspect.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestSTMWriteAspect.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -5,7 +5,7 @@
 
 import uk.ac.ncl.sdia.a8905943.model.Bike;
 import uk.ac.ncl.sdia.a8905943.model.LeccyCar;
-import uk.ac.ncl.sdia.a8905943.stm.AbstractTest;
+import uk.ac.ncl.sdia.a8905943.stm.AbstractUnitT;
 
 /*
  * JBoss, the OpenSource J2EE webOS
@@ -14,7 +14,7 @@
  * See terms of license at gnu.org.
  */
 
-public class TestSTMWriteAspect extends AbstractTest
+public class TestSTMWriteAspect extends AbstractUnitT
 {
    /**
     * Use the mvn test command to execute

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestVersioningAspectImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestVersioningAspectImpl.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/aspects/TestVersioningAspectImpl.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -12,9 +12,9 @@
 import org.junit.Test;
 
 import uk.ac.ncl.sdia.a8905943.model.Car;
-import uk.ac.ncl.sdia.a8905943.stm.AbstractTest;
+import uk.ac.ncl.sdia.a8905943.stm.AbstractUnitT;
 
-public class TestVersioningAspectImpl extends AbstractTest
+public class TestVersioningAspectImpl extends AbstractUnitT
 {
    /* use the eclipse AOP debbugger to run these AOP test 
     * See README.txt for instructions to setup eclipse.

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/isolation/TestUnitRepeatableReadIsolationImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/isolation/TestUnitRepeatableReadIsolationImpl.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/isolation/TestUnitRepeatableReadIsolationImpl.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -14,11 +14,11 @@
 import uk.ac.ncl.sdia.a8905943.handle.HandleUtils;
 import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
 import uk.ac.ncl.sdia.a8905943.model.Car;
-import uk.ac.ncl.sdia.a8905943.stm.AbstractTest;
+import uk.ac.ncl.sdia.a8905943.stm.AbstractUnitT;
 import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
 import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
 
-public class TestUnitRepeatableReadIsolationImpl extends AbstractTest
+public class TestUnitRepeatableReadIsolationImpl extends AbstractUnitT
 {
 
    @Test

Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractTest.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractTest.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractTest.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -1,58 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- * 
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.stm;
-
-import java.sql.Connection;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import junit.framework.Assert;
-
-import org.junit.After;
-import org.junit.Before;
-
-import uk.ac.ncl.sdia.a8905943.factory.STMFactory;
-import uk.ac.ncl.sdia.a8905943.factory.TransactionFactory;
-import uk.ac.ncl.sdia.a8905943.stm.exception.IsolationLevelNotConfiguredException;
-import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
-
-public class AbstractTest
-{
-   protected STM stm = null;
-   protected Map<Long, TransactedObjectReference> fieldStore = null;
-   protected Map<String, List<Object>> modelStore = null;
-
-   
-   @Before
-   public void setUp()
-   {
-      this.fieldStore = new ConcurrentHashMap<Long, TransactedObjectReference>();
-      this.modelStore = new ConcurrentHashMap<String, List<Object>>();
-      this.stm  = new STM("retail", this.fieldStore, this.modelStore);
-      STMFactory.getFactoryInstance().allocate(this.stm);
-      stm.setCurrentTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
-      try
-      {
-         this.stm.begin();
-      }
-      catch (IsolationLevelNotConfiguredException ilnce)
-      {
-         Assert.fail(ilnce.getMessage());
-      }
-   }
-   
-   @After
-   public void tearDown()
-   {
-      STMFactory.getFactoryInstance().getCurrent().abort();
-      STMFactory.getFactoryInstance().deallocate();
-      TransactionFactory.getFactory().deallocate();
-      
-   }
-
-}

Copied: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractUnitT.java (from rev 29036, labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractTest.java)
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractUnitT.java	                        (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractUnitT.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -0,0 +1,60 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ * 
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.stm;
+
+import java.sql.Connection;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import junit.framework.Assert;
+
+import org.junit.After;
+import org.junit.Before;
+
+import uk.ac.ncl.sdia.a8905943.factory.STMFactory;
+import uk.ac.ncl.sdia.a8905943.factory.TransactionFactory;
+import uk.ac.ncl.sdia.a8905943.stm.exception.IsolationLevelNotConfiguredException;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
+
+public class AbstractUnitT
+{
+   protected STM stm = null;
+   protected ConcurrentMap<Long, TransactedObjectReference> fieldStore = null;
+   protected ConcurrentMap<String, List<Object>> modelStore = null;
+
+   
+   @Before
+   public void setUp()
+   {
+      this.fieldStore = new ConcurrentHashMap<Long, TransactedObjectReference>();
+      this.modelStore = new ConcurrentHashMap<String, List<Object>>();
+      this.stm  = new STM("retail", this.fieldStore, this.modelStore);
+      STMFactory.getFactoryInstance().allocate(this.stm);
+      stm.setCurrentTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
+      stm.setTimeout(10000);
+      try
+      {
+         this.stm.begin();
+      }
+      catch (IsolationLevelNotConfiguredException ilnce)
+      {
+         Assert.fail(ilnce.getMessage());
+      }
+     
+   }
+   
+   @After
+   public void tearDown()
+   {
+      STMFactory.getFactoryInstance().getCurrent().abort();
+      STMFactory.getFactoryInstance().deallocate();
+      TransactionFactory.getFactory().deallocate();
+      
+   }
+
+}

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/TestUnitModelReplicatedMemory.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/TestUnitModelReplicatedMemory.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/TestUnitModelReplicatedMemory.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -26,7 +26,7 @@
  * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
  * @version $Revision: 1.1 $
  */
-public class TestUnitModelReplicatedMemory extends AbstractTest
+public class TestUnitModelReplicatedMemory extends AbstractUnitT
 {
    
    /**

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/TestUnitSTM.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/TestUnitSTM.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/TestUnitSTM.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -7,8 +7,8 @@
 package uk.ac.ncl.sdia.a8905943.stm;
 
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.junit.Test;
 
@@ -22,8 +22,8 @@
    public void checkIsolationSetBeforeBeginningTransaction()
       throws IsolationLevelNotConfiguredException  
    { // expected to throw an exception when stm instructred to begin before configured
-      Map<Long, TransactedObjectReference> fieldStore = new ConcurrentHashMap<Long, TransactedObjectReference>();
-      Map<String, List<Object>> modelStore = new ConcurrentHashMap<String, List<Object>>();
+      ConcurrentMap<Long, TransactedObjectReference> fieldStore = new ConcurrentHashMap<Long, TransactedObjectReference>();
+      ConcurrentMap<String, List<Object>> modelStore = new ConcurrentHashMap<String, List<Object>>();
       
       STM stm = new STM("retail", fieldStore, modelStore);
       STMFactory.getFactoryInstance().allocate(stm);

Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TestUnitTransactionManager.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TestUnitTransactionManager.java	2009-09-04 14:03:20 UTC (rev 29181)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TestUnitTransactionManager.java	2009-09-04 14:04:52 UTC (rev 29182)
@@ -6,18 +6,27 @@
  */
 package uk.ac.ncl.sdia.a8905943.stm.transaction;
 
+import java.sql.Connection;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+
+import javax.transaction.Status;
+
 import junit.framework.Assert;
 
 import org.junit.Test;
 
+import uk.ac.ncl.sdia.a8905943.factory.STMFactory;
 import uk.ac.ncl.sdia.a8905943.factory.TransactionFactory;
 import uk.ac.ncl.sdia.a8905943.handle.HandleUtils;
 import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
 import uk.ac.ncl.sdia.a8905943.model.Car;
-import uk.ac.ncl.sdia.a8905943.stm.AbstractTest;
+import uk.ac.ncl.sdia.a8905943.stm.AbstractUnitT;
+import uk.ac.ncl.sdia.a8905943.stm.STM;
+import uk.ac.ncl.sdia.a8905943.stm.exception.IsolationLevelNotConfiguredException;
 import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
 
-public class TestUnitTransactionManager extends AbstractTest
+public class TestUnitTransactionManager extends AbstractUnitT
 {
    /**
     * This test constructs a valid number of reads and validates them against the shared version.
@@ -65,10 +74,177 @@
       TransactedObjectReference concurrentUpdate = new TransactedObjectReference(handle, make, 3l);
       this.fieldStore.put(handle, concurrentUpdate);
       
-      TransactionManager transactionManager = new TransactionManager();
       Assert.assertEquals(1, transaction.getDeferredReads().size());
       Assert.assertEquals( 1, this.fieldStore.size());
-      Assert.assertFalse( transactionManager.validate(transaction, this.fieldStore));
+      Assert.assertFalse( this.stm.prepare());
    }
    
+   @Test
+   public void testPrepareOnNoConflictTransactionWorks()
+   {
+      Assert.assertNotNull(TransactionFactory.getFactory());
+      STMTransactionImpl transaction =(STMTransactionImpl) TransactionFactory.getFactory().getCurrentTransaction(false);
+      Assert.assertNotNull(transaction);
+      Assert.assertEquals(Status.STATUS_ACTIVE, transaction.getStatus());
+      Long id = 3l;
+      String make = "Jaguar";
+      String buyOutMake = "Ford";
+      Long version = 0l;
+      Car car = new Car(id);
+      Long handle = new HandleUtils().getHandle(Car.class, id, "make") ;
+      TransactedObjectReference reference = new TransactedObjectReference(handle, make,  version);
+      this.fieldStore.put(handle, reference);
+      
+      Assert.assertEquals(make,  car.getMake());// puts the read in the transaction history
+      car.setMake(buyOutMake);
+      
+      Assert.assertEquals(1, transaction.getDeferredReads().size());
+      Assert.assertEquals( 1, this.fieldStore.size());
+      
+      Assert.assertTrue(this.stm.prepare());
+      Assert.assertNotNull(reference.getPrepared());
+      Assert.assertTrue(reference.getPrepared().isLocked()); // only one resource locked during prepare
+      Assert.assertEquals(Status.STATUS_PREPARED, transaction.getStatus());
+   }
+   
+   @Test
+   public void testPrepareOnConflictBackoutWorks()
+   {
+      Assert.assertNotNull(TransactionFactory.getFactory());
+      STMTransactionImpl transaction =(STMTransactionImpl) TransactionFactory.getFactory().getCurrentTransaction(false);
+      Assert.assertNotNull(transaction);
+      Assert.assertEquals(Status.STATUS_ACTIVE, transaction.getStatus());
+      Long id = 3l;
+      String make = "Jaguar";
+      String buyOutMake = "Ford";
+      Long version = 0l;
+      Car car = new Car(id);
+      Long handle = new HandleUtils().getHandle(Car.class, id, "make") ;
+      TransactedObjectReference reference = new TransactedObjectReference(handle, make,  version);
+      this.fieldStore.put(handle, reference);
+      
+      Assert.assertEquals(make,  car.getMake());// puts the read in the transaction history
+      car.setMake(buyOutMake);
+      Executor executor = new TransactionExecutor();
+      ConflictingRunnableTransaction conflicting = new ConflictingRunnableTransaction(this.stm);
+      CountDownLatch latch = conflicting.getLatch();
+      executor.execute(conflicting);
+      try
+      {// this will wait till the other thread has finished processing, the field will be locked 
+         latch.await();
+      }
+      catch (InterruptedException ie)
+      {
+      }
+      
+      Assert.assertTrue(reference.getPrepared().isLocked());
+      
+      Assert.assertEquals(1, transaction.getDeferredReads().size());
+      Assert.assertEquals( 1, this.fieldStore.size());
+      
+      Assert.assertFalse(this.stm.prepare());
+      Assert.assertFalse(reference.getPrepared().isHeldByCurrentThread()); // only one resource locked during prepare
+      Assert.assertEquals(Status.STATUS_MARKED_ROLLBACK, transaction.getStatus());
+   }
+   
+   @Test
+   public void testPrepareAbortInvalidStaleStateDetected()
+   {
+      Assert.assertNotNull(TransactionFactory.getFactory());
+      STMTransactionImpl transaction =(STMTransactionImpl) TransactionFactory.getFactory().getCurrentTransaction(false);
+      Assert.assertNotNull(transaction);
+      Assert.assertEquals(Status.STATUS_ACTIVE, transaction.getStatus());
+      Long id = 3l;
+      String make = "Jaguar";
+      String buyOutMake = "Ford";
+      Long version = 0l;
+      Car car = new Car(id);
+      Long handle = new HandleUtils().getHandle(Car.class, id, "make") ;
+      TransactedObjectReference reference = new TransactedObjectReference(handle, make,  version);
+      this.fieldStore.put(handle, reference);
+      Assert.assertEquals(make, car.getMake());
+      car.setMake(buyOutMake);
+      reference.setValue("BMW");
+      reference.setVersion(Long.MAX_VALUE);
+      Assert.assertFalse(this.stm.prepare());
+      
+   }
+   @Test
+   public void testCommitWorks()
+   {
+      Assert.assertNotNull(TransactionFactory.getFactory());
+      STMTransactionImpl transaction =(STMTransactionImpl) TransactionFactory.getFactory().getCurrentTransaction(false);
+      Assert.assertNotNull(transaction);
+      Assert.assertEquals(Status.STATUS_ACTIVE, transaction.getStatus());
+      Long id = 3l;
+      String make = "Jaguar";
+      String buyOutMake = "Ford";
+      Long version = 0l;
+      Car car = new Car(id);
+      Long handle = new HandleUtils().getHandle(Car.class, id, "make") ;
+      TransactedObjectReference reference = new TransactedObjectReference(handle, make,  version);
+      this.fieldStore.put(handle, reference);
+      
+      Assert.assertEquals(make,  car.getMake());// puts the read in the transaction history
+      car.setMake(buyOutMake);
+      
+      Assert.assertEquals(1, transaction.getDeferredReads().size());
+      Assert.assertEquals( 1, this.fieldStore.size());
+      
+      Assert.assertTrue(this.stm.prepare());
+      Assert.assertNotNull(reference.getPrepared());
+      Assert.assertTrue(reference.getPrepared().isLocked()); // only one resource locked during prepare
+      Assert.assertEquals(Status.STATUS_PREPARED, transaction.getStatus());
+      Assert.assertTrue(this.stm.commit());
+      Assert.assertEquals(buyOutMake, reference.getValue());
+      
+   }
+   public class TransactionExecutor implements Executor
+   {
+      @Override
+      public void execute(Runnable command)
+      {
+         new Thread(command).start();
+      }
+   }
+   public class ConflictingRunnableTransaction implements Runnable
+   {
+      private final STM stm;
+      private final CountDownLatch latch = new CountDownLatch(1);
+      public CountDownLatch getLatch()
+      {
+         return latch;
+      }
+      @Override
+      public void run()
+      {// this is meant to lock the reference and hold onto it
+         this.stm.setCurrentTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
+         this.stm.setTimeout(10000);
+         STMFactory.getFactoryInstance().allocate(this.stm);
+         try
+         {
+            this.stm.begin();
+         }
+         catch (IsolationLevelNotConfiguredException ilnce)
+         {
+            Assert.fail(ilnce.getMessage());
+         }
+         STMTransactionImpl transaction = (STMTransactionImpl)TransactionFactory.getFactory().getCurrentTransaction(false);
+         Assert.assertNotNull(transaction);
+         Long id = 3l;
+         Car car = new Car(id);
+         Long handle = new HandleUtils().getHandle(Car.class, id, "make") ;
+         car.setMake("Fiat");
+         Assert.assertEquals(1, this.stm.getFieldStore().size());
+         TransactedObjectReference reference = this.stm.getFieldStore().get(handle);
+         reference.getPrepared().lock();// that's it locked, job done
+         reference.setPreparedVersion(transaction.getVersion());
+         this.latch.countDown();
+      }
+      public ConflictingRunnableTransaction(STM stmref)
+      {
+         this.stm = stmref;
+      }
+      
+   }
 }



More information about the jboss-svn-commits mailing list