1
Jackrabbit 2.1具有版本化节点。我们希望支持删除其中一个节点的“撤销”。 “找到它”似乎是棘手的部分。如何恢复jackrabbit 2.1版本库中的“版本化节点”?
Jackrabbit 2.1具有版本化节点。我们希望支持删除其中一个节点的“撤销”。 “找到它”似乎是棘手的部分。如何恢复jackrabbit 2.1版本库中的“版本化节点”?
不知道如何正确地迭代版本树 - 应该是可能的,我认为,通过去在/jcr:system/jcr:versionStorage
,见JCR 1.0 section 8.2.2.1和JCR 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);