Hi Paul,

Yes that should be the way indeed. We should do it before creating R13

Jacques

From: "Paul Foxworthy" <p...@cohsoft.com.au>
> Hi Adrian and Jacques,
> 
> If doCacheClear will have no effect, I suggest deprecating the method
> signature with the doCacheClear. It can call another overloaded variant
> without that parameter. All calls in trunk should be changed to the second.
> We can leave the deprecated version for backwards compatibility for a time.
> 
> I agree in the release branches that all we should do is add some JavaDoc
> and log a warning.
> 
> Cheers
> 
> Paul Foxworthy
> 
> 
> Jacques Le Roux wrote
>> Jacques Le Roux wrote:
>>> (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 would be done in trunk only. What you proposed + log
>> warning would be in branches releases.
>> 
>> Jacques
>>  
>>> 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" &lt;
> 
>> adrian.crum@
> 
>> &gt;
>>>> 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: &lt;
> 
>> adrianc@
> 
>> &gt; 
>>>>>> 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&lt;String, ?
>>>>>> extends Object&gt; 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&lt;EntityCondition, ConcurrentMap&lt;K, V&gt;>
>>>>>> 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.
>>>>>>      }
>>>>>> 
>>>>>>      /*
> 
> 
> 
> 
> 
> -----
> --
> Coherent Software Australia Pty Ltd
> http://www.coherentsoftware.com.au/
> 
> Bonsai ERP, the all-inclusive ERP system
> http://www.bonsaierp.com.au/
> 
> --
> View this message in context: 
> http://ofbiz.135035.n4.nabble.com/Re-svn-commit-r1476296-in-ofbiz-trunk-framework-entity-src-org-ofbiz-entity-Delegator-java-GenericDea-tp4641196p4641328.html
> Sent from the OFBiz - Dev mailing list archive at Nabble.com.

Reply via email to