2012-03-30 6 views
2

Hi iam versucht, eine Version eines Knotens wiederherzustellen. Aber etwas schief geht:JCR Jackrabbit Versionisierung

Session session = repository.login(new SimpleCredentials("test1", "".toCharArray())); 

    Workspace ws = session.getWorkspace(); 

    Node parentNode = session.getRootNode(); 

    //Create a first version 
    Node n = parentNode.addNode("childNode", "nt:unstructured"); 
    n.addMixin("mix:versionable"); 
    n.setProperty("anyProperty", "Blah"); 
    session.save(); 
    Version firstVersion = ws.getVersionManager().checkin("/childNode"); 

    // add new version 
    ws.getVersionManager().checkout("/childNode"); 
    n.setProperty("anyProperty", "Blah2"); 
    session.save(); 
    ws.getVersionManager().checkin("/childNode"); 


    // restoring old version 
    ws.getVersionManager().restore("/childNode", firstVersion, true); 

Danach bekomme ich

javax.jcr.version.VersionException: VersionManager.restore(String, Version, boolean) not allowed on existing nodes; use VersionManager.restore(Version, boolean) instead: /childNode 
+0

Nach dem Aussehen der API sieht es so aus, als ob Sie den Sling 'VersionManager' benutzen. Ist das korrekt? –

+0

nein es ist "import javax.jcr.version.VersionManager;" mit jackrabbit – wutzebaer

Antwort

2

Das Problem ist in dem Methodenaufruf wiederherzustellen. Wenn Sie sich die API-Dokumentation ansehen, werden Sie sehen, dass der Pfad (erstes Argument) nicht auf einen vorhandenen Knoten zeigen sollte. Wenn dies der Fall ist, erhalten Sie diese Ausnahme. Versuchen Sie es mit/childNode2 und es sollte es an diesem Ort wiederherstellen.

Von dem, was es sieht aus wie:

ws.getVersionManager().restore(firstVersion, true); 

sollte die vorherige Version auf den aktuellen Standort arbeiten und wiederherstellen.

+0

setzt dies die Version aller Knoten der Sitzung auf die Version "firstVersion" oder nur den Knoten, der eingecheckt wurde? Und wird meine Variable "n" automatisch aktualisiert oder muss ich eine neue mit session.getRootNode() holen. GetNode ("/ childNode"); Wo finde ich eine ausführliche Dokumentation dazu? – wutzebaer

+0

Was meinst du mit 'alle Knoten'. Es wird nur die erste Version von childNode wiederherstellen. Soweit ich weiß, müssen Sie die Sitzung nicht aktualisieren, aber ich bin mir nicht 100% sicher. Weitere Informationen finden Sie in der offiziellen JCR api http://www.day.com/maven/jsr170/javadocs/jcr-1.0/javax/jcr/Node.html – Jeroen