jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lars Michele (JIRA)" <j...@apache.org>
Subject [jira] Commented: (JCR-1773) shareable nodes: wrong path returned, causes remove() to delete wrong node
Date Mon, 27 Apr 2009 12:03:30 GMT

    [ https://issues.apache.org/jira/browse/JCR-1773?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12703091#action_12703091
] 

Lars Michele commented on JCR-1773:
-----------------------------------

<quote>
So it is now possible that for a given path P 
 
 session.getNode(P).equals(session.getItem(P)) 
 
 will return false? Isn't that totally inconsistent?
</quote>

Good catch, so here comes the real solution for the ItemManager#getItem(Path path). Just to
mention, that this method is marked as deprecated.

    public ItemImpl getItem(Path path)
            throws PathNotFoundException, AccessDeniedException, RepositoryException {
        ItemId id = hierMgr.resolvePath(path);
        if (id == null) {
            throw new PathNotFoundException(safeGetJCRPath(path));
        }
        try {
        	ItemImpl item = getItem(id, path);
        	// Test, if the item is a shareable node
        	if(item.isNode() && ((NodeImpl)item).isShareable())
        		return getNode(path);
            return item;
        } catch (ItemNotFoundException infe) {
            throw new PathNotFoundException(safeGetJCRPath(path));
        }
    }

If you patch the ItemManger directly, the change in the WebDAV layer is obsolet.

> shareable nodes: wrong path returned, causes remove() to delete wrong node
> --------------------------------------------------------------------------
>
>                 Key: JCR-1773
>                 URL: https://issues.apache.org/jira/browse/JCR-1773
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-core
>            Reporter: Julian Reschke
>
> It seems that for shareable nodes it can happen that getPath() returns the wrong path
(one of another node in the shared set):
> /**
> * Verify that shared nodes return correct paths.
> */
> public void testPath() throws Exception {
>    Node a1 = testRootNode.addNode("a1");
>    Node a2 = a1.addNode("a2");
>    Node b1 = a1.addNode("b1");
>    b1.addMixin("mix:shareable");
>    testRootNode.save();
>    //now we have a shareable node N with path a1/b1
>    Session session = testRootNode.getSession();
>    Workspace workspace = session.getWorkspace();
>    String path = a2.getPath() + "/b2";
>    workspace.clone(workspace.getName(), b1.getPath(), path, false);
>    //now we have another shareable node N' in the same shared set as N with path a1/a2/b2
>    //using the path a1/a2/b2, we should get the node N' here
>    Item item = session.getItem(path);
>    String p = item.getPath();
>    assertFalse("unexpectedly got the path from another node from the same shared set
", p.equals(b1.getPath()));
> } 
> Note that when this happens, a subsequent remove() deletes the wrong node.
> (Thanks Manfred for spotting this one).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message