如何在jackrabbit / JCR中标记特定版本?

时间:2012-07-17 00:35:59

标签: versioning jackrabbit jcr

我想知道我是否可以标记特定版本。  我想在我的项目中使用JCR,并且我们有许多由不同类型的节点组成的分层类型树,我们需要在进行分段或生产的一系列更改之后保存一个版本。我想知道如何标记特定版本,以便保存对特定节点及其子节点所做的所有更改。

谢谢!

1 个答案:

答案 0 :(得分:3)

是的,您可以使用您选择的字符串标记版本历史记录中的版本。但是JCR 2.0称它们为“标签”。

首先,您需要找到已签入的特定节点的VersionHistory

String path = ... // the path to the versioned node
VersionManager versionManager = session.getWorkspace().getVersionManager();
VersionHistory history = versionManager.getVersionHistory(path);

然后,您可以通过迭代所有版本,获取“根版本”或获取基本版本来查找要标记的特定Version。我不会证明这一点,因为有很多方法可以做到这一点。

// Find the version ...
Version versionToBeLabeled = ...

然后您可以为此版本添加标签。请注意,标签只能在单个节点的版本历史记录中使用一次,因此在添加标签时,您可以选择是移动现有标签(如果有)还是抛出异常。如果已经使用了以下代码移动它:

// Add a user-defined label to this version ...
String versionName = versionToBeLabeled.getName();
String versionLabel = "MyLabel";
boolean moveLabel = true;
VersionHistory.addVersionLabel(versionName, versionLabel, moveLabel);

请注意,版本名称由JCR实现确定,而标签是用户定义的。这就是为什么添加自己的标签然后按标签而不是通过某些实现确定的名称查找特定Version实例通常非常方便:

Version foundVersion = versionHistory.getVersionByLabel(versionLabel);

当然,您可以查看历史记录中是否有特定标签的Version

if ( versionHistory.hasVersionLabel(versionLabel) ) {
    // do something
}

或者特定版本是否有标签:

Version version = ...
if ( versionHistory.hasVersionLabel(version,versionLabel) {
    // do something
}

甚至删除特定标签:

versionHistory.removeLabel(versionLabel);

有关详细信息,请参阅JCR 2.0 (JSR-283) specification的第15.4节。