Marcel Reutegger schrieb:
...
hmm, the more I think about it, we might have to deal with this issue at other occasions. It may happen that a node is returned by a query that has never been requested, but its parent node has. assuming that the jcr2spi layer still has the old version of the parent node it will not see the new child node entry in there for the node returned in the query.
...

I can resolve my original problem with the change below...:

--- src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java 26 Oct 2006 12:20:08 -0000 1.2 +++ src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java 3 Nov 2006 14:18:50 -0000
@@ -96,7 +96,8 @@
NodeState parent = (parentId != null) ? (NodeState) ism.getItemState(parentId) : null;

             if (parent != null) {
- return parent.getChildNodeEntry(info.getQName(), info.getIndex()).getNodeState(); + ChildNodeEntry child = parent.getChildNodeEntry(info.getQName(), info.getIndex()); + return child != null ? child.getNodeState() : createNodeState(info, parent);
             } else {
                 return createNodeState(info, parent);
             }

...however once I do that - as expected - other problems surface.

Looking at JCR2SPIs NodeImpl and HierarchyManagerImpl it seems that the only way to access a Node by absolute path is to recursively access all parent nodes, visiting their children.

This seems to be not only inefficient, but may also cause a problem when the given user doesn't have read access to all parent nodes...

Shouldn't we have something like:

  NodeId RepositoryService.getNodeId(QPath path);

Best regards, Julian

Reply via email to