http://ofbiz.116.s1.nabble.com/Re-svn-commit-r1476296-in-ofbiz-trunk-framework-entity-src-org-ofbiz-entity-Delegator-java-GenericDea-tp4641196p4641351.html
Yes that should be the way indeed. We should do it before creating R13
> 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" <
>
>> adrian.crum@
>
>> >
>>>> 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: <
>
>> adrianc@
>
>> >
>>>>>> 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.
>>>>>> }
>>>>>>
>>>>>> /*
>
>
>
>
>
> -----
> --
> 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.