Операции регистрации/кассы JCR

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

Спасибо


person breedish    schedule 15.10.2010    source источник


Ответы (2)


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

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

Чтобы создать контент, вы просто устанавливаете миксин «mix:versionable» (или используете миксин или первичный тип узла, который наследуется от «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()» репозиторий заметит миксин «mix:versionable» и инициализирует историю версий для содержимого в «/a/b/c». С этого момента ваше клиентское приложение использует функции «извлечение» и «регистрация» для добавления новых версий в историю.

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» и добавит его в историю версий. Конечно, этот процесс повторяется каждый раз, когда вы хотите внести изменения в версионные узлы.

person Randall Hauch    schedule 18.10.2010
comment
Создает ли vm.checkout историю версий только этого узла или рекурсивно, если у этого узла есть дочерние элементы? - person emeraldhieu; 09.06.2016

В 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");
person Thomas Mueller    schedule 18.10.2010
comment
Хорошее описание и примеры также можно найти здесь: документы. adobe.com/content/docs/en/spec/jcr/2.0/15_Versioning.html - person Mathias Conradt; 20.12.2016