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