Jackrabbit 2.1 具有版本化节点。我们希望支持删除这些节点之一的“撤消”。“找到它”似乎是棘手的部分。
问问题
1567 次
1 回答
3
不知道如何正确地迭代版本树-我认为应该可以,通过遍历/jcr:system/jcr:versionStorage
,请参阅JCR 1.0 第 8.2.2.1 节和JCR 2.0 第 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();
// ...
}
每当您首先创建版本时,将节点的(父)路径存储为属性是有意义的,这样您就可以查询它并知道以后在哪里恢复它(见下文)。
你知道当jcr:frozenUuid
在会话中找不到frozenNode的时候它被删除了:
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 );
于 2010-09-22T16:47:42.697 回答