You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2005/06/17 08:42:20 UTC

svn commit: r191092 - in /incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core: ItemManager.java state/LocalItemStateManager.java state/SharedItemStateManager.java

Author: tripod
Date: Thu Jun 16 23:42:18 2005
New Revision: 191092

URL: http://svn.apache.org/viewcvs?rev=191092&view=rev
Log:
[JCR-136] Cached item could be lost in cache

Modified:
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemManager.java
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemManager.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemManager.java?rev=191092&r1=191091&r2=191092&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemManager.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemManager.java Thu Jun 16 23:42:18 2005
@@ -275,9 +275,7 @@
             // check privileges
             if (!session.getAccessManager().isGranted(id, AccessManager.READ)) {
                 // clear cache
-                if (isCached(id)) {
-                    evictItem(id);
-                }
+                evictItem(id);
                 // item exists but the session has not been granted read access
                 return false;
             }
@@ -310,9 +308,7 @@
             // check privileges
             if (!session.getAccessManager().isGranted(id, AccessManager.READ)) {
                 // clear cache
-                if (isCached(id)) {
-                    evictItem(id);
-                }
+                evictItem(id);
                 // item exists but the session has not been granted read access
                 return false;
             }
@@ -362,24 +358,22 @@
         // check privileges
         if (!session.getAccessManager().isGranted(id, AccessManager.READ)) {
             // clear cache
-            if (isCached(id)) {
-                evictItem(id);
-            }
+            evictItem(id);
             throw new AccessDeniedException("cannot read item " + id);
         }
 
         // check cache
-        if (isCached(id)) {
-            return retrieveItem(id);
-        }
-
-        // shortcut
-        if (id.denotesNode() && id.equals(rootNodeId)) {
-            return getRoot();
+        ItemImpl item = retrieveItem(id);
+        if (item == null) {
+            // shortcut
+            if (id.denotesNode() && id.equals(rootNodeId)) {
+                item = getRoot();
+            } else {
+                // create instance of item using its state object
+                item = createItemInstance(id);
+            }
         }
-
-        // create instance of item using its state object
-        return createItemInstance(id);
+        return item;
     }
 
     /**
@@ -592,15 +586,6 @@
     }
 
     //---------------------------------------------------< item cache methods >
-    /**
-     * Checks if there's a cache entry for the specified id.
-     *
-     * @param id the id to be checked
-     * @return true if there's a corresponding cache entry, otherwise false.
-     */
-    private boolean isCached(ItemId id) {
-        return itemCache.containsKey(id);
-    }
 
     /**
      * Returns an item reference from the cache.

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java?rev=191092&r1=191091&r2=191092&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/LocalItemStateManager.java Thu Jun 16 23:42:18 2005
@@ -160,16 +160,16 @@
 
         // check cache. synchronized to ensure an entry is not created twice.
         synchronized (cacheMonitor) {
-            if (isCached(id)) {
-                return retrieve(id);
-            }
-
-            // regular behaviour
-            if (id.denotesNode()) {
-                return getNodeState((NodeId) id);
-            } else {
-                return getPropertyState((PropertyId) id);
+            state = retrieve(id);
+            if (state == null) {
+                // regular behaviour
+                if (id.denotesNode()) {
+                    state = getNodeState((NodeId) id);
+                } else {
+                    state = getPropertyState((PropertyId) id);
+                }
             }
+            return state;
         }
     }
 

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java?rev=191092&r1=191091&r2=191092&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java Thu Jun 16 23:42:18 2005
@@ -254,14 +254,16 @@
 
         // check cache. synchronized to ensure an entry is not created twice.
         synchronized (cacheMonitor) {
-            if (isCached(id)) {
-                return retrieve(id);
-            }
-            if (id.denotesNode()) {
-                return getNodeState((NodeId) id);
-            } else {
-                return getPropertyState((PropertyId) id);
+            ItemState state = retrieve(id);
+            if (state == null) {
+                // regular behaviour
+                if (id.denotesNode()) {
+                    state = getNodeState((NodeId) id);
+                } else {
+                    state = getPropertyState((PropertyId) id);
+                }
             }
+            return state;
         }
     }