[jboss-svn-commits] JBL Code SVN: r27652 - in labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943: handle/internal and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jul 6 14:25:32 EDT 2009
Author: whitingjr
Date: 2009-07-06 14:25:31 -0400 (Mon, 06 Jul 2009)
New Revision: 27652
Added:
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionReadSet.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionWriteSet.java
Modified:
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/FieldUtils.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/HandleUtils.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/TransactionStack.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/TransactionStatus.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java
Log:
Updated with isolation behaviour, added atomic references to shared objects.
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/FieldUtils.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/FieldUtils.java 2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/FieldUtils.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -12,10 +12,8 @@
import javax.persistence.Id;
import org.apache.commons.beanutils.PropertyUtils;
-import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
-
import uk.ac.ncl.sdia.a8905943.handle.exception.FieldNotFoundException;
public class FieldUtils
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/HandleUtils.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/HandleUtils.java 2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/HandleUtils.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -21,7 +21,7 @@
{
return new HashCodeBuilder(17, 37).append(entity.getName()).append(id).append(fieldName).toHashCode();
}
- public long getHandle(Class entity, String entityId, int fieldIndex)
+ public long getFieldHandle(Class entity, String entityId, int fieldIndex)
{
return new HashCodeBuilder(17, 37).append(entity.getName()).append(entityId).append(fieldIndex).toHashCode();
}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -0,0 +1,29 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.handle;
+
+public class TransactedObjectReference<T>
+{
+ final Long lookupIdentity;
+ final T value;
+
+ public TransactedObjectReference(Long identity, T value)
+ {
+ lookupIdentity = identity;
+ this.value = value;
+ }
+
+ public T getValue()
+ {
+ return value;
+ }
+
+ public Long getLookupIdentity()
+ {
+ return lookupIdentity;
+ }
+}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -0,0 +1,12 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.handle.internal;
+
+public class InternalReferenceState
+{
+
+}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -0,0 +1,15 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.handle.internal;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+public class InternalTransactedObjectReference
+{
+ private final AtomicReference<State> state = new AtomicReference<State>;
+
+}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java 2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -14,8 +14,12 @@
import javax.transaction.Transaction;
import javax.transaction.xa.XAResource;
+import org.apache.log4j.Logger;
+
import uk.ac.ncl.sdia.a8905943.model.TransactionStatus;
import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionReadSet;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionWriteSet;
/**
* The purpose of this object is to perform the transaction functionality.
*
@@ -24,15 +28,36 @@
*/
public class TransactionImpl implements STMTransaction{
- private volatile TransactionStatus status;
+ // status available for inspection
+ private volatile TransactionStatus status = TransactionStatus.NOTSTARTED;
+ /**
+ * the statusModifer should be used for updating the status field. Any part of the system that is responsible
+ * for transitioning a transaction through it's states should use this field.
+ */
private final AtomicReferenceFieldUpdater<Transaction, TransactionStatus> statusModifier = AtomicReferenceFieldUpdater.newUpdater(Transaction.class, TransactionStatus.class, "status");
+ /**
+ * This thread local variable holds the current transaction for this thread.
+ * hmm is this really going to work with nested transactions ????????? TODO: work this one out
+ */
private static final ThreadLocal<TransactionImpl> currentLocalTransaction = new ThreadLocal<TransactionImpl>();
- private final
-
+ /**
+ * Nested writes are a record of writes performed by nested classes. Access to them is necessary so this transaction is not isolated completely.
+ */
+ private final TransactionWriteSet nestedWrites = new TransactionWriteSet();
+ /**
+ * This TM system deferred update to synchronize updates. This field stores all the updates performed by this transaction.
+ */
+ private final TransactionWriteSet writeSet = new TransactionWriteSet();
+ /**
+ * This TM needs to keep it's readset for validation to check for conflicts.
+ */
+ private final TransactionReadSet readSet = new TransactionReadSet();
+ private static final Logger logger = Logger.getLogger(TransactionImpl.class);
+
@Override
public void commit() {
- // TODO: go through list of readers and writers depending on isolation. resolve any conflicts.
+
// make object versioned fields visible to all other transactions (depending on isolation)
// make versioned collection objects fields visible to all other transactions (depending on isolation)
// change status
@@ -92,5 +117,20 @@
return null;
}
+ @Override
+ public void startTransaction()
+ {
+ if (logger.isInfoEnabled())
+ {
+ logger.info("Starting transaction with id ["++"].");
+ }
+
+ if ()
+ {
+
+ }
+
+ }
+
}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java 2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -1,32 +1,20 @@
package uk.ac.ncl.sdia.a8905943.isolation;
import uk.ac.ncl.sdia.a8905943.spec.History;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionReadSet;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionWriteSet;
public abstract class AbstractIsolation implements Isolation {
- protected final History readhistory;
- protected final History writeHistory;
+ protected History readhistory;
+ protected History writeHistory;
- @Override
- public History getReadHistory() {
- return readhistory;
+ public TransactionWriteSet getNestedTransactionWriteSet()
+ {
+ return nestedWrites;
}
-
- @Override
- public void setReadHistory(History history) {
- readhistory = history;
- }
- @Override
- public History getWriteHistory() {
- return writeHistory;
- }
-
- @Override
- public void setWriteHistory(History history) {
- writeHistory = history;
- }
- public abstract Object read();
+ public abstract Object read( TransactionReadSet currentReadSet, TransactionReadSet nested, Long lookupIdentity);
- public abstract Object write(Object newObject);
+ public abstract Object write(TransactionWriteSet currentWriteSet, Object newObject);
}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java 2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -4,10 +4,6 @@
public interface Isolation {
- public History getReadHistory();
- public void setReadHistory(History history);
- public History getWriteHistory();
- public void setWriteHistory(History history);
public boolean supportsRepeatableRead();
public boolean supportsWriteSkew();
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java 2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -3,6 +3,10 @@
import java.util.HashMap;
import java.util.Map;
+import uk.ac.ncl.sdia.a8905943.spec.History;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionReadSet;
+import uk.ac.ncl.sdia.a8905943.tracker.TransactionWriteSet;
+
/**
* This object defines the behaviour for reads and writes for a
* transaction with RepeatableRead isolation. After initial
@@ -33,7 +37,6 @@
* Read the value requested. First check for version previously read and
* return it. If not found then read the shared value, add to have read list.
*/
- @Override
public Object read(Long lookupIdentity)
{
Object returnValue = null;
@@ -49,16 +52,51 @@
}
else
{// not found in this transaction, read shared value
-
+ //TODO: read from shared store, first check to see if it has been locked, pass responsibility to
+ // retrieve from shared memory back to caller
}
- return null;
+ return returnValue;
}
+
+ /**
+ * Read the value requested. First check for version previously read and
+ * return it. If not found then read the shared value, add to have read list.
+ */
@Override
- public Object write(Object newObject)
+ public Object read(TransactionReadSet currentTransaction, TransactionReadSet nested, Long lookupIdentity)
{
- // FIXME write
+ Object returnValue = null;
+ /* check for the value initially in the writes, then reads otherwise
+ * retrieve the shared version*/
+ if (writes.containsKey(lookupIdentity))
+ {// found
+ returnValue = writes.get(lookupIdentity);
+ }
+ else if (reads.containsKey(lookupIdentity))
+ {
+ returnValue = writes.get(lookupIdentity);
+ }
+ else
+ {// not found in this transaction, read shared value
+ //TODO: read from shared store, first check to see if it has been locked, pass responsibility to
+ // retrieve from shared memory back to caller
+ }
+ return returnValue;
+ }
+
+ @Override
+ public Object write(TransactionWriteSet currentWriteSet, Object newObject)
+ {
+ Object returnValue = null;
+ if (null != newObject)
+ {
+ currentWriteSet.getWriteSet().re
+ }
+ else
+ {
+
+ }
return null;
}
-
}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/TransactionStack.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/TransactionStack.java 2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/TransactionStack.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -12,7 +12,7 @@
* (nested) transaction it is pushed down the stack. The transaction with the deepest
* nesting is a the bottom. This means the "top level" transaction is at the bottom.
* This class encapsulates behaviour for the interaction between transactions when
- * reads and writes occur and how they effect transactions as updates bubble up.
+ * reads and writes occur and how they effect transactions as commited updates bubble up.
*
* @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
* @version $Revision: 1.1 $
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/TransactionStatus.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/TransactionStatus.java 2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/TransactionStatus.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -1,6 +1,33 @@
package uk.ac.ncl.sdia.a8905943.model;
+/**
+ * Definition of the states an STM transaction can go through
+ *
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
public enum TransactionStatus {
- INFLIGHT, ABORTED, COMMITTED, NOTSTARTED
+ // initial state
+ NOTSTARTED
+ // in progress transaction state
+ , RUNNING
+ // 2pc states, 1st phase
+ , PREPARED
+ // p2c states, 2nd phase
+ , ABORTING, COMMITING
+ // final states for transactions
+ , ABORTED, COMMITTED
+ // aditional states for STM design to work
+ , VALIDATING
+
+ /* initial state transition model
+ NOTSTARTED -> RUNNING
+ RUNNING -> VALIDATING or ABORTING
+ VALIDATING -> PREPARED
+ PREPARED -> ABORTING or COMMITTING
+ ABORTING -> ABORTED
+ COMMITTING -> COMMITTED
+ */
+
}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java 2009-07-06 18:14:39 UTC (rev 27651)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -19,5 +19,6 @@
{
public Object readField();
public Object writeField();
+ public void startTransaction();
}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionReadSet.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionReadSet.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionReadSet.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -0,0 +1,12 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.tracker;
+
+public class TransactionReadSet
+{
+
+}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionWriteSet.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionWriteSet.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/TransactionWriteSet.java 2009-07-06 18:25:31 UTC (rev 27652)
@@ -0,0 +1,20 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.tracker;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class TransactionWriteSet
+{
+ private final Map<Long, Object> writes = new HashMap<Long, Object>();
+
+ public Map<Long, Object> getWriteSet()
+ {
+ return writes;
+ }
+}
More information about the jboss-svn-commits
mailing list