requestObjectCache not cleared in ObjectContentManager.getObjectIterator()
--------------------------------------------------------------------------

                 Key: JCR-2001
                 URL: https://issues.apache.org/jira/browse/JCR-2001
             Project: Jackrabbit Content Repository
          Issue Type: Bug
          Components: jackrabbit-ocm
    Affects Versions: 1.5.2
            Reporter: David Franke
             Fix For: 1.5.2


I found this bug using an old snapshot version (1.5-ASF666297), but I had a 
look at the sources in the trunk and the implementation has not changed, so I 
assume it still exists.

This bug only applies to the two methods Iterator getObjectIterator(...). 
Collection getObjects(...) works.
The method 
public Object getObject(Session session, String path)
puts objects in the RequestObjectCache. If an object is already cached it is 
retrieved from the cache.

if (requestObjectCache.isCached(path))
 {
        return requestObjectCache.getObject(path);
}

In ObjectContentManager.getObjects() this cache is cleared after retrieving the 
object.
In ObjectContentManager.getObjectIterator() this is never cleared.

This makes problems if I make several searches with the same 
ObjectContentManager while the data in the repository changes.

Example:
UserSearch searches for all user with a given name. 
An XPath is created like this:  //(*, xy:user)[...@name='givenName']
It always keeps the same instance of ObjectContenManager to call the search 
until the session expires:

userIterator = ocm.getObjectIterator(query,Query.XPATH);
...

In the meantime a user may change his name. When I now search for this new 
name, the user is found, but the old user object will be returned (with old 
name). There is no way to clear the cache manually. ocm.refresh(false) does not 
help in this case.

-- 
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