(sorry for previous message; seems my email client did me a joke)

Then I would also add a warning in log. 

But I'm not quite sure all this would be enough. 
It'd be better to refactor it, to remove any possible confusions. Fortunately 
those methods seems to not be much used OOTB.

Of course this means that we are sure we will not lose anything from this 
refactoring. It seems you are quite sure from the javadoc, right?

Jacques

From: "Adrian Crum" <adrian.c...@sandglass-software.com>
> We could change the code to always clear the cache, but leave the method 
> signature the same and mention in the JavaDocs that the doCacheClear 
> parameter will be ignored.
> 
> -Adrian
> 
> On 5/11/2013 12:54 PM, Jacques Le Roux wrote:
>> Adrian,
>>
>> In javadoc of numbers of methods of Delegator.java you added this sentence
>> -     *            boolean that specifies whether to clear related cache 
>> entries
>> -     *            for this primaryKey to be created
>> +     *            boolean that specifies whether or not to automatically 
>> clear
>> +     *            cache entries related to this operation. This should 
>> always be
>> +     *            <code>true</code> - otherwise you will lose data 
>> integrity.Now I wonder if we should no more and remove all those . What's 
>> the point of letting users not doing a cache clear there?ThanksJacquesFrom: 
>> <adri...@apache.org>
>>> Author: adrianc
>>> Date: Fri Apr 26 17:04:49 2013
>>> New Revision: 1476296
>>>
>>> URL: http://svn.apache.org/r1476296
>>> Log:
>>> Some bug fixes for entity engine caches. GenericDelegator was inconsistent 
>>> in clearing caches - some methods cleared the cache before the entity 
>>> operation (wrong) while others cleared the cache after the entity operation 
>>> (right). Also, I updated the Delegator JavaDocs to warn against skipping 
>>> the cache clearing step - which shouldn't be done. Finally, the 
>>> AbstractEntityConditionCache.storeHook method doesn't work (for a number of 
>>> reasons) so I bypassed it.
>>>
>>> Modified:
>>>     ofbiz/trunk/framework/entity/src/org/ofbiz/entity/Delegator.java
>>>     ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
>>>     
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/cache/AbstractEntityConditionCache.java
>>>     ofbiz/trunk/framework/entity/src/org/ofbiz/entity/cache/Cache.java
>>>     
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/eca/EntityEcaHandler.java
>>>     
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java
>>>
>>> Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/Delegator.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/Delegator.java?rev=1476296&r1=1476295&r2=1476296&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/Delegator.java 
>>> (original)
>>> +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/Delegator.java Fri 
>>> Apr 26 17:04:49 2013
>>> @@ -159,8 +159,9 @@ public interface Delegator {
>>>       * @param primaryKey
>>>       *            The GenericPK to create a value in the datasource from
>>>       * @param doCacheClear
>>> -     *            boolean that specifies whether to clear related cache 
>>> entries
>>> -     *            for this primaryKey to be created
>>> +     *            boolean that specifies whether or not to automatically 
>>> clear
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return GenericValue instance containing the new instance
>>>       */
>>>      public GenericValue create(GenericPK primaryKey, boolean doCacheClear) 
>>> throws GenericEntityException;
>>> @@ -183,7 +184,8 @@ public interface Delegator {
>>>       *            The GenericValue to create a value in the datasource from
>>>       * @param doCacheClear
>>>       *            boolean that specifies whether or not to automatically 
>>> clear
>>> -     *            cache entries related to this operation
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return GenericValue instance containing the new instance
>>>       */
>>>      public GenericValue create(GenericValue value, boolean doCacheClear) 
>>> throws GenericEntityException;
>>> @@ -222,7 +224,8 @@ public interface Delegator {
>>>       *            instance
>>>       * @param doCacheClear
>>>       *            boolean that specifies whether or not to automatically 
>>> clear
>>> -     *            cache entries related to this operation
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return GenericValue instance containing the new or updated instance
>>>       */
>>>      public GenericValue createOrStore(GenericValue value, boolean 
>>> doCacheClear) throws GenericEntityException;
>>> @@ -950,7 +953,8 @@ public interface Delegator {
>>>       *            GenericValue instance containing the entity to refresh
>>>       * @param doCacheClear
>>>       *            boolean that specifies whether or not to automatically 
>>> clear
>>> -     *            cache entries related to this operation
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       */
>>>      public void refresh(GenericValue value, boolean doCacheClear) throws 
>>> GenericEntityException;
>>>
>>> @@ -999,7 +1003,8 @@ public interface Delegator {
>>>       *            or by and fields to remove
>>>       * @param doCacheClear
>>>       *            boolean that specifies whether or not to automatically 
>>> clear
>>> -     *            cache entries related to this operation
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return int representing number of rows effected by this operation
>>>       */
>>>      public int removeAll(List<? extends GenericEntity> dummyPKs, boolean 
>>> doCacheClear) throws GenericEntityException;
>>> @@ -1013,8 +1018,9 @@ public interface Delegator {
>>>       * @param entityName
>>>       *            The Name of the Entity as defined in the entity XML file
>>>       * @param doCacheClear
>>> -     *            boolean that specifies whether to clear cache entries 
>>> for this
>>> -     *            value to be removed
>>> +     *            boolean that specifies whether or not to automatically 
>>> clear
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @param fields
>>>       *            The fields of the named entity to query by with their
>>>       *            corresponding values
>>> @@ -1045,8 +1051,9 @@ public interface Delegator {
>>>       *            The fields of the named entity to query by with their
>>>       *            corresponding values
>>>       * @param doCacheClear
>>> -     *            boolean that specifies whether to clear cache entries 
>>> for this
>>> -     *            value to be removed
>>> +     *            boolean that specifies whether or not to automatically 
>>> clear
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return int representing number of rows effected by this operation
>>>       */
>>>      public int removeByAnd(String entityName, Map<String, ? extends 
>>> Object> fields, boolean doCacheClear) throws GenericEntityException;
>>> @@ -1083,8 +1090,9 @@ public interface Delegator {
>>>       * @param condition
>>>       *            The condition used to restrict the removing
>>>       * @param doCacheClear
>>> -     *            boolean that specifies whether to clear cache entries 
>>> for this
>>> -     *            value to be removed
>>> +     *            boolean that specifies whether or not to automatically 
>>> clear
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return int representing number of rows effected by this operation
>>>       */
>>>      public int removeByCondition(String entityName, EntityCondition 
>>> condition, boolean doCacheClear) throws GenericEntityException;
>>> @@ -1104,8 +1112,9 @@ public interface Delegator {
>>>       * @param primaryKey
>>>       *            The primary key of the entity to remove.
>>>       * @param doCacheClear
>>> -     *            boolean that specifies whether to clear cache entries 
>>> for this
>>> -     *            primaryKey to be removed
>>> +     *            boolean that specifies whether or not to automatically 
>>> clear
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return int representing number of rows effected by this operation
>>>       */
>>>      public int removeByPrimaryKey(GenericPK primaryKey, boolean 
>>> doCacheClear) throws GenericEntityException;
>>> @@ -1135,8 +1144,9 @@ public interface Delegator {
>>>       * @param value
>>>       *            GenericValue instance containing the entity
>>>       * @param doCacheClear
>>> -     *            boolean that specifies whether to clear cache entries 
>>> for this
>>> -     *            value to be removed
>>> +     *            boolean that specifies whether or not to automatically 
>>> clear
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return int representing number of rows effected by this operation
>>>       */
>>>      public int removeRelated(String relationName, GenericValue value, 
>>> boolean doCacheClear) throws GenericEntityException;
>>> @@ -1156,8 +1166,9 @@ public interface Delegator {
>>>       * @param value
>>>       *            The GenericValue object of the entity to remove.
>>>       * @param doCacheClear
>>> -     *            boolean that specifies whether to clear cache entries 
>>> for this
>>> -     *            value to be removed
>>> +     *            boolean that specifies whether or not to automatically 
>>> clear
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return int representing number of rows effected by this operation
>>>       */
>>>      public int removeValue(GenericValue value, boolean doCacheClear) 
>>> throws GenericEntityException;
>>> @@ -1199,7 +1210,8 @@ public interface Delegator {
>>>       *            GenericValue instance containing the entity
>>>       * @param doCacheClear
>>>       *            boolean that specifies whether or not to automatically 
>>> clear
>>> -     *            cache entries related to this operation
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return int representing number of rows effected by this operation
>>>       */
>>>      public int store(GenericValue value, boolean doCacheClear) throws 
>>> GenericEntityException;
>>> @@ -1236,7 +1248,8 @@ public interface Delegator {
>>>       *            store
>>>       * @param doCacheClear
>>>       *            boolean that specifies whether or not to automatically 
>>> clear
>>> -     *            cache entries related to this operation
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return int representing number of rows effected by this operation
>>>       */
>>>      public int storeAll(List<GenericValue> values, boolean doCacheClear) 
>>> throws GenericEntityException;
>>> @@ -1256,7 +1269,8 @@ public interface Delegator {
>>>       *            store
>>>       * @param doCacheClear
>>>       *            boolean that specifies whether or not to automatically 
>>> clear
>>> -     *            cache entries related to this operation
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @param createDummyFks
>>>       *            boolean that specifies whether or not to automatically 
>>> create
>>>       *            "dummy" place holder FKs
>>> @@ -1288,8 +1302,9 @@ public interface Delegator {
>>>       * @param condition
>>>       *            The condition that restricts the list of stored values
>>>       * @param doCacheClear
>>> -     *            boolean that specifies whether to clear cache entries for
>>> -     *            these values
>>> +     *            boolean that specifies whether or not to automatically 
>>> clear
>>> +     *            cache entries related to this operation. This should 
>>> always be
>>> +     *            <code>true</code> - otherwise you will lose data 
>>> integrity.
>>>       * @return int representing number of rows effected by this operation
>>>       * @throws GenericEntityException
>>>       */
>>>
>>> Modified: 
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java?rev=1476296&r1=1476295&r2=1476296&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java 
>>> (original)
>>> +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java 
>>> Fri Apr 26 17:04:49 2013
>>> @@ -995,12 +995,6 @@ public class GenericDelegator implements
>>>
>>>              GenericHelper helper = 
>>> getEntityHelper(primaryKey.getEntityName());
>>>
>>> -            if (doCacheClear) {
>>> -                // always clear cache before the operation
>>> -                ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CLEAR, 
>>> EntityEcaHandler.OP_REMOVE, primaryKey, false);
>>> -                this.clearCacheLine(primaryKey);
>>> -            }
>>> -
>>>              ecaRunner.evalRules(EntityEcaHandler.EV_RUN, 
>>> EntityEcaHandler.OP_REMOVE, primaryKey, false);
>>>
>>>              // if audit log on for any fields, save old value before 
>>> removing so it's still there
>>> @@ -1013,6 +1007,11 @@ public class GenericDelegator implements
>>>                  removedEntity = this.findOne(primaryKey.getEntityName(), 
>>> primaryKey, false);
>>>              }
>>>              int num = helper.removeByPrimaryKey(primaryKey);
>>> +            if (doCacheClear) {
>>> +                ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CLEAR, 
>>> EntityEcaHandler.OP_REMOVE, primaryKey, false);
>>> +                this.clearCacheLine(primaryKey);
>>> +            }
>>> +
>>>              this.saveEntitySyncRemoveInfo(primaryKey);
>>>
>>>              if (testMode) {
>>> @@ -1064,11 +1063,6 @@ public class GenericDelegator implements
>>>
>>>              GenericHelper helper = getEntityHelper(value.getEntityName());
>>>
>>> -            if (doCacheClear) {
>>> -                ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CLEAR, 
>>> EntityEcaHandler.OP_REMOVE, value, false);
>>> -                this.clearCacheLine(value);
>>> -            }
>>> -
>>>              ecaRunner.evalRules(EntityEcaHandler.EV_RUN, 
>>> EntityEcaHandler.OP_REMOVE, value, false);
>>>
>>>              // if audit log on for any fields, save old value before 
>>> actual remove
>>> @@ -1084,6 +1078,11 @@ public class GenericDelegator implements
>>>              int num = helper.removeByPrimaryKey(value.getPrimaryKey());
>>>              // Need to call removedFromDatasource() here because the 
>>> helper calls removedFromDatasource() on the PK instead of the GenericEntity.
>>>              value.removedFromDatasource();
>>> +            if (doCacheClear) {
>>> +                ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CLEAR, 
>>> EntityEcaHandler.OP_REMOVE, value, false);
>>> +                this.clearCacheLine(value);
>>> +            }
>>> +
>>>
>>>              if (testMode) {
>>>                  if (removedValue != null) {
>>> @@ -1329,12 +1328,6 @@ public class GenericDelegator implements
>>>              ecaRunner.evalRules(EntityEcaHandler.EV_VALIDATE, 
>>> EntityEcaHandler.OP_STORE, value, false);
>>>              GenericHelper helper = getEntityHelper(value.getEntityName());
>>>
>>> -            if (doCacheClear) {
>>> -                // always clear cache before the operation
>>> -                ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CLEAR, 
>>> EntityEcaHandler.OP_STORE, value, false);
>>> -                this.clearCacheLine(value);
>>> -            }
>>> -
>>>              ecaRunner.evalRules(EntityEcaHandler.EV_RUN, 
>>> EntityEcaHandler.OP_STORE, value, false);
>>>              this.encryptFields(value);
>>>
>>> @@ -1350,6 +1343,10 @@ public class GenericDelegator implements
>>>              }
>>>
>>>              int retVal = helper.store(value);
>>> +            if (doCacheClear) {
>>> +                ecaRunner.evalRules(EntityEcaHandler.EV_CACHE_CLEAR, 
>>> EntityEcaHandler.OP_STORE, value, false);
>>> +                this.clearCacheLine(value);
>>> +            }
>>>
>>>              if (testMode) {
>>>                  storeForTestRollback(new 
>>> TestOperation(OperationType.UPDATE, updatedEntity));
>>> @@ -2192,11 +2189,6 @@ public class GenericDelegator implements
>>>       * @see 
>>> org.ofbiz.entity.Delegator#clearCacheLine(org.ofbiz.entity.GenericValue, 
>>> boolean)
>>>       */
>>>      public void clearCacheLine(GenericValue value, boolean distribute) {
>>> -        // TODO: make this a bit more intelligent by passing in the 
>>> operation being done (create, update, remove) so we can not do unnecessary 
>>> cache clears...
>>> -        // for instance:
>>> -        // on create don't clear by primary cache (and won't clear 
>>> original values because there won't be any)
>>> -        // on remove don't clear by and for new values, but do for 
>>> original values
>>> -
>>>          // Debug.logInfo("running clearCacheLine for value: " + value + ", 
>>> distribute: " + distribute, module);
>>>          if (value == null) {
>>>              return;
>>>
>>> Modified: 
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/cache/AbstractEntityConditionCache.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/cache/AbstractEntityConditionCache.java?rev=1476296&r1=1476295&r2=1476296&view=diff
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/cache/AbstractEntityConditionCache.java
>>>  (original)
>>> +++ 
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/cache/AbstractEntityConditionCache.java
>>>  Fri Apr 26 17:04:49 2013
>>> @@ -59,6 +59,21 @@ public abstract class AbstractEntityCond
>>>          return conditionCache.put(key, value);
>>>      }
>>>
>>> +    /**
>>> +     * Removes all condition caches that include the specified entity.
>>> +     */
>>> +    public void remove(GenericEntity entity) {
>>> +        UtilCache.clearCache(getCacheName(entity.getEntityName()));
>>> +        ModelEntity model = entity.getModelEntity();
>>> +        if (model != null) {
>>> +            Iterator<String> it = model.getViewConvertorsIterator();
>>> +            while (it.hasNext()) {
>>> +                String targetEntityName = it.next();
>>> +                UtilCache.clearCache(getCacheName(targetEntityName));
>>> +            }
>>> +        }
>>> +    }
>>> +
>>>      public void remove(String entityName, EntityCondition condition) {
>>>          UtilCache<EntityCondition, ConcurrentMap<K, V>> cache = 
>>> getCache(entityName);
>>>          if (cache == null) return;
>>>
>>> Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/cache/Cache.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/cache/Cache.java?rev=1476296&r1=1476295&r2=1476296&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/cache/Cache.java 
>>> (original)
>>> +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/cache/Cache.java Fri 
>>> Apr 26 17:04:49 2013
>>> @@ -112,16 +112,22 @@ public class Cache {
>>>      public GenericValue remove(GenericEntity entity) {
>>>          if (Debug.verboseOn()) Debug.logVerbose("Cache remove 
>>> GenericEntity: " + entity, module);
>>>          GenericValue oldEntity = 
>>> entityCache.remove(entity.getPrimaryKey());
>>> -        entityListCache.storeHook(entity, null);
>>> -        entityObjectCache.storeHook(entity, null);
>>> +        // Workaround because AbstractEntityConditionCache.storeHook 
>>> doesn't work.
>>> +        entityListCache.remove(entity);
>>> +        entityObjectCache.remove(entity);
>>> +        // entityListCache.storeHook(entity, null);
>>> +        // entityObjectCache.storeHook(entity, null);
>>>          return oldEntity;
>>>      }
>>>
>>>      public GenericValue remove(GenericPK pk) {
>>>          if (Debug.verboseOn()) Debug.logVerbose("Cache remove GenericPK: " 
>>> + pk, module);
>>>          GenericValue oldEntity = entityCache.remove(pk);
>>> -        entityListCache.storeHook(pk, null);
>>> -        entityObjectCache.storeHook(pk, null);
>>> +        // Workaround because AbstractEntityConditionCache.storeHook 
>>> doesn't work.
>>> +        entityListCache.remove(pk);
>>> +        entityObjectCache.remove(pk);
>>> +        // entityListCache.storeHook(pk, null);
>>> +        // entityObjectCache.storeHook(pk, null);
>>>          return oldEntity;
>>>      }
>>> }
>>>
>>> Modified: 
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/eca/EntityEcaHandler.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/eca/EntityEcaHandler.java?rev=1476296&r1=1476295&r2=1476296&view=diff
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/eca/EntityEcaHandler.java 
>>> (original)
>>> +++ 
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/eca/EntityEcaHandler.java 
>>> Fri Apr 26 17:04:49 2013
>>> @@ -34,6 +34,9 @@ public interface EntityEcaHandler<T> {
>>>      public static final String EV_VALIDATE = "validate";
>>>      public static final String EV_RUN = "run";
>>>      public static final String EV_RETURN = "return";
>>> +    /**
>>> +     * Invoked after the entity operation, but before the cache is cleared.
>>> +     */
>>>      public static final String EV_CACHE_CLEAR = "cache-clear";
>>>      public static final String EV_CACHE_CHECK = "cache-check";
>>>      public static final String EV_CACHE_PUT = "cache-put";
>>>
>>> Modified: 
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java?rev=1476296&r1=1476295&r2=1476296&view=diff
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java 
>>> (original)
>>> +++ 
>>> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java 
>>> Fri Apr 26 17:04:49 2013
>>> @@ -107,7 +107,7 @@ public class EntityTestSuite extends Ent
>>>          observer.arg = null;
>>>          GenericValue clonedValue = (GenericValue) testValue.clone();
>>>          clonedValue.put("description", "New Testing Type #1");
>>> -        assertTrue("Observable has changed", testValue.hasChanged());
>>> +        assertTrue("Cloned Observable has changed", 
>>> clonedValue.hasChanged());
>>>          assertEquals("Observer called with cloned GenericValue field 
>>> name", "description", observer.arg);
>>>          // now store it
>>>          testValue.store();
>>> @@ -142,12 +142,11 @@ public class EntityTestSuite extends Ent
>>>       */
>>>      public void testEntityCache() throws Exception {
>>>          // Test primary key cache
>>> -        GenericValue testValue = delegator.findOne("TestingType", true, 
>>> "testingTypeId", "TEST-2");
>>> -        assertEquals("Retrieved from cache value has the correct 
>>> description", "Testing Type #2", testValue.getString("description"));
>>> +        GenericValue testValue = delegator.findOne("TestingType", true, 
>>> "testingTypeId", "TEST-3");
>>> +        assertEquals("Retrieved from cache value has the correct 
>>> description", "Testing Type #3", testValue.getString("description"));
>>>          // Test immutable
>>>          try {
>>> -            testValue.put("description", "New Testing Type #2");
>>> -            testValue.store();
>>> +            testValue.put("description", "New Testing Type #3");
>>>              fail("Modified an immutable GenericValue");
>>>          } catch (IllegalStateException e) {
>>>          }
>>> @@ -156,6 +155,17 @@ public class EntityTestSuite extends Ent
>>>              fail("Modified an immutable GenericValue");
>>>          } catch (UnsupportedOperationException e) {
>>>          }
>>> +        // Test entity value update operation updates the cache
>>> +        testValue = (GenericValue) testValue.clone();
>>> +        testValue.put("description", "New Testing Type #3");
>>> +        testValue.store();
>>> +        testValue = delegator.findOne("TestingType", true, 
>>> "testingTypeId", "TEST-3");
>>> +        assertEquals("Retrieved from cache value has the correct 
>>> description", "New Testing Type #3", testValue.getString("description"));
>>> +        // Test entity value remove operation updates the cache
>>> +        testValue = (GenericValue) testValue.clone();
>>> +        testValue.remove();
>>> +        testValue = delegator.findOne("TestingType", true, 
>>> "testingTypeId", "TEST-3");
>>> +        assertEquals("Retrieved from cache value is null", null, 
>>> testValue);
>>>          // Test entity condition cache
>>>          EntityCondition testCondition = 
>>> EntityCondition.makeCondition("description", EntityOperator.EQUALS, 
>>> "Testing Type #2");
>>>          List<GenericValue> testList = delegator.findList("TestingType", 
>>> testCondition, null, null, null, true);
>>> @@ -165,7 +175,6 @@ public class EntityTestSuite extends Ent
>>>          // Test immutable
>>>          try {
>>>              testValue.put("description", "New Testing Type #2");
>>> -            testValue.store();
>>>              fail("Modified an immutable GenericValue");
>>>          } catch (IllegalStateException e) {
>>>          }
>>> @@ -174,13 +183,24 @@ public class EntityTestSuite extends Ent
>>>              fail("Modified an immutable GenericValue");
>>>          } catch (UnsupportedOperationException e) {
>>>          }
>>> -        /* Commenting this out for now because the tests fail due to flaws 
>>> in the EntityListCache implementation.
>>> +        // Test entity value create operation updates the cache
>>>          testValue = (GenericValue) testValue.clone();
>>> +        testValue.put("testingTypeId", "TEST-9");
>>> +        testValue.create();
>>> +        testList = delegator.findList("TestingType", testCondition, null, 
>>> null, null, true);
>>> +        assertEquals("Delegator findList returned two values", 2, 
>>> testList.size());
>>> +        // Test entity value update operation updates the cache
>>>          testValue.put("description", "New Testing Type #2");
>>>          testValue.store();
>>>          testList = delegator.findList("TestingType", testCondition, null, 
>>> null, null, true);
>>> +        assertEquals("Delegator findList returned one value", 1, 
>>> testList.size());
>>> +        // Test entity value remove operation updates the cache
>>> +        testValue = testList.get(0);
>>> +        testValue = (GenericValue) testValue.clone();
>>> +        testValue.remove();
>>> +        testList = delegator.findList("TestingType", testCondition, null, 
>>> null, null, true);
>>>          assertEquals("Delegator findList returned empty list", 0, 
>>> testList.size());
>>> -        */
>>> +        // TODO: Test view entities.
>>>      }
>>>
>>>      /*
>>>
>>>
>

Reply via email to