2012-03-30 70 views
2

嗨iam试图恢复节点的版本。但不顺心的事: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'。那是对的吗? – 2012-03-30 12:44:26

+0

不,它是“import javax.jcr.version.VersionManager;”与jackrabbit – wutzebaer 2012-03-30 14:59:25

回答

2

的问题是在恢复方法调用。如果您查看API文档,您会看到路径(第一个参数)不应指向现有节点。如果是这样,你会得到这个例外。尝试使用/ childNode2,它应该将其恢复到该位置。

从什么样子:

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

应该工作和以前的版本恢复到当前位置。

+0

这是否会将会话的所有节点的版本设置为版本“firstVersion”还是仅仅是签入的节点?并且是我的变量“n”自动更新或让我用session.getRootNode()。getNode(“/ childNode”)获取新变量。我在哪里可以找到关于这方面的详细文档? – wutzebaer 2012-03-31 22:54:49

+0

你对'所有节点'有什么意思。它只会恢复childNode的firstVersion。据我所知,你不需要刷新会话,但我不是100%肯定的。更多的信息可以在官方的JCR API中找到http://www.day.com/maven/jsr170/javadocs/jcr-1.0/javax/jcr/Node.html – Jeroen 2012-04-02 21:19:08