2010-07-16 100 views

回答

3

不知道如何正確地迭代版本樹 - 應該是可能的,我認爲,通過去在/jcr:system/jcr:versionStorage,見JCR 1.0 section 8.2.2.1JCR 2.0 section 15.10 - 但你可以像

SELECT * FROM nt:frozenNode WHERE prop = 'value' 

查詢查詢版本樹(如果在Jackrabbit中爲版本工作區配置了搜索索引,則默認情況下應該爲此)。

返回將冷凍節點的節點,獲取父節點檢索版本:

NodeIterator iter = res.getNodes(); 
while (iter.hasNext()) { 
    Node frozenNode = iter.nextNode(); 
    Version v = (Version) frozenNode.getParent(); 
    // ... 
} 

這是有道理的,只要您創建一個版本來存儲節點屬性(父)路徑第一個地方,這樣你可以查詢它,也知道在哪裏恢復它(見下文)。

你知道它是當frozenNode的jcr:frozenUuid不能在會話中找到刪除:

boolean deleted = false; 
try { 
    session.getNodeByUUID(
     frozenNode.getProperty(JcrConstants.JCR_FROZENUUID).getString() 
    ); 
} catch (ItemNotFoundException e) { 
    deleted = true; 
} catch (RepositoryException e) { 
    continue; 
} 

要恢復它,取版,並將其傳遞到版本管理工具配合下,沿絕對路徑將其還原到(可能來自保存該版本的凍結節點的屬性):

VersionManager vMgr = session.getWorkspace().getVersionManager(); 
vMgr.restore(path, v, true); 

如果你不知何故知道它,而無需進行搜索,還可以得到由它的UUID的版本:

Version v = (Version) session.getNodeByUUID(versionUUID); 
相關問題