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);