2012-03-30 87 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