[ 
https://issues.apache.org/jira/browse/JCR-1961?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Micah Whitacre updated JCR-1961:
--------------------------------

    Attachment: concurrent-version-test.tar.gz

A test project that when ran through Maven will run a test that creates two 
different repository with the same underlying Derby database.  It then creates 
two sessions that make non conflicting changes to a version node.  However the 
versioning mechanism throws an exception being unable to merge its information.

> Improper Exception thrown on concurrent versioned node changes
> --------------------------------------------------------------
>
>                 Key: JCR-1961
>                 URL: https://issues.apache.org/jira/browse/JCR-1961
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-core, versioning
>    Affects Versions: core 1.4.8
>         Environment: ubuntu 7.10 - the Gutsy Gibbon Sun JDK 1.5.0_13
>            Reporter: Micah Whitacre
>         Attachments: concurrent-version-test.tar.gz
>
>
> When two sessions connected through two separate repositories but backed by 
> the same database make non conflicting changes to the same versioned node, an 
> InvalidItemStateException is thrown.  I'll attach a test project that when 
> built displays this error but essentially the code is the following:
>         Node node1 = session1.getRootNode().getNode(baseNodeName);
>         Node node2 = session2.getRootNode().getNode(baseNodeName);
>         node1.checkout();
>         Node child1 = node1.addNode(UUID.randomUUID().toString(), 
> "nt:folder");
>         child1.addMixin("mix:versionable");
>         child1.checkout();
>         node1.save();
>         child1.checkin();
>         node1.checkin();
>         node2.checkout();
>         Node child2 = node2.addNode(UUID.randomUUID().toString(), 
> "nt:folder");
>         child2.addMixin("mix:versionable");
>         child2.checkout();
>         node2.save();
>         child2.checkin();
>         node2.checkin();
> The above code throws the following exception on the node2.checkout() call.
> javax.jcr.InvalidItemStateException: 
> de6b39ce-1ec6-43e2-ba0e-2966341e6aff/{http://www.jcp.org/jcr/1.0}predecessors 
> has been modified externally
>       at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1251)
>       at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:897)
>       at org.apache.jackrabbit.core.NodeImpl.checkout(NodeImpl.java:3004)
>       at 
> concurrent.version.test.ConcurrentVersionNodeAddTest.testConcurrentNodeAdd(ConcurrentVersionNodeAddTest.java:89)
> or
> javax.jcr.InvalidItemStateException: 
> e384b5f6-0fcd-4853-962c-0085901cdcce/{http://www.jcp.org/jcr/1.0}isCheckedOut 
> has been modified externally
>       at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1251)
>       at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:897)
>       at org.apache.jackrabbit.core.NodeImpl.checkout(NodeImpl.java:3004)
>       at 
> concurrent.version.test.ConcurrentVersionNodeAddTest.testConcurrentNodeAdd(ConcurrentVersionNodeAddTest.java:89)
> Based on JCR-584[1], it would seem that since the change to the node is being 
> merged properly that the versioning should be able to merge its information 
> properly as well.  The difference between the merging of nodes and this 
> version exception is the fact that one is a node and other are properties.  
> Now while I would like properties to be merged nicely (it would eliminate 
> some other problems I'm having), since I can't control conflicting changes in 
> how the versioning is managed it seems appropriate that it should merge 
> nicely.  
> [1] -https://issues.apache.org/jira/browse/JCR-584

-- 
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