Author: cziegeler
Date: Tue Aug 19 18:32:49 2014
New Revision: 1618923

URL: http://svn.apache.org/r1618923
Log:
SLING-3848 : JcrNodeResource takes too long and initializes too much too soon. 
Avoid call to Node.getPath 

Modified:
    
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemAdapterFactory.java
    
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
    
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceIterator.java
    
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
    
sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java
    
sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrTestNodeResource.java

Modified: 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemAdapterFactory.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemAdapterFactory.java?rev=1618923&r1=1618922&r2=1618923&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemAdapterFactory.java
 (original)
+++ 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemAdapterFactory.java
 Tue Aug 19 18:32:49 2014
@@ -72,7 +72,7 @@ public class JcrItemAdapterFactory imple
                 if (adaptable instanceof Node) {
                     Node node = (Node) adaptable;
                     return (AdapterType) new 
JcrNodeResource(resourceResolverFactory.getResourceResolver(node
-                            .getSession()), node, 
resourceResolverFactory.getDynamicClassLoader());
+                            .getSession()), node.getPath(), node, 
resourceResolverFactory.getDynamicClassLoader());
                 } else if (adaptable instanceof Property) {
                     Property property = (Property) adaptable;
                     return (AdapterType) new 
JcrPropertyResource(resourceResolverFactory.getResourceResolver(property

Modified: 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java?rev=1618923&r1=1618922&r2=1618923&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
 (original)
+++ 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
 Tue Aug 19 18:32:49 2014
@@ -23,7 +23,6 @@ import static org.apache.jackrabbit.JcrC
 import java.io.InputStream;
 import java.net.URL;
 import java.security.AccessControlException;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.Map;
 
@@ -73,15 +72,16 @@ class JcrNodeResource extends JcrItemRes
     /**
      * Constructor
      * @param resourceResolver
+     * @param The path of the resource
      * @param node
      * @param dynamicClassLoader Dynamic class loader for loading serialized 
objects.
      * @throws RepositoryException
      */
     public JcrNodeResource(final ResourceResolver resourceResolver,
+                           final String path,
                            final Node node,
-                           final ClassLoader dynamicClassLoader)
-    throws RepositoryException {
-        super(resourceResolver, node.getPath(), new 
JcrNodeResourceMetadata(node));
+                           final ClassLoader dynamicClassLoader) {
+        super(resourceResolver, path, new JcrNodeResourceMetadata(node));
         this.dynamicClassLoader = dynamicClassLoader;
         this.node = node;
         this.resourceSuperType = UNSET_RESOURCE_SUPER_TYPE;
@@ -267,6 +267,6 @@ class JcrNodeResource extends JcrItemRes
             LOGGER.error("listChildren: Cannot get children of " + this, re);
         }
 
-        return Collections.<Resource> emptyList().iterator();
+        return null;
     }
 }

Modified: 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceIterator.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceIterator.java?rev=1618923&r1=1618922&r2=1618923&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceIterator.java
 (original)
+++ 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceIterator.java
 Tue Aug 19 18:32:49 2014
@@ -22,6 +22,7 @@ import java.util.Iterator;
 import java.util.NoSuchElementException;
 
 import javax.jcr.ItemNotFoundException;
+import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 
 import org.apache.sling.api.resource.Resource;
@@ -89,8 +90,10 @@ public class JcrNodeResourceIterator imp
     private Resource seek() {
         while (nodes.hasNext()) {
             try {
+                final Node n = nodes.nextNode();
                 Resource resource = new JcrNodeResource(resourceResolver,
-                    nodes.nextNode(), dynamicClassLoader);
+                    n.getPath(),
+                    n, dynamicClassLoader);
                 LOGGER.debug("seek: Returning Resource {}", resource);
                 return resource;
             } catch (final ItemNotFoundException infe) {

Modified: 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java?rev=1618923&r1=1618922&r2=1618923&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
 (original)
+++ 
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
 Tue Aug 19 18:32:49 2014
@@ -192,7 +192,7 @@ public class JcrResourceProvider
                 log.debug(
                     "createResource: Found JCR Node Resource at path '{}'",
                     path);
-                return new JcrNodeResource(resourceResolver, (Node) item, 
dynamicClassLoader);
+                return new JcrNodeResource(resourceResolver, path, (Node) 
item, dynamicClassLoader);
             }
 
             log.debug(
@@ -390,7 +390,7 @@ public class JcrResourceProvider
     public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
         if (type == Session.class) {
             return (AdapterType) session;
-        } else if (type == Principal.class) {       
+        } else if (type == Principal.class) {
             try {
                 if (this.session instanceof JackrabbitSession && 
session.getUserID() != null) {
                     JackrabbitSession s =((JackrabbitSession) this.session);
@@ -481,15 +481,8 @@ public class JcrResourceProvider
                 }
             }
 
-            return new JcrNodeResource(resolver, node, 
this.dynamicClassLoader);
+            return new JcrNodeResource(resolver, path, node, 
this.dynamicClassLoader);
         } catch (final RepositoryException e) {
-            if ( node != null ) {
-                try {
-                    node.remove();
-                } catch ( final RepositoryException re) {
-                    // we ignore this
-                }
-            }
             throw new PersistenceException("Unable to create node at " + path, 
e, path, null);
         }
     }

Modified: 
sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java?rev=1618923&r1=1618922&r2=1618923&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java
 (original)
+++ 
sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java
 Tue Aug 19 18:32:49 2014
@@ -44,7 +44,7 @@ public class JcrNodeResourceTest extends
         getSession().save();
 
         file = rootNode.getNode(name);
-        JcrNodeResource jnr = new JcrNodeResource(null, file, null);
+        JcrNodeResource jnr = new JcrNodeResource(null, file.getPath(), file, 
null);
 
         assertEquals(file.getPath(), jnr.getPath());
 
@@ -62,7 +62,7 @@ public class JcrNodeResourceTest extends
         getSession().save();
 
         file = rootNode.getNode(name);
-        JcrNodeResource jnr = new JcrNodeResource(null, file, null);
+        JcrNodeResource jnr = new JcrNodeResource(null, file.getPath(), file, 
null);
 
         assertEquals(file.getPath(), jnr.getPath());
 
@@ -78,7 +78,7 @@ public class JcrNodeResourceTest extends
         getSession().save();
 
         res = rootNode.getNode(name);
-        JcrNodeResource jnr = new JcrNodeResource(null, res, null);
+        JcrNodeResource jnr = new JcrNodeResource(null, res.getPath(), res, 
null);
 
         assertEquals(res.getPath(), jnr.getPath());
 
@@ -94,7 +94,7 @@ public class JcrNodeResourceTest extends
         getSession().save();
 
         res = rootNode.getNode(name);
-        JcrNodeResource jnr = new JcrNodeResource(null, res, null);
+        JcrNodeResource jnr = new JcrNodeResource(null, res.getPath(), res, 
null);
 
         assertEquals(res.getPath(), jnr.getPath());
 
@@ -107,14 +107,14 @@ public class JcrNodeResourceTest extends
         Node node = rootNode.addNode(name, JcrConstants.NT_UNSTRUCTURED);
         getSession().save();
 
-        JcrNodeResource jnr = new JcrNodeResource(null, node, null);
+        JcrNodeResource jnr = new JcrNodeResource(null, node.getPath(), node, 
null);
         assertEquals(JcrConstants.NT_UNSTRUCTURED, jnr.getResourceType());
 
         String typeName = "some/resource/type";
         node.setProperty(JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY, 
typeName);
         getSession().save();
 
-        jnr = new JcrNodeResource(null, node, null);
+        jnr = new JcrNodeResource(null, node.getPath(), node, null);
         assertEquals(typeName, jnr.getResourceType());
     }
 
@@ -126,7 +126,7 @@ public class JcrNodeResourceTest extends
         node.setProperty(JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY, 
typeName);
         getSession().save();
 
-        Resource jnr = new JcrNodeResource(null, node, null);
+        Resource jnr = new JcrNodeResource(null, node.getPath(), node, null);
         assertEquals(typeName, jnr.getResourceType());
 
         // default super type is null
@@ -137,7 +137,7 @@ public class JcrNodeResourceTest extends
         
typeNode.setProperty(JcrResourceConstants.SLING_RESOURCE_SUPER_TYPE_PROPERTY, 
superTypeName);
         getSession().save();
 
-        jnr = new JcrNodeResource(null, typeNode, null);
+        jnr = new JcrNodeResource(null, typeNode.getPath(), typeNode, null);
         assertEquals(JcrConstants.NT_UNSTRUCTURED, jnr.getResourceType());
         assertEquals(superTypeName, jnr.getResourceSuperType());
 
@@ -146,7 +146,7 @@ public class JcrNodeResourceTest extends
         
node.setProperty(JcrResourceConstants.SLING_RESOURCE_SUPER_TYPE_PROPERTY, 
otherSuperTypeName);
         getSession().save();
 
-        jnr = new JcrNodeResource(null, node, null);
+        jnr = new JcrNodeResource(null, node.getPath(), node, null);
         assertEquals(typeName, jnr.getResourceType());
         assertEquals(otherSuperTypeName, jnr.getResourceSuperType());
 
@@ -154,7 +154,7 @@ public class JcrNodeResourceTest extends
         
node.getProperty(JcrResourceConstants.SLING_RESOURCE_SUPER_TYPE_PROPERTY).remove();
         getSession().save();
 
-        jnr = new JcrNodeResource(null, node, null);
+        jnr = new JcrNodeResource(null, node.getPath(), node, null);
         assertEquals(typeName, jnr.getResourceType());
         assertNull(jnr.getResourceSuperType());
     }
@@ -167,7 +167,7 @@ public class JcrNodeResourceTest extends
         getSession().save();
 
         res = rootNode.getNode(name);
-        JcrNodeResource jnr = new JcrNodeResource(null, res, null);
+        JcrNodeResource jnr = new JcrNodeResource(null, res.getPath(), res, 
null);
 
         final Map<?, ?> props = jnr.adaptTo(Map.class);
 
@@ -234,7 +234,7 @@ public class JcrNodeResourceTest extends
         getSession().save();
 
         file = rootNode.getNode(name);
-        JcrNodeResource jnr = new JcrNodeResource(null, file, null);
+        JcrNodeResource jnr = new JcrNodeResource(null, file.getPath(), file, 
null);
 
         assertEquals(utf8bytes, jnr.adaptTo(InputStream.class));
         assertEquals(utf8bytes.length, 
jnr.getResourceMetadata().getContentLength());

Modified: 
sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrTestNodeResource.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrTestNodeResource.java?rev=1618923&r1=1618922&r2=1618923&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrTestNodeResource.java
 (original)
+++ 
sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrTestNodeResource.java
 Tue Aug 19 18:32:49 2014
@@ -27,7 +27,7 @@ public class JcrTestNodeResource extends
 
     public JcrTestNodeResource(ResourceResolver resourceResolver, Node node,
             ClassLoader dynamicClassLoader) throws RepositoryException {
-        super(resourceResolver, node, dynamicClassLoader);
+        super(resourceResolver, node.getPath(), node, dynamicClassLoader);
     }
 
 }


Reply via email to