11

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

谢谢

4

2 回答 2

10

“签入”和“签出”方法与 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”的当前状态并将其添加到版本历史记录中。当然,每次您想对可版本控制的节点进行更改时,都会重复此过程。

于 2010-10-18T16:09:54.043 回答
4

在 Jackrabbit 2.x 中,Node 上的方法已弃用。相反,使用 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");
于 2010-10-18T11:54:04.670 回答