2012-03-30 3 views
2

Привет, я пытаюсь восстановить версию узла. Но что-то идет не так:JCR Jackrabbit Versionising

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

После того, что я получаю

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

По внешнему виду API похоже, что вы используете Sling 'VersionManager'. Это верно? –

+0

no it is "import javax.jcr.version.VersionManager;" с jackrabbit – wutzebaer

ответ

2

Проблема заключается в восстановлении вызова метода. Если вы посмотрите на документы API, вы увидите, что путь (первый аргумент) не должен указывать на существующий узел. Если это произойдет, вы получите это исключение. Попробуйте с/childNode2, и он должен восстановить его в этом месте.

Из того, что он выглядит следующим образом:

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

должен работать и восстановить предыдущую версию текущего местоположения.

+0

устанавливает ли это версию всех узлов сеанса в версию «firstVersion» или только тот узел, который был проверен? И моя переменная «n» обновляется автоматически или мне нужно получить новую с session.getRootNode(). GetNode («/ childNode»); Где я могу найти подробную документацию об этом? – wutzebaer

+0

Что вы имеете в виду под «всеми узлами». Он восстановит только первую версию childNode. Насколько я знаю, вам не нужно обновлять сеанс, но я не уверен на 100%. Более подробную информацию можно найти в официальном JCR api http://www.day.com/maven/jsr170/javadocs/jcr-1.0/javax/jcr/Node.html – Jeroen

Смежные вопросы