JCR регистрация / проверка операций - PullRequest
11 голосов
/ 15 октября 2010

Я только начинаю работать с JCR (apache jackrabbit), я хочу задать простой вопрос (потому что я не нашел для него хорошего учебника): Так для чего мне нужны методы Node.checkout и Node.checkin? Что они значат?

Thx

Ответы [ 2 ]

9 голосов
/ 18 октября 2010

Методы checkin и checkout связаны с тем, как репозиторий JCR отслеживает версии содержимого. Метод 'checkout' сообщает хранилищу, что ваше клиентское приложение (вероятно) собирается изменить какой-либо контент с поддержкой версий. Методы 'checkin' сигнализируют хранилищу, что ваше клиентское приложение внесло изменения в контент с возможностью управления версиями и что хранилище должно записывать эти изменения (например, новую версию) в истории версий.

Например, давайте представим, что мы хотим создать узел в / a / b / c, который является версионным. Это делается с помощью чего-то вроде следующего кода:

Чтобы создать контент, вы просто устанавливаете mixin 'mix: versionable' (или используете mixin или первичный тип узла, который наследуется от 'mix: versionable') на узле, а затем сохраняете свои изменения. В этот момент хранилище инициализирует историю версий для этого узла (или подграфа).

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 ()' хранилище заметит mixin "mix: versionable" и инициализирует историю версий для контента в '/ 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' и добавляет его в историю версий. Конечно, этот процесс повторяется каждый раз, когда вы хотите внести изменения в версионные узлы.

3 голосов
/ 18 октября 2010

В Jackrabbit 2.x методы на узле устарели .Вместо этого используйте 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");
...