[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