2010-07-16 83 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); 
相关问题