[jboss-svn-commits] JBL Code SVN: r29035 - in labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main: java/uk/ac/ncl/sdia/a8905943/exception and 15 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Aug 23 15:04:58 EDT 2009
Author: whitingjr
Date: 2009-08-23 15:04:58 -0400 (Sun, 23 Aug 2009)
New Revision: 29035
Added:
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/exception/ConflictingWriteException.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/STMTransactionImpl.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Bike.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/LeccyCar.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/InjectedSTM.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/STMEntity.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/STMTransaction.java
Removed:
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldReadParameter.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldWriteParameter.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersionManager.java
Modified:
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/entitymanager/STMEntityManagerImpl.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/STMFactory.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/TransactionFactory.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractFieldParameter.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Car.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/Tracker.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersioningAspect.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/STM.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TransactionManager.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Read.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Write.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/transaction/compressor/PostCommitTransactionMerger.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/META-INF/jboss-aop.xml
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/log4j.xml
Log:
Fixed bugs.
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/entitymanager/STMEntityManagerImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/entitymanager/STMEntityManagerImpl.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/entitymanager/STMEntityManagerImpl.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -174,6 +174,7 @@
}
}
*/
+ //TODO: jrw replace this implementation, should go into STM and check the model store for existence.
isstmEntity = true;
if (isstmEntity)
{// STM entity class, create an instance
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/exception/ConflictingWriteException.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/exception/ConflictingWriteException.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/exception/ConflictingWriteException.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,19 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.exception;
+
+public class ConflictingWriteException extends Exception
+{
+
+ /** The serialVersionUID */
+ private static final long serialVersionUID = 1037838644833482768L;
+
+ public ConflictingWriteException(String message)
+ {
+ super(message);
+ }
+}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/STMFactory.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/STMFactory.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/STMFactory.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -12,7 +12,7 @@
* The purpose of this factory is an attempt to bind a reference of
* the STM allocated to a Thread (of control). It should be allocated
* a deallocated. Allocating and deallocating should occur at the same
- * time logical Connection objects are release by the EntityManager.
+ * time logical Connection objects are released by the EntityManager.
*
* @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
* @version $Revision: 1.1 $
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/TransactionFactory.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/TransactionFactory.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/factory/TransactionFactory.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -2,8 +2,8 @@
import java.util.concurrent.atomic.AtomicLong;
-import uk.ac.ncl.sdia.a8905943.impl.TransactionImpl;
-import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
+import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
+import uk.ac.ncl.sdia.a8905943.stm.transaction.STMTransaction;
/**
* The purpose of this object is to get a transaction object.
@@ -22,7 +22,7 @@
{
if (null == currentTransaction.get() && create)
{
- currentTransaction.set(new TransactionImpl(version.incrementAndGet()));
+ currentTransaction.set(new STMTransactionImpl(version.incrementAndGet()));
}
return currentTransaction.get();
}
@@ -31,6 +31,13 @@
{
return factory;
}
+ public static void deallocate()
+ {
+ if (null != currentTransaction.get())
+ {
+ currentTransaction.remove();
+ }
+ }
private TransactionFactory()
{}
Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/TransactedObjectReference.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,88 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.handle;
-
-import java.io.Serializable;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-
-public final class TransactedObjectReference implements Serializable
-{
- /** The serialVersionUID */
- private static final long serialVersionUID = 2497531722707627406L;
- final Long lookupIdentity;
- private Object value;
- private Long nextIdentity;
- private Long version;
- transient final ReentrantReadWriteLock prepared = new ReentrantReadWriteLock();
-
- public TransactedObjectReference(Long identity, Object value, long version)
- {
- lookupIdentity = identity;
- this.value = value;
- this.version = version;
- }
-
- public Object getValue()
- {
- return value;
- }
-
- public Long getLookupIdentity()
- {
- return lookupIdentity;
- }
-
- public Long getNextIdentity()
- {
- return nextIdentity;
- }
-
- public void setNextIdentity(Long nextIdentity)
- {
- this.nextIdentity = nextIdentity;
- }
- public long getVersion()
- {
- return version;
- }
- public void setVersion(long version)
- {
- this.version = version;
- }
- public void setValue(Object value)
- {
- this.value = value;
- }
- @Override
- public boolean equals(Object other)
- {
- boolean returnValue = false;
- if (null != other)
- {
- if (other == this)
- {
- returnValue = true;
- }
- else
- {
- if (other.getClass() == getClass())
- {
- TransactedObjectReference otherReference = (TransactedObjectReference)other;
- returnValue = new EqualsBuilder().append(this.getLookupIdentity(), otherReference.getLookupIdentity()).append(this.getVersion(), otherReference.getVersion()).isEquals();
- }
- }
- }
- return returnValue;
- }
-
- public ReentrantReadWriteLock getPrepared()
- {
- return prepared;
- }
-}
Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalReferenceState.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,12 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.handle.internal;
-
-public class InternalReferenceState
-{
-
-}
Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/internal/InternalTransactedObjectReference.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,15 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.handle.internal;
-
-import java.util.concurrent.atomic.AtomicReference;
-
-public class InternalTransactedObjectReference
-{
- private final AtomicReference<InternalReferenceState> state = new AtomicReference<InternalReferenceState>();
-
-}
Copied: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/STMTransactionImpl.java (from rev 28969, labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java)
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/STMTransactionImpl.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/STMTransactionImpl.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,132 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.transaction.Status;
+
+import org.apache.log4j.Logger;
+
+import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
+import uk.ac.ncl.sdia.a8905943.stm.model.LoadEntityParameter;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
+import uk.ac.ncl.sdia.a8905943.stm.transaction.STMTransaction;
+
+/**
+ * The purpose of this object is to perform the transaction functionality.
+ *
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+public class STMTransactionImpl implements STMTransaction
+{
+ // status available for inspection
+ protected volatile int status = Status.STATUS_NO_TRANSACTION;
+ protected final Map<Long, TransactedObjectReference> deferredReads = new HashMap<Long, TransactedObjectReference>();
+ protected final Map<Long, TransactedObjectReference> deferredWrites = new HashMap<Long, TransactedObjectReference>();
+
+ /**
+ * The version number of this transaction
+ */
+ private final Long version;
+
+ private static final Logger logger = Logger.getLogger(STMTransactionImpl.class);
+
+ private Isolation isolation;
+
+ public void commit()
+ {
+ // make object versioned fields visible to all other transactions (depending on isolation)
+ // make versioned collection objects fields visible to all other transactions (depending on isolation)
+ // change status
+ // notify all transactions committed, cleanup reader and writer traces.
+ }
+
+ @Override
+ public void startTransaction()
+ {
+ if (logger.isInfoEnabled())
+ {
+ logger.info("Starting transaction.");
+ }
+ if (null == this.isolation)
+ {
+ throw new RuntimeException("The STM transaction is not ready to be started.");
+ }
+ this.status = Status.STATUS_ACTIVE;
+ }
+
+ public STMTransactionImpl(long version)
+ {
+ this.version = version;
+ }
+
+ @Override
+ public Object read(FieldReadParameter fieldRead)
+ {
+ fieldRead.setReads(this.deferredReads);
+ fieldRead.setWrites(this.deferredWrites);
+ return this.isolation.read(fieldRead);
+ }
+
+ @Override
+ public Boolean write(FieldWriteParameter fieldWrite)
+ {
+ fieldWrite.setWrites(this.deferredWrites);
+ fieldWrite.setVersion(this.version);
+ return this.isolation.write(fieldWrite);
+ }
+
+ @Override
+ public void setIsolationLevel(Isolation isolation)
+ {
+ this.isolation = isolation;
+ }
+
+ public Long getVersion()
+ {
+ return this.version;
+ }
+
+ public Map<Long, TransactedObjectReference> getDeferredReads()
+ {
+ return deferredReads;
+ }
+
+ public void abort()
+ {
+ this.status = Status.STATUS_ROLLEDBACK;
+ }
+
+ @Override
+ public Object load(LoadEntityParameter load)
+ {
+ // FIXME load
+ return null;
+ }
+
+ @Override
+ public Map<Long, TransactedObjectReference> getDeferredWrites()
+ {
+ return this.deferredWrites;
+ }
+
+ @Override
+ public int getStatus()
+ {
+ return this.status;
+ }
+ @Override
+ public void setStatus(int status)
+ {
+ this.status = status;
+ }
+}
Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/impl/TransactionImpl.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,106 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.transaction.Status;
-
-import org.apache.log4j.Logger;
-
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
-import uk.ac.ncl.sdia.a8905943.isolation.FieldReadParameter;
-import uk.ac.ncl.sdia.a8905943.isolation.FieldWriteParameter;
-import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
-import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
-
-/**
- * The purpose of this object is to perform the transaction functionality.
- *
- * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
- * @version $Revision: 1.1 $
- */
-public class TransactionImpl implements STMTransaction
-{
- // status available for inspection
- private volatile int status = Status.STATUS_NO_TRANSACTION;
-
- protected final Map<Long, TransactedObjectReference> deferredReads = new HashMap<Long, TransactedObjectReference>();
-
- protected final Map<Long, TransactedObjectReference> deferredWrites = new HashMap<Long, TransactedObjectReference>();
-
- /**
- * The version number of this transaction
- */
-
- private final Long version;
-
- private static final Logger logger = Logger.getLogger(TransactionImpl.class);
-
- private Isolation isolation;
-
- public void commit()
- {
-
- // make object versioned fields visible to all other transactions (depending on isolation)
- // make versioned collection objects fields visible to all other transactions (depending on isolation)
- // change status
- // notify all transactions committed, cleanup reader and writer traces.
- }
-
- @Override
- public void startTransaction()
- {
- if (logger.isInfoEnabled())
- {
- logger.info("Starting transaction.");
- }
- if (null == this.isolation)
- {
- throw new RuntimeException("The STM transaction is not ready to be started.");
- }
- this.status = Status.STATUS_ACTIVE;
- }
-
- public TransactionImpl(long version)
- {
- this.version = version;
- }
-
- @Override
- public Object read(FieldReadParameter fieldRead)
- {
- fieldRead.setReads(this.deferredReads);
- fieldRead.setWrites(this.deferredWrites);
- return this.isolation.read(fieldRead);
- }
-
- @Override
- public Boolean write(FieldWriteParameter fieldWrite)
- {
- fieldWrite.setWrites(this.deferredWrites);
- fieldWrite.setVersion(this.version);
- return this.isolation.write(fieldWrite);
- }
-
- @Override
- public void setIsolationLevel(Isolation isolation)
- {
- this.isolation = isolation;
- }
-
- public Long getVersion()
- {
- return this.version;
- }
-
- public Map<Long, TransactedObjectReference> getDeferredReads()
- {
- return deferredReads;
- }
-}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractFieldParameter.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractFieldParameter.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractFieldParameter.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -8,7 +8,7 @@
import java.util.Map;
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
public class AbstractFieldParameter
{
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/AbstractIsolation.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,5 +1,7 @@
package uk.ac.ncl.sdia.a8905943.isolation;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
import uk.ac.ncl.sdia.a8905943.tracker.TransactionWriteSet;
public abstract class AbstractIsolation implements Isolation {
Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldReadParameter.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldReadParameter.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldReadParameter.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,40 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.isolation;
-
-import java.util.Map;
-
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
-
-public class FieldReadParameter extends AbstractFieldParameter
-{
- private Map<Long, TransactedObjectReference> reads;
-
- public FieldReadParameter(Map<Long, TransactedObjectReference> reads, Map<Long, TransactedObjectReference> writes,
- Map<Long, TransactedObjectReference> objectStore, long handle)
- {
- this.reads = reads;
- this.writes = writes;
- this.objectStore = objectStore;
- this.handle = handle;
- }
-
- public Map<Long, TransactedObjectReference> getReads()
- {
- return reads;
- }
-
- public void setReads(Map<Long, TransactedObjectReference> reads)
- {
- this.reads = reads;
- }
-
- public FieldReadParameter(long handle)
- {
- this.handle = handle;
- }
-}
\ No newline at end of file
Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldWriteParameter.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldWriteParameter.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/FieldWriteParameter.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,27 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.isolation;
-
-
-public class FieldWriteParameter extends AbstractFieldParameter
-{
- private Object newObject;
-
- public Object getNewObject()
- {
- return newObject;
- }
- public void setNewObject(Object newObject)
- {
- this.newObject = newObject;
- }
- public FieldWriteParameter(long handle, Object newObject)
- {
- this.handle = handle;
- this.newObject = newObject;
- }
-}
\ No newline at end of file
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/Isolation.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,8 +1,11 @@
package uk.ac.ncl.sdia.a8905943.isolation;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
+
public interface Isolation {
public boolean supportsRepeatableRead();
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/isolation/RepeatableReadIsolationImpl.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -2,7 +2,9 @@
import org.apache.log4j.Logger;
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
/**
* This object defines the behaviour for reads and writes for a
@@ -32,6 +34,10 @@
if (fieldRead.getWrites().containsKey(fieldRead.getHandle()))
{// found
returnValue = fieldRead.getWrites().get(fieldRead.getHandle()).getValue();
+ if (!fieldRead.getReads().containsKey(fieldRead.getHandle()))
+ {// in case the field has not previously been read
+ fieldRead.getReads().put(fieldRead.getHandle(), fieldRead.getWrites().get(fieldRead.getHandle()));
+ }
}
else if (fieldRead.getReads().containsKey(fieldRead.getHandle()))
{// has been read previously in transaction, return the previous value
@@ -42,7 +48,7 @@
// retrieve from shared memory back to caller
if (fieldRead.getObjectStore().containsKey(fieldRead.getHandle()))
{
- returnValue = fieldRead.getObjectStore().get(fieldRead.getHandle() );
+ returnValue = fieldRead.getObjectStore().get(fieldRead.getHandle() ).getValue();
}
else
{
@@ -76,7 +82,7 @@
}
else
{// place in the store a transacted object representing a null
-
+ //TODO:jrw complete this
}
return returnValue;
}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Bike.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Bike.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Bike.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,45 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.model;
+
+import javax.persistence.Id;
+
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMReadable;
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMWriteable;
+import uk.ac.ncl.sdia.a8905943.stm.annotation.STMEntity;
+
+ at STMEntity
+public class Bike
+{
+
+ @Id
+ private Long id;
+ private String name;
+
+ public Bike(Long identity)
+ {
+ this.id = identity;
+ }
+ @STMReadable
+ public String getName()
+ {
+ return name;
+ }
+ @STMWriteable
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+
+}
+
+
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Car.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Car.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/Car.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,30 +1,29 @@
package uk.ac.ncl.sdia.a8905943.model;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
import javax.persistence.Id;
- at Entity
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMReadable;
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMWriteable;
+import uk.ac.ncl.sdia.a8905943.stm.annotation.STMEntity;
+
+
+ at STMEntity
public class Car {
@Id
- @GeneratedValue
private Long id;
-
-
private String make;
+
public Long getId()
{
return id;
}
- public void setId(Long id)
- {
- this.id = id;
- }
+ @STMReadable
public String getMake()
{
return make;
}
+ @STMWriteable
public void setMake(String make)
{
this.make = make;
@@ -37,8 +36,4 @@
this.id = identity;
}
- public Car()
- {
- }
-
}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/LeccyCar.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/LeccyCar.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/model/LeccyCar.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,46 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.model;
+
+import javax.persistence.Id;
+
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMReadable;
+import uk.ac.ncl.sdia.a8905943.aspects.annotation.STMWriteable;
+import uk.ac.ncl.sdia.a8905943.stm.annotation.STMEntity;
+
+ at STMEntity
+public class LeccyCar
+{
+ @Id
+ private Long id;
+ private String name;
+
+ /**
+ * Constructor that fulfils contract with STMEntity annotation
+ *
+ * @param identity
+ */
+ public LeccyCar(Long identity)
+ {
+ this.id = identity;
+ }
+ public Long getId()
+ {
+ return id;
+ }
+ @STMReadable
+ public String getName()
+ {
+ return name;
+ }
+ @STMWriteable
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+}
+
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -6,10 +6,11 @@
*/
package uk.ac.ncl.sdia.a8905943.persistence.xa;
-import java.io.IOException;
import java.io.PrintWriter;
import java.io.Serializable;
import java.sql.SQLException;
+import java.util.List;
+import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.naming.NamingException;
@@ -23,11 +24,10 @@
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.log4j.Logger;
-import org.infinispan.manager.CacheManager;
-import org.infinispan.manager.DefaultCacheManager;
import uk.ac.ncl.sdia.a8905943.persistence.jdbc.STMDataSource;
import uk.ac.ncl.sdia.a8905943.stm.STM;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
public final class STMXADatasourceImpl extends STMDataSource implements XADataSource, Serializable, Referenceable
{
@@ -39,7 +39,8 @@
private static final String DATABASE_NAME = "databaseName";
private static final ConcurrentHashMap<String, STM> stmDatabases = new ConcurrentHashMap<String, STM>();
private static final Logger logger = Logger.getLogger(STMXADatasourceImpl.class );
- private CacheManager cacheManager ; // heavy weight object
+ private Map<Long, TransactedObjectReference> transactedFieldStore ;
+ private Map<String, List<Object>> transactedModelStore;
/** The serialVersionUID */
private static final long serialVersionUID = 2341586268344164513L;
@@ -67,13 +68,13 @@
else
{// the stm does not exist create an instance and attempt to put it into the map
STM newSTM = null;
- if (null != this.cacheManager)
+ if (null != this.transactedFieldStore)
{
- newSTM = new STM(getDatabaseName(), this.cacheManager.getCache(getDatabaseName()));
+ newSTM = new STM(getDatabaseName(), this.transactedFieldStore, this.transactedModelStore );
}
else
{
- newSTM = new STM(getDatabaseName(), null);
+ newSTM = new STM(getDatabaseName(), null, null);
logger.warn("Starting the STM witout replication enabled.");
}
@@ -221,13 +222,7 @@
logger.info("Instance of XADataSource created.");
}
- try
- {// this is not great performing work inside a constructor that can barf
- this.cacheManager = new DefaultCacheManager("../server/default/conf/cluster-cfg.xml");
- }
- catch (IOException ioe)
- {
- logger.error("The configuration file for the replicated memory system could not be found.");
- }
+ this.transactedFieldStore = new ConcurrentHashMap<Long, TransactedObjectReference>();
+ this.transactedModelStore = new ConcurrentHashMap<String, List<Object>>();
}
}
Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,28 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.spec;
-
-import uk.ac.ncl.sdia.a8905943.isolation.FieldReadParameter;
-import uk.ac.ncl.sdia.a8905943.isolation.FieldWriteParameter;
-import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
-
-
-/**
- * Purpose of this object is for behaviour of a transaction that
- * uses memory to control changes.a
- *
- * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
- * @version $Revision: 1.1 $
- */
-public interface STMTransaction
-{
- public Boolean write(FieldWriteParameter fieldWrite);
- public Object read(FieldReadParameter fieldRead);
- public void setIsolationLevel(Isolation isolation);
- public void startTransaction();
-
-}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/Tracker.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/Tracker.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/Tracker.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -2,14 +2,14 @@
import javax.transaction.xa.Xid;
-import uk.ac.ncl.sdia.a8905943.impl.TransactionImpl;
+import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
public interface Tracker {
public void auditRead();
public void auditWrite();
- public void discardHistory(TransactionImpl transaction);
+ public void discardHistory(STMTransactionImpl transaction);
public void discardHistory(Xid xid); // used for nested transactions
}
Deleted: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersionManager.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersionManager.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersionManager.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,11 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package uk.ac.ncl.sdia.a8905943.spec;
-
-public interface VersionManager
-{
-}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersioningAspect.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersioningAspect.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/VersioningAspect.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -6,7 +6,6 @@
*/
package uk.ac.ncl.sdia.a8905943.spec;
-import org.jboss.aop.joinpoint.ConstructorInvocation;
import org.jboss.aop.joinpoint.FieldWriteInvocation;
import org.jboss.aop.joinpoint.MethodInvocation;
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/STM.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/STM.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/STM.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,16 +1,19 @@
package uk.ac.ncl.sdia.a8905943.stm;
+import java.util.List;
+import java.util.Map;
+
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.log4j.Logger;
-import org.infinispan.Cache;
import uk.ac.ncl.sdia.a8905943.factory.TransactionFactory;
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
-import uk.ac.ncl.sdia.a8905943.isolation.FieldReadParameter;
-import uk.ac.ncl.sdia.a8905943.isolation.FieldWriteParameter;
import uk.ac.ncl.sdia.a8905943.isolation.factory.IsolationFactory;
-import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
import uk.ac.ncl.sdia.a8905943.stm.exception.IsolationLevelNotConfiguredException;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
+import uk.ac.ncl.sdia.a8905943.stm.model.LoadEntityParameter;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
+import uk.ac.ncl.sdia.a8905943.stm.transaction.STMTransaction;
import uk.ac.ncl.sdia.a8905943.stm.transaction.TransactionManager;
/**
@@ -24,9 +27,11 @@
{
private final String databaseName;
private static final Logger logger = Logger.getLogger(STM.class);
- private final Cache<Long, TransactedObjectReference> replicatedFieldMemory ;
+ private final Map<Long, TransactedObjectReference> transactedFieldMemory ;
+ private final Map<String, List<Object>> transactedModelMemory;
private final TransactionManager transactionManager = new TransactionManager();
private ThreadLocal<Integer> isolationLevel = new ThreadLocal<Integer>();
+ private int RETRY_COUNT = 2000;
/**
* This method is where transactional updates are made..
@@ -38,22 +43,23 @@
public Boolean write(FieldWriteParameter fieldWrite)
{
Boolean returnValue = null;
- fieldWrite.setObjectStore(this.replicatedFieldMemory);
+ fieldWrite.setObjectStore(this.transactedFieldMemory);
returnValue = TransactionFactory.getFactory().getCurrentTransaction(false).write(fieldWrite);
return returnValue;
}
public Object read( FieldReadParameter fieldRead)
{
- fieldRead.setObjectStore(this.replicatedFieldMemory);
+ fieldRead.setObjectStore(this.transactedFieldMemory);
STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
return transaction.read(fieldRead);
}
- public STM(String name, Cache replicatedMemory)
+ public STM(String name, Map<Long, TransactedObjectReference> transactedFieldMemory, Map<String, List<Object>> transactedModelMemory)
{
this.databaseName = name;
- this.replicatedFieldMemory = replicatedMemory;
+ this.transactedFieldMemory = transactedFieldMemory;
+ this.transactedModelMemory = transactedModelMemory;
}
@Override
@@ -93,6 +99,9 @@
{
//TODO: jrw complete, complete implementation to release (unlock) prepared resources.
this.isolationLevel.remove();
+ STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
+ this.transactionManager.abort(this.transactedFieldMemory, transaction);
+ TransactionFactory.getFactory().deallocate();
}
/**
* Notify the transactional system the changes should be locked for future
@@ -100,20 +109,11 @@
*/
public boolean prepare()
{
- //TODO:jrw complete implementation to return the appropriate response from the STM system
- return false; //returning false will cause the transaction to be aborted
+ boolean returnValue = false;
+ STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
+ returnValue = this.transactionManager.prepare(this.transactedFieldMemory, transaction.getDeferredWrites(), RETRY_COUNT);
+ return returnValue; //returning false will cause the transaction to be aborted
}
- /**
- * Inform the transactional system that transactional activity will start
- * to happen for this thread. Make changes in transactional memory.
- * @deprecated
- */
- public void begin(int isolationLevel)
- {
- logger.debug("begin invoked on stm system.");
- STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(true);
- setCurrentTransactionIsolation(isolationLevel);
- }
/**
* This method tells the STM to create a transaction. The transaction is
@@ -145,6 +145,9 @@
public void discard()
{
this.isolationLevel.remove();
+ STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
+ this.transactionManager.abort(this.transactedFieldMemory, transaction);
+ TransactionFactory.getFactory().deallocate();
}
public String getDatabaseName()
@@ -161,17 +164,7 @@
{
this.isolationLevel.set(isolationLevel);
STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
- /*
- if (null != transaction)
- {
- transaction.setIsolationLevel(IsolationFactory.createIsolationLevel(isolationLevel));
- }
- else
- {
- logger.warn("Attempt to set the transaction isolation level when a transaction has not been created.");
- }
- */
- }
+ }
/**
* This method is used to indicate no more changes are going to be issued to the
* STM for this thread-STMTransaction.
@@ -181,4 +174,16 @@
//TODO:jrw, errm, do something......
}
+ public Object loadEntity(LoadEntityParameter entityLoad)
+ {
+ entityLoad.setReplicatedModelMemory(this.transactedModelMemory);
+ STMTransaction transaction = TransactionFactory.getFactory().getCurrentTransaction(false);
+
+ return transaction.load(entityLoad);
+ }
+
+ public Map<String, List<Object>> getModel()
+ {
+ return this.transactedModelMemory;
+ }
}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/InjectedSTM.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/InjectedSTM.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/InjectedSTM.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,24 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.stm.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Fields annotated with this are injected with an STM reference.
+ *
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+ at Target ({ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface InjectedSTM {
+
+}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/STMEntity.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/STMEntity.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/annotation/STMEntity.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,25 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.stm.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates the entity annotated is part of the STM system.
+ *
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+ at Target(ElementType.TYPE)
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface STMEntity
+{
+
+}
Copied: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/STMTransaction.java (from rev 28944, labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/spec/STMTransaction.java)
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/STMTransaction.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/STMTransaction.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.stm.transaction;
+
+import java.util.Map;
+
+import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldReadParameter;
+import uk.ac.ncl.sdia.a8905943.stm.field.FieldWriteParameter;
+import uk.ac.ncl.sdia.a8905943.stm.model.LoadEntityParameter;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
+
+
+/**
+ * Purpose of this object is for behaviour of a transaction that
+ * uses memory to control changes.a
+ *
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+public interface STMTransaction
+{
+ public int getStatus();
+ public Boolean write(FieldWriteParameter fieldWrite);
+ public Object read(FieldReadParameter fieldRead);
+ public void setIsolationLevel(Isolation isolation);
+ public void startTransaction();
+ public Object load(LoadEntityParameter load);
+ public Map<Long, TransactedObjectReference> getDeferredWrites();
+ public void setStatus(int status);
+}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TransactionManager.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TransactionManager.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/transaction/TransactionManager.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -6,26 +6,28 @@
*/
package uk.ac.ncl.sdia.a8905943.stm.transaction;
+import java.util.ArrayDeque;
+import java.util.Deque;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import javax.transaction.Status;
+
import org.apache.log4j.Logger;
-import org.infinispan.Cache;
-import uk.ac.ncl.sdia.a8905943.handle.TransactedObjectReference;
-import uk.ac.ncl.sdia.a8905943.impl.TransactionImpl;
-import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
+import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
+import uk.ac.ncl.sdia.a8905943.stm.object.TransactedObjectReference;
public class TransactionManager
{
- private final Map<Long, TransactionImpl> transactionsKeyedByVersion = new ConcurrentHashMap<Long, TransactionImpl>();
+ private final Map<Long, STMTransactionImpl> transactionsKeyedByVersion = new ConcurrentHashMap<Long, STMTransactionImpl>();
private static final Logger logger = Logger.getLogger(TransactionManager.class);
- public TransactionImpl findTransaction(Long version)
+ public STMTransactionImpl findTransaction(Long version)
{
return this.transactionsKeyedByVersion.get(version);
}
- public boolean addTransaction(TransactionImpl transaction)
+ public boolean addTransaction(STMTransactionImpl transaction)
{
return (null == this.transactionsKeyedByVersion.put(transaction.getVersion() , transaction) ? Boolean.TRUE.booleanValue(): Boolean.FALSE.booleanValue());
}
@@ -43,7 +45,7 @@
* @param transaction the transaction to prepare
* @return did the prepare of resources succeed without conflict
*/
- public boolean prepare(TransactionImpl transaction)
+ public boolean prepare(STMTransactionImpl transaction)
{
boolean returnValue = false;
@@ -57,22 +59,86 @@
* @param transaction
* @return
*/
- public boolean validate(TransactionImpl transaction, Cache<Long, TransactedObjectReference> replicatedFieldMemory)
+ public boolean validate(STMTransactionImpl transaction, Map<Long, TransactedObjectReference> replicatedFieldMemory)
{
boolean returnValue = true;
/* get the reads, check the version of all fields read during the transaction against all shared versions.*/
- for (TransactedObjectReference read : transaction.getDeferredReads().values())
+ for (TransactedObjectReference read : transaction.getDeferredReads().values()) // values() is not great performance
{
- boolean fail = read.getVersion() == replicatedFieldMemory.get(read.getLookupIdentity()).getVersion();
- if (fail)
- {// validation failure occured
+ long readVersion = read.getVersion();
+ long currentVersion = replicatedFieldMemory.get(read.getLookupIdentity()).getVersion() ;
+ if (readVersion < currentVersion)
+ {// validation failured
logger.info("Validation phase for STM Transaction found a serialization conflict. The validation failed for transaction.");
+ returnValue = false;
break; // drop out of further validation. Validating is over and nothing can recover the situation
}
}
return returnValue;
}
+ private boolean isStale(TransactedObjectReference read, TransactedObjectReference current)
+ {
+ return read.getVersion() < current.getVersion();
+ }
+ public void abort(Map<Long, TransactedObjectReference> fieldMemory, STMTransaction transaction)
+ throws IllegalStateException
+ {
+ /* Depending on how far this transaction has progressed need to undo locks and clear
+ * collection objects. */
+ logger.info("STMTransaction has been called to abort the transaction.");
+ try
+ {
+ if (Status.STATUS_PREPARED == transaction.getStatus())
+ {// release all the locks on resources
+ transaction.setStatus(Status.STATUS_MARKED_ROLLBACK);
+ for (TransactedObjectReference reference : transaction.getDeferredWrites().values())
+ {
+ TransactedObjectReference sharedReference = fieldMemory.get(reference.getLookupIdentity());
+ if (sharedReference.getPrepared().isHeldByCurrentThread())
+ {
+ sharedReference.getPrepared().unlock();
+ }
+ else
+ {
+ logger.error("Problem occured, prepared lock is not held by current thread. Interleaving threads not working properly.");
+ }
+ }
+ logger.info("STMTransaction has finished releasing all the locks aquired during prepare phase.");
+ }
+ transaction.setStatus(Status.STATUS_ROLLEDBACK);
+ }
+ catch (Exception e)
+ {
+ logger.error(e.getMessage(), e);
+ }
+ }
+
+ public boolean prepare(Map<Long, TransactedObjectReference> fieldMemory, Map<Long, TransactedObjectReference> writes, int retryCount)
+ {
+ logger.info("STMTransaction has been called to prepare transaction.");
+ Deque<TransactedObjectReference> lockedFields = new ArrayDeque<TransactedObjectReference>(writes.values().size());
+
+
+ for (TransactedObjectReference write : writes.values())
+ {
+ // try and get the lock
+ boolean locked = fieldMemory.get(write.getLookupIdentity()).getPrepared().tryLock();
+ if (locked)
+ {
+ lockedFields.addFirst(write);
+ }
+
+ // now validate to ensure the shared value is not updated between validation and lock
+ }
+
+
+ // loop through the write list, validate and attempt lock
+
+ return false;
+ }
+
+
public TransactionManager()
{
}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Read.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Read.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Read.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -8,7 +8,7 @@
import javax.transaction.xa.Xid;
-import uk.ac.ncl.sdia.a8905943.impl.TransactionImpl;
+import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
@@ -44,7 +44,7 @@
}
@Override
- public void discardHistory(TransactionImpl transaction)
+ public void discardHistory(STMTransactionImpl transaction)
{
// FIXME discardHistory
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Write.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Write.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/tracker/Write.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -8,7 +8,7 @@
import javax.transaction.xa.Xid;
-import uk.ac.ncl.sdia.a8905943.impl.TransactionImpl;
+import uk.ac.ncl.sdia.a8905943.impl.STMTransactionImpl;
import uk.ac.ncl.sdia.a8905943.isolation.Isolation;
@@ -45,7 +45,7 @@
}
@Override
- public void discardHistory(TransactionImpl transaction)
+ public void discardHistory(STMTransactionImpl transaction)
{
// FIXME discardHistory
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/transaction/compressor/PostCommitTransactionMerger.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/transaction/compressor/PostCommitTransactionMerger.java 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/transaction/compressor/PostCommitTransactionMerger.java 2009-08-23 19:04:58 UTC (rev 29035)
@@ -6,7 +6,7 @@
*/
package uk.ac.ncl.sdia.a8905943.transaction.compressor;
-import uk.ac.ncl.sdia.a8905943.spec.STMTransaction;
+import uk.ac.ncl.sdia.a8905943.stm.transaction.STMTransaction;
public class PostCommitTransactionMerger
{
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/META-INF/jboss-aop.xml
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/META-INF/jboss-aop.xml 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/META-INF/jboss-aop.xml 2009-08-23 19:04:58 UTC (rev 29035)
@@ -1,12 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<aop xmlns="urn:jboss:aop-beans:1.0">
- <!--
- <aspect class="uk.ac.ncl.sdia.a8905943.aspects.VersioningAspectImpl"/>
- -->
- <!-- field pointcut -->
- <!--
- <bind pointcut="set(* uk.ac.ncl.sdia.a8905943.model.Car->*)">
- <advice aspect="uk.ac.ncl.sdia.a8905943.aspects.VersioningAspectImpl" name="version"/>
- </bind>
- -->
+ <aspect name="stmreadaspect" class="uk.ac.ncl.sdia.a8905943.aspects.STMReadAspect" />
+ <aspect name="stmwriteaspect" class="uk.ac.ncl.sdia.a8905943.aspects.STMWriteAspect" />
+ <aspect name="stminjectionaspect"
+ class="uk.ac.ncl.sdia.a8905943.aspects.STMInjectionAspect" />
+
+ <bind
+ pointcut="execution(* *->@uk.ac.ncl.sdia.a8905943.aspects.annotation.STMWriteable(..))">
+ <advice name="stmwrite" aspect="stmwriteaspect" />
+ </bind>
+
+ <bind
+ pointcut="execution(* *->@uk.ac.ncl.sdia.a8905943.aspects.annotation.STMReadable(..))">
+ <advice name="stmread" aspect="stmreadaspect" />
+ </bind>
+
+ <bind
+ pointcut="field(uk.ac.ncl.sdia.a8905943.stm.STM *->@uk.ac.ncl.sdia.a8905943.stm.annotation.InjectedSTM )">
+ <advice name="access" aspect="stminjectionaspect" />
+ </bind>
+
</aop>
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/log4j.xml
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/log4j.xml 2009-08-23 19:03:38 UTC (rev 29034)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/resources/log4j.xml 2009-08-23 19:04:58 UTC (rev 29035)
@@ -37,7 +37,7 @@
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
- <param name="Threshold" value="INFO" />
+ <param name="Threshold" value="DEBUG" />
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
More information about the jboss-svn-commits
mailing list