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);
}
}