[jboss-svn-commits] JBL Code SVN: r29530 - in labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src: main/java/uk/ac/ncl/sdia/a8905943/handle and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Oct 2 12:58:14 EDT 2009
Author: whitingjr
Date: 2009-10-02 12:58:13 -0400 (Fri, 02 Oct 2009)
New Revision: 29530
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/handle/FieldUtils.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/test/java/uk/ac/ncl/sdia/a8905943/entitymanager/TestSTMEntityManagerImpl.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractUnitT.java
Log:
Replaced filter deleted entity functionality.
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-10-02 16:30:23 UTC (rev 29529)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/entitymanager/STMEntityManagerImpl.java 2009-10-02 16:58:13 UTC (rev 29530)
@@ -39,7 +39,6 @@
import uk.ac.ncl.sdia.a8905943.stm.field.RemoveIdentityAction;
import uk.ac.ncl.sdia.a8905943.stm.query.STMQueryImpl;
import uk.ac.ncl.sdia.a8905943.stm.query.filter.Filter;
-import uk.ac.ncl.sdia.a8905943.stm.query.filter.NoOpFilter;
import uk.ac.ncl.sdia.a8905943.stm.query.xpath.extension.NotInExtensionFunction;
@@ -114,19 +113,13 @@
this.xpathContext.setLenient(true);
StringBuffer queryString = new StringBuffer();
queryString.append("model/").append(entityFQCN).append("[");
- queryString.append(idField.getName()).append("=$identityValue and stmf:notin(");
- queryString.append(idField.getName()).append(")]");
-
+ queryString.append(idField.getName()).append("=$identityValue]");
Query query = this.createQuery(queryString.toString());
query.setParameter(IDENTITY_VALUE, entityUniqueIdentity);
- query.setParameter("exclusionList", this.getSTMConnection().getSTM().getDeletedEntities(entity.getClass()));
if (logger.isTraceEnabled())
{
logger.trace("executing query [" + queryString.toString() + "]");
}
- /*returnValue = (null == this.xpathContext.getValue(queryString.toString()) ? Boolean.FALSE
- .booleanValue()
- : Boolean.TRUE.booleanValue());*/
returnValue = (1 <= query.getResultList().size() ? Boolean.TRUE.booleanValue(): Boolean.FALSE.booleanValue() );
}
catch (FieldNotFoundException fnfe)
@@ -206,6 +199,13 @@
}
return returnValue;
}
+ /**
+ *
+ * @param qlString
+ * @param filter
+ * @deprecated
+ * @throws IllegalArgumentException
+ */
private Query createQuery( String qlString, Filter filter)
throws IllegalArgumentException
{
@@ -252,12 +252,19 @@
/* Use custom function to filter the returned entities. The function is
* used here because the EntityManager is manually building the query
* expression. */
+ /*
queryStatement.append("model/").append(entityClass.getName()).append(
"[").append(idField.getName());
queryStatement.append("=$identityValue and stmf:notin(").append(idField.getName()).append(")]");
Query query = this.createQuery(queryStatement.toString(), new NoOpFilter());
query.setParameter("identityValue", primaryKey);
query.setParameter("exclusionList", getSTMConnection().getSTM().getDeletedEntities(entityClass));
+ */
+ queryStatement.append("model/").append(entityClass.getName()).append(
+ "[").append(idField.getName()).append("=$identityValue]");
+ Query query = this.createQuery(queryStatement.toString());
+ query.setParameter("identityValue", primaryKey);
+
if (logger.isTraceEnabled())
{
logger.trace("Executing query [" + queryStatement.toString()
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-10-02 16:30:23 UTC (rev 29529)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/handle/FieldUtils.java 2009-10-02 16:58:13 UTC (rev 29530)
@@ -40,6 +40,7 @@
{
// success, found our id field
returnValue = field;
+ break;
}
}
}
@@ -67,6 +68,12 @@
return returnValue;
}
+ public Long getIdValue(Class entityClass, Object entity)
+ throws FieldNotFoundException
+ {
+ return getValue( findIdField(entityClass), entity);
+ }
+
public List<Method> retrieveTransactionalSetterMethods(Class entityClass)
{
List<Method> returnValue = new ArrayList<Method>();
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-10-02 16:30:23 UTC (rev 29529)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/stm/STM.java 2009-10-02 16:58:13 UTC (rev 29530)
@@ -1,6 +1,7 @@
package uk.ac.ncl.sdia.a8905943.stm;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -20,6 +21,8 @@
import org.apache.log4j.Logger;
import uk.ac.ncl.sdia.a8905943.factory.TransactionFactory;
+import uk.ac.ncl.sdia.a8905943.handle.FieldUtils;
+import uk.ac.ncl.sdia.a8905943.handle.exception.FieldNotFoundException;
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;
@@ -232,9 +235,46 @@
return transaction.load(entityLoad);
}
+ /**
+ * This method filters the model object to remove all the
+ * deleted entities for this transaction.
+ * This implementation is not going to have fantastic performance.
+ *
+ * @return filter collection of current Entities
+ */
public Map<String, Set<Object>> getModel()
{
- return this.transactedModelMemory;
+ Map<String, Set<Object>> returnValue = new HashMap<String, Set<Object>>();
+ for (String key : this.transactedModelMemory.keySet())
+ {
+ Set<Long> deletedEntitiesSet = getDeletedEntityIdentities(key);
+ if (null != deletedEntitiesSet && 0 < deletedEntitiesSet.size())
+ {// there are deleted entities, filter where they intersect
+ returnValue.put(key, new HashSet<Object>());
+ FieldUtils fieldUtils = new FieldUtils();
+
+ for (Object entity : this.transactedModelMemory.get(key))
+ {
+ try
+ {// belt and braces
+ if (!deletedEntitiesSet.contains( fieldUtils.getIdValue(entity.getClass(), entity).longValue() ))
+ {// entity has not been removed
+ returnValue.get(key).add(entity);
+ }
+ }
+ catch (FieldNotFoundException fnfe)
+ {
+ logger.warn(fnfe.getMessage());
+ }
+ }
+ }
+ else
+ {
+ returnValue.put(key, this.transactedModelMemory.get(key));
+ }
+ }
+
+ return returnValue;
}
public void setTimeout(int timeout)
@@ -264,6 +304,13 @@
return this.transactedFieldMemory;
}
+ /**
+ * Filter for expressions.
+ *
+ * @param queryExpression
+ * @return
+ * @deprecated
+ */
public Filter getDeletedEntityFilter(String queryExpression)
{
Filter returnValue = null;
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/entitymanager/TestSTMEntityManagerImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/entitymanager/TestSTMEntityManagerImpl.java 2009-10-02 16:30:23 UTC (rev 29529)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/entitymanager/TestSTMEntityManagerImpl.java 2009-10-02 16:58:13 UTC (rev 29530)
@@ -60,23 +60,30 @@
*/
@Test
public void testCheckSingleResultQueryWorks() {
- Map<String, Set<Object>> modelStore = this.stm.getModel();
- Long carId = new Long(1);
- LeccyCar car = new LeccyCar(carId);
- Set<Object> carList = new HashSet<Object>();
- carList.add(car);
- String carFQCN = "uk.ac.ncl.sdia.a8905943.model.LeccyCar";
- Assert.assertEquals(carFQCN, car.getClass().getName());
- modelStore.put(car.getClass().getName(), carList);
-
- Assert.assertNotNull(this.entityManager);
- Query query = this.entityManager.createQuery("model/"+carFQCN);
- Object entity = query.getSingleResult();
- Assert.assertNotNull(entity);
- Assert.assertNotNull(entity.getClass());
- Assert.assertEquals(entity.getClass(), car.getClass());
- LeccyCar resultEntity = (LeccyCar)entity;
- Assert.assertEquals(car.getId(), resultEntity.getId());
+ try
+ {
+ Map<String, Set<Object>> modelStore = this.stm.getModel();
+ Long carId = new Long(1);
+ LeccyCar car = new LeccyCar(carId);
+ Set<Object> carList = new HashSet<Object>();
+ carList.add(car);
+ String carFQCN = "uk.ac.ncl.sdia.a8905943.model.LeccyCar";
+ Assert.assertEquals(carFQCN, car.getClass().getName());
+ modelStore.put(car.getClass().getName(), carList);
+
+ Assert.assertNotNull(this.entityManager);
+ Query query = this.entityManager.createQuery("model/"+carFQCN);
+ Object entity = query.getSingleResult();
+ Assert.assertNotNull(entity);
+ Assert.assertNotNull(entity.getClass());
+ Assert.assertEquals(entity.getClass(), car.getClass());
+ LeccyCar resultEntity = (LeccyCar)entity;
+ Assert.assertEquals(car.getId(), resultEntity.getId());
+ }
+ catch (NoResultException nre)
+ {
+ Assert.fail(nre.getMessage());
+ }
}
/**
* Check the Query object throws an exception.
@@ -94,19 +101,26 @@
@Test (expected=NonUniqueResultException.class)
public void testCheckSingleResultQueryThrowsNonUniqueException()
{
- Map<String, Set<Object>> modelStore = this.stm.getModel();
- Long carId = new Long(1);
- LeccyCar car = new LeccyCar(carId);
- Set<Object> carList = new HashSet<Object>();
- carList.add(car);
- carList.add(new LeccyCar(new Long(2)));
- String carFQCN = "uk.ac.ncl.sdia.a8905943.model.LeccyCar";
- Assert.assertEquals(carFQCN, car.getClass().getName());
- modelStore.put(car.getClass().getName(), carList);
-
- Assert.assertNotNull(this.entityManager);
- Query query = this.entityManager.createQuery("model/"+carFQCN);
- Object entity = query.getSingleResult();
+ try
+ {
+ Map<String, Set<Object>> modelStore = this.stm.getModel();
+ Long carId = new Long(1);
+ LeccyCar car = new LeccyCar(carId);
+ Set<Object> carList = new HashSet<Object>();
+ carList.add(car);
+ carList.add(new LeccyCar(new Long(2)));
+ String carFQCN = "uk.ac.ncl.sdia.a8905943.model.LeccyCar";
+ Assert.assertEquals(carFQCN, car.getClass().getName());
+ modelStore.put(car.getClass().getName(), carList);
+
+ Assert.assertNotNull(this.entityManager);
+ Query query = this.entityManager.createQuery("model/"+carFQCN);
+ Object entity = query.getSingleResult();
+ }
+ catch (NoResultException nre)
+ {
+ Assert.fail(nre.getMessage());
+ }
}
@Test
@@ -188,7 +202,7 @@
carList.add(new LeccyCar(new Long(2)));
String carFQCN = "uk.ac.ncl.sdia.a8905943.model.LeccyCar";
Assert.assertEquals(carFQCN, car.getClass().getName());
- modelStore.put(car.getClass().getName(), carList);
+ this.modelStore.put(car.getClass().getName(), carList);
Assert.assertNotNull(this.entityManager);
LeccyCar foundEntity = this.entityManager.find(LeccyCar.class, carId);
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractUnitT.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractUnitT.java 2009-10-02 16:30:23 UTC (rev 29529)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/stm/AbstractUnitT.java 2009-10-02 16:58:13 UTC (rev 29530)
@@ -45,7 +45,6 @@
{
Assert.fail(ilnce.getMessage());
}
-
}
@After
More information about the jboss-svn-commits
mailing list