JCR签入/结账操作

时间:2010-10-15 15:17:56

标签: jackrabbit jcr

我刚刚开始使用JCR(apache jackrabbit),我想问一个简单的问题(因为我找不到好的教程): 那么我需要什么Node.checkout和Node.checkin方法呢? 他们是什么意思?

THX

2 个答案:

答案 0 :(得分:9)

'checkin'和'checkout'方法与JCR存储库如何跟踪内容版本有关。 'checkout'方法向存储库发出信号,告知您的客户端应用程序(可能)将修改某些可版本化的内容。 “签入”方法向存储库发出信号,表明客户端应用程序已对可版本化内容进行了更改,并且存储库应在版本历史记录中记录这些更改(例如,新版本)。

例如,让我们假设我们想在'/ a / b / c'创建一个可版本化的节点。这是使用类似下面的代码完成的:

要创建内容,只需在节点上设置'mix:versionable'mixin(或使用继承自'mix:versionable'的mixin或主节点类型),然后保存更改。此时,存储库将初始化该节点(或子图)的版本历史记录。

Node b = session.getNode("/a/b");
Node newNode = b.addNode("c");
newNode.addMixin("mix:versionable");
// set other properties and create children
session.save();

在'session.save()'后,存储库将记录'mix:versionable'mixin,并将初始化'/ a / b / c'中内容的版本历史记录。从现在开始,您的客户端应用程序使用“checkout”和“checkin”将新版本添加到历史记录中。

VersionManager vm = session.getWorkspace().getVersionManager();
vm.checkout("/a/b/c");
// make some changes at/under '/a/b/c'
session.save();
// Can make more changes and save, if desired
vm.checkin("/a/b/c");

当调用'checkin'时,存储库将采用当前状态'/ a / b / c'并将其添加到版本历史记录中。当然,每次要对可版本化节点进行更改时,都会重复此过程。

答案 1 :(得分:3)

在Jackrabbit 2.x中,Node上的方法是deprecated。相反,使用VersionManager.checkout / checkin(它们也可以在Jackrabbit 1.x中使用)。以下是一些示例代码:

Node test = s.getRootNode().addNode("test");
Node t1 = test.addNode("t1");
t1.addMixin("mix:versionable");
s.save();
VersionManager vm = s.getWorkspace().
    getVersionManager();
vm.checkout("/test/t1");
t1.setProperty("data", "Hello" + i);
s.save();
vm.checkin("/test/t1");