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

标签 versioning jackrabbit jcr

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

谢谢!!!

最佳答案

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

首先,您需要找到已 checkin 的特定节点的VersionHistory:

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

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

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

当然,您还可以查看历史记录中是否存在带有特定标签的版本:

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 节.

关于versioning - 如何在 jackrabbit/JCR 中标记特定版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11514557/

相关文章:

amazon-web-services - 如何从 Amazon S3 下载具有 100,000 多个版本的文件的所有版本?

multithreading - Jackrabbit 和并发修改

java - 通过 sardine-webdav -jcr 添加 zip 文件

java - 应用程序数据持久性框架/库?

javascript - 如何强制客户端刷新 JavaScript 文件?

java - 您如何决定何时升级项目中的库?

ios - iOS 何时更改版本号?

apache - Tomcat 7 锁定 jackrabbit 存储库

java - 我如何使用 ObjectContentManager 在节点下添加节点?

linux - JCR/Jackrabit/Derby - 在 Linux 上恢复版本时使用二进制数据的 IO 速度慢