[ 
https://issues.apache.org/jira/browse/OFBIZ-2882?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12756130#action_12756130
 ] 

Bob Morley commented on OFBIZ-2882:
-----------------------------------

FYI -- I have not updated the patch; but we did find a bug with this patch in 
our code.  In Cache.java remove(GenericEntity) it was checking to see if it 
could get the oldEntity, but what it did not realize was that the oldEntity 
could actually exist but be set to the internal NULL.  This is true on creates 
of brand-new entities.

We changed the method to the following:

    public GenericValue remove(GenericEntity entity) {
        if (Debug.verboseOn()) Debug.logVerbose("Cache remove GenericEntity: " 
+ entity, module);
        GenericValue oldEntity = entityCache.remove(entity.getPrimaryKey());

        if (oldEntity == null) {
                // Unable to find the old entity in the case, so we will create 
a version of the original entity to properly remove the items from the related 
caches
                GenericEntity origEntity = 
GenericEntity.createGenericEntity(entity);
                if (entity instanceof GenericValue) {
                        
origEntity.setFields(((GenericValue)entity).getOriginalDbValues());
                }
                entityListCache.storeHook(origEntity, null);
                entityObjectCache.storeHook(origEntity, null);

        } else {
                if( !(oldEntity instanceof NULL )) {
                        // Remove the old entity from the related caches
                    entityListCache.storeHook(oldEntity, null);
                    entityObjectCache.storeHook(oldEntity, null);
                }
        }
        
        return oldEntity;
    }

** We basically added the instanceof NULL check before going to storeHook with 
an oldEntity that represents the NULL generic entity.

> EntityList cache clearing issues when removing generic entity via 
> DelegatorImpl
> -------------------------------------------------------------------------------
>
>                 Key: OFBIZ-2882
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-2882
>             Project: OFBiz
>          Issue Type: Bug
>          Components: framework
>    Affects Versions: SVN trunk
>            Reporter: Bob Morley
>            Assignee: Adam Heath
>            Priority: Critical
>         Attachments: OFBIZ-2882_EntityCacheListFix.patch, 
> OFBIZ-2882_EntityCacheListTest.patch
>
>
> For more information refer to 
> http://www.nabble.com/EntityList-cache-issues-...-to25179637.html
> Ran into some trouble when we turned out caching and started to dependent on 
> the EntityList cache.  The two problems were:
> 1) When attempting to storeHook to the entityListCache or entityObjectCache 
> via the Cache.remove method, the NEW entity was being passed into the OLD 
> entity.  This caused condition matching (in the list cache) to sometimes fail 
> if a matched entity no longer matches do to it being modified.
> 2) During the matching logic the EntityJoinOperator was incorrectly short 
> circuiting.  It was always checking if the lhs/rhs condition was true and if 
> so returning the short-circuit value.  A concrete example is as such -- (A is 
> funny) && (B is funny).  The short-circuit value for this expression is 
> "FALSE" which means that if the first expression is FALSE we short-circuit 
> and return FALSE.  What was happening was "if (A is funny) then return FALSE" 
> rather then "if (A is funny == FALSE) then return FALSE".
> I have a patch in the works for both of these issues and will include a unit 
> tester that illustrates the problems (pre-patch) and passes successfully 
> (post-patch).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to