Miroslav Smiljanic created SLING-10011:
------------------------------------------
Summary: Use javax.jcr.Item.getParent() when resolving parent JCR
node in JcrResourceProvider#getParent
Key: SLING-10011
URL: https://issues.apache.org/jira/browse/SLING-10011
Project: Sling
Issue Type: Improvement
Components: JCR
Affects Versions: JCR Resource 3.0.22
Reporter: Miroslav Smiljanic
Currently
[JcrResourceProvider.getParent|https://github.com/apache/sling-org-apache-sling-jcr-resource/blob/org.apache.sling.jcr.resource-3.0.22/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java#L361]
is using JcrItemResourceFactory.getItemOrNull(String path), which eventually
is using JCR session to retrieve parent node using absolute path.
I propose using javax.jcr.Item.getParent() instead.
Reasoning wold be to utilise potential improvements in JCR implementation that
would for a given node retrieve the whole subtree. That can be configured for
example by using particular node type or node path.
{noformat}
root
|
a
/ \
b c
{noformat}
If node 'a' in picture above, is matching desired configuration, then code
below would return the whole subtree.
{code:java}
Node a = jcrSession.getNode("a");
{code}
That further means retrieved subtree can be traversed in memory, without the
need to communicate with the JCR repository storage.
(!)That is particularly important when remote (cloud) storage is used for
repository in JCR implementation, and tree traversal can be done without doing
additional network roundtrips.
{code:java}
//JCR tree traversal happens in memory
Node b = a.getNode("b")
Node c = a.getNode("c")
{code}
Also going from child to parent, is resolved in memory as well (proposal
relates to this fact)
{code:java}
//JCR tree traversal happens in memory
assert b.getParent() == c.getParent()
{code}
Jackrabbit Oak, for document node store is supporting node bundling for
configured node type
[http://jackrabbit.apache.org/oak/docs/nodestore/document/node-bundling.html]
Currently I am also doing some experiments to support node bundling/aggregation
for arbitrary node store
([NodeDelegateFullyLoaded|https://github.com/smiroslav/jackrabbit-oak/blob/ppnextgen_newstore/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegateFullyLoaded.java],
[FullyLoadedTree|https://github.com/smiroslav/jackrabbit-oak/blob/ppnextgen_newstore/oak-core/src/main/java/org/apache/jackrabbit/oak/core/FullyLoadedTree.java]).
--
This message was sent by Atlassian Jira
(v8.3.4#803005)