http://ofbiz.116.s1.nabble.com/Re-svn-commit-r1476296-in-ofbiz-trunk-framework-entity-src-org-ofbiz-entity-Delegator-java-GenericDea-tp4641196p4644083.html
> Hi Paul,
>
> Yes that should be the way indeed. We should do it before creating R13
>
> Jacques
>
> From: "Paul Foxworthy" <
[hidden email]>
>> 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.