You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2005/11/09 15:56:34 UTC

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

Author: stefan
Date: Wed Nov  9 06:56:29 2005
New Revision: 332056

URL: http://svn.apache.org/viewcvs?rev=332056&view=rev
Log:
avoid to keep hard references to ItemImpl & ItemState instances

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

Modified: incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/ItemManager.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/ItemManager.java?rev=332056&r1=332055&r2=332056&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/ItemManager.java (original)
+++ incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/ItemManager.java Wed Nov  9 06:56:29 2005
@@ -86,8 +86,6 @@
     private final ItemStateManager itemStateProvider;
     private final HierarchyManager hierMgr;
 
-    private NodeImpl root;
-
     /**
      * A cache for item instances created by this <code>ItemManager</code>
      */
@@ -115,29 +113,6 @@
     }
 
     /**
-     * Returns the root node instance of the repository.
-     *
-     * @return the root node.
-     * @throws RepositoryException
-     */
-    private synchronized NodeImpl getRoot() throws RepositoryException {
-        // lazy instantiation of root node
-        // to avoid chicken & egg kind of problems
-        if (root == null) {
-            try {
-                NodeState rootState = (NodeState) itemStateProvider.getItemState(rootNodeId);
-                // keep a hard reference to root node
-                root = createNodeInstance(rootState, rootNodeDef);
-            } catch (ItemStateException ise) {
-                String msg = "failed to retrieve state of root node";
-                log.debug(msg);
-                throw new RepositoryException(msg, ise);
-            }
-        }
-        return root;
-    }
-
-    /**
      * Disposes this <code>ItemManager</code> and frees resources.
      */
     void dispose() {
@@ -300,7 +275,7 @@
      * @throws RepositoryException
      */
     NodeImpl getRootNode() throws RepositoryException {
-        return getRoot();
+        return (NodeImpl) getItem(rootNodeId);
     }
 
     /**
@@ -340,13 +315,8 @@
         // check cache
         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
+            item = createItemInstance(id);
         }
         return item;
     }
@@ -501,7 +471,10 @@
             throw new RepositoryException(msg, ise);
         }
 
-        if (state.isNode()) {
+        if (id.equals(rootNodeId)) {
+            // special handling required for root node
+            item = createNodeInstance((NodeState) state, rootNodeDef);
+        } else if (state.isNode()) {
             item = createNodeInstance((NodeState) state);
         } else {
             item = createPropertyInstance((PropertyState) state);

Modified: incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java?rev=332056&r1=332055&r2=332056&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java (original)
+++ incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java Wed Nov  9 06:56:29 2005
@@ -130,9 +130,9 @@
     private final NodeTypeRegistry ntReg;
 
     /**
-     * Keep a hard reference to the root node state
+     * uuid of root node
      */
-    private NodeState root;
+    private final String rootNodeUUID;
 
     /**
      * Virtual item state providers
@@ -160,12 +160,10 @@
         cache = new ItemStateReferenceCache();
         this.persistMgr = persistMgr;
         this.ntReg = ntReg;
-
-        try {
-            root = (NodeState) getNonVirtualItemState(new NodeId(rootNodeUUID));
-        } catch (NoSuchItemStateException e) {
-            // create root node
-            root = createRootNodeState(rootNodeUUID, ntReg);
+        this.rootNodeUUID = rootNodeUUID;
+        // create root node state if it doesn't yet exist
+        if (!hasNonVirtualItemState(new NodeId(rootNodeUUID))) {
+            createRootNodeState(rootNodeUUID, ntReg);
         }
     }
 
@@ -496,7 +494,7 @@
 
                 /* create event states */
                 if (events != null) {
-                    events.createEventStates(root.getUUID(), local, this);
+                    events.createEventStates(rootNodeUUID, local, this);
                 }
 
                 /* Push all changes from the local items to the shared items */