Removing a version
Hi, I'm trying to remove a version of a Node, but the VersionHistory.removeVersion() method throws : javax.jcr.ReferentialIntegrityException: Unable to remove version. At least once referenced.. Secton 8.2.2.10 (Removal of Versions) of the specification indicates that the version graph should be automatically repaired upon removal. Then, VersionHistory.removeVersion() should take care of references. In fact, a user cannot alter the references (jcr:predecessors and jcr:successors), since they are protected properties. Here's the example : Node root1 = session.getRootNode() ; Node test1 = root1.addNode(test) ; test1.addMixin(mix:versionable); test1.setProperty(test, 1); session.save(); test1.checkin(); test1.checkout(); test1.setProperty(test, 2); session.save(); test1.checkin(); test1.checkout(); test1.setProperty(test, 3); session.save(); test1.checkin(); VersionHistory vh = test1.getVersionHistory(); for (VersionIterator vi = vh.getAllVersions(); vi.hasNext(); ) { Version currenVersion = vi.nextVersion(); String versionName = currenVersion.getName(); if (!versionName.equals(jcr:rootVersion)) { String propertyValue = currenVersion.getNode(jcr:frozenNode).getProperty(test).getString(); System.out.println(Removing version : + versionName + with value: + propertyValue); vh.removeVersion(versionName); } } Something I do wrong ? Many thanks, Nicolas
Re: Removing a version
Hi, I have already verified that. The error is for removal of version name : 1.0 and the base version name is 1.2. I've updated the example to make sure it never tries to remove the base version : Node root1 = session.getRootNode() ; Node test1 = root1.addNode(test) ; test1.addMixin(mix:versionable); test1.setProperty(test, 1); session.save(); test1.checkin(); test1.checkout(); test1.setProperty(test, 2); session.save(); test1.checkin(); test1.checkout(); test1.setProperty(test, 3); session.save(); test1.checkin(); String baseVersion = test1.getBaseVersion().getName(); System.out.println(Base version name: + baseVersion); VersionHistory vh = test1.getVersionHistory(); for (VersionIterator vi = vh.getAllVersions(); vi.hasNext(); ) { Version currenVersion = vi.nextVersion(); String versionName = currenVersion.getName(); if (!versionName.equals(jcr:rootVersion) !versionName.equals(baseVersion)) { String propertyValue = currenVersion.getNode(jcr:frozenNode).getProperty(test).getString(); System.out.println(Removing version : + versionName + with value: + propertyValue); vh.removeVersion(versionName); } } Thanks, Nicolas Le 12:23 2005-11-18, vous avez écrit: Hi Nicolas, I didn't try your code but I think it throws ReferentialIntegrityException because you are trying to remove the base version which is referenced by the versioned node. see http://thread.gmane.org/gmane.comp.apache.jackrabbit.devel/3746 br, edgar On 11/18/05, Nicolas Belisle [EMAIL PROTECTED] wrote: Hi, I'm trying to remove a version of a Node, but the VersionHistory.removeVersion() method throws : javax.jcr.ReferentialIntegrityException: Unable to remove version. At least once referenced.. Secton 8.2.2.10 (Removal of Versions) of the specification indicates that the version graph should be automatically repaired upon removal. Then, VersionHistory.removeVersion() should take care of references. In fact, a user cannot alter the references (jcr:predecessors and jcr:successors), since they are protected properties. Here's the example : Node root1 = session.getRootNode() ; Node test1 = root1.addNode(test) ; test1.addMixin(mix:versionable); test1.setProperty(test, 1); session.save(); test1.checkin(); test1.checkout(); test1.setProperty(test, 2); session.save(); test1.checkin(); test1.checkout(); test1.setProperty(test, 3); session.save(); test1.checkin(); VersionHistory vh = test1.getVersionHistory(); for (VersionIterator vi = vh.getAllVersions(); vi.hasNext(); ) { Version currenVersion = vi.nextVersion(); String versionName = currenVersion.getName(); if (!versionName.equals(jcr:rootVersion)) { String propertyValue = currenVersion.getNode(jcr:frozenNode).getProperty(test).getString(); System.out.println(Removing version : + versionName + with value: + propertyValue); vh.removeVersion(versionName); } } Something I do wrong ? Many thanks, Nicolas
Re: Removing a version
hi nicolas, this is probably a bug in jackrabbit. thank you for reporting it. can you please file a jira issue (http://issues.apache.org/jira/browse/JCR) for this? thanks. regards, toby On 11/18/05, Nicolas Belisle [EMAIL PROTECTED] wrote: Hi, I'm trying to remove a version of a Node, but the VersionHistory.removeVersion() method throws : javax.jcr.ReferentialIntegrityException: Unable to remove version. At least once referenced.. Secton 8.2.2.10 (Removal of Versions) of the specification indicates that the version graph should be automatically repaired upon removal. Then, VersionHistory.removeVersion() should take care of references. In fact, a user cannot alter the references (jcr:predecessors and jcr:successors), since they are protected properties. Here's the example : Node root1 = session.getRootNode() ; Node test1 = root1.addNode(test) ; test1.addMixin(mix:versionable); test1.setProperty(test, 1); session.save(); test1.checkin(); test1.checkout(); test1.setProperty(test, 2); session.save(); test1.checkin(); test1.checkout(); test1.setProperty(test, 3); session.save(); test1.checkin(); VersionHistory vh = test1.getVersionHistory(); for (VersionIterator vi = vh.getAllVersions(); vi.hasNext(); ) { Version currenVersion = vi.nextVersion(); String versionName = currenVersion.getName(); if (!versionName.equals(jcr:rootVersion)) { String propertyValue = currenVersion.getNode(jcr:frozenNode).getProperty(test).getString(); System.out.println(Removing version : + versionName + with value: + propertyValue); vh.removeVersion(versionName); } } Something I do wrong ? Many thanks, Nicolas -- - [EMAIL PROTECTED] --- Tobias Bocanegra, Day Management AG, Barfuesserplatz 6, CH - 4001 Basel T +41 61 226 98 98, F +41 61 226 98 97 --- http://www.day.com ---