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

Michael Dürig commented on JCR-2293:
------------------------------------

The described behavior can be seen as 'works as intended' given that there 
might be a race between the two sessions in this test case. Things are a bit 
different when observation comes into play however: When session2 calls getItem 
on the path of a NODE_ADDED event, the same behavior can be observed. This 
doesn't seem correct to me. After all, the observation events that a node at 
the given path has just been added:

interface WaitableEventListener extends EventListener {
    public void waitForEvent() throws InterruptedException, RepositoryException;
}

public void testJCR_2293() throws RepositoryException, InterruptedException {
    final String parentPath = testNode.getPath();
    final String folderName = "folder_" + System.currentTimeMillis();
    Session session = getHelper().getReadWriteSession();

    final Session session2 = getHelper().getReadOnlySession();
    session2.getItem(parentPath);  // removing this line makes the failure go 
away

    WaitableEventListener eventListener = new WaitableEventListener() {
        private RepositoryException failure;

        public synchronized void onEvent(final EventIterator events) {
            try {
                while (events.hasNext()) {
                    Event event = events.nextEvent();
                    Item item2 = session2.getItem(event.getPath());
                    assertEquals(parentPath + "/" + folderName, 
item2.getPath());
                }
            }
            catch (RepositoryException e) {
                failure = e;
            }
            finally {
                notifyAll();
            }
        }

        public synchronized void waitForEvent() throws InterruptedException,
                        RepositoryException {
            this.wait();
            if (failure != null) {
                throw failure;
            }
        }
    };

    session.getWorkspace().getObservationManager()
            .addEventListener(eventListener, Event.NODE_ADDED,
                                             parentPath, true, null, null, 
false);

    Node parent = (Node) session.getItem(parentPath);
    Node toDelete = parent.addNode(folderName, "nt:folder");
    parent.save();

    try {
        eventListener.waitForEvent();
    }
    finally {
        toDelete.remove();
        parent.save();
        assertFalse(parent.hasNode(folderName));
    }
}




> PathNotFoundException but item exists
> -------------------------------------
>
>                 Key: JCR-2293
>                 URL: https://issues.apache.org/jira/browse/JCR-2293
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-jcr2spi
>    Affects Versions: 1.5.7, 2.0.0
>            Reporter: Michael Dürig
>
> The following test case (for jcr2spi) throws a PathNotFoundException for an 
> item which exists. It does not throw if the marked line below is commented 
> out. 
> public void testBug24687() throws RepositoryException {
>     String parentPath = testNode.getPath();
>     String folderName = "folder_" + System.currentTimeMillis();
>     Session session = getHelper().getReadWriteSession();
>     Session session2 = getHelper().getReadOnlySession();
>     session2.getItem(parentPath);  // removing this line makes the failure go 
> away
>     Node parent = (Node) session.getItem(parentPath);
>     Node toDelete = parent.addNode(folderName, "nt:folder");
>     parent.save();
>     try {
>         Item item2 = session2.getItem(parentPath + "/" + folderName);  // 
> wrongly throws PathNotFoundException
>         assertEquals(parentPath + "/" + folderName, item2.getPath());
>     }
>     finally {
>         toDelete.remove();
>         parent.save();
>         assertFalse(parent.hasNode(folderName));
>     }
> }

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

Reply via email to