2010-10-15 17 views
8

Estoy empezando a trabajar con JCR (apache jackrabbit), quiero hacer una pregunta simple (porque no pude encontrar un buen tutorial): Entonces, ¿para qué necesito Node. métodos de pago y Node.checkin? ¿Qué significan?JCR checkin/checkout operations

Thx

Respuesta

8

El 'check-in' y los métodos de pago y envío '' tienen que ver con la forma de un repositorio JCR un seguimiento de las versiones de contenido. El método 'checkout' indica al repositorio que su aplicación cliente (probablemente) va a modificar algún contenido versionable. Los métodos de 'verificación' le indican al repositorio que su aplicación cliente ha realizado cambios en el contenido versionable, y que el repositorio debe registrar esos cambios (por ejemplo, la nueva versión) en el historial de versiones.

Por ejemplo, imaginemos que queremos crear un nodo en '/ a/b/c' que sea versionable. Esto se hace usando algo como el siguiente código:

Para crear contenido, simplemente configure la mezcla 'mix: versionable' (o use un mixin o tipo de nodo primario que hereda de 'mix: versionable') en un nodo y luego guarda tus cambios En ese punto, el repositorio inicializará el historial de versiones para ese nodo (o subgrafo).

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

A 'session.save()', el repositorio se tenga en cuenta la 'mezcla: versionable' mixin y se inicializará el historial de versiones para el contenido en '/ a/b/c'. A partir de este momento, la aplicación del cliente usa 'checkout' y 'checkin' para agregar nuevas versiones al historial.

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

Cuando 'checkin' se llama, el depósito tendrá el estado actual de '/ a/b/c' y lo añadiremos a la historia de la versión. Por supuesto, este proceso se repite cada vez que desee realizar cambios en los nodos versionables.

+0

¿'vm.checkout' crea el historial de versiones de ese nodo solo o recursivamente en caso de que ese nodo tenga hijos? – Emerald214

3

En Jackrabbit 2.x, los métodos en el nodo son deprecated. En su lugar, use VersionManager.checkout/checkin (también están disponibles en Jackrabbit 1.x). Aquí hay un código de ejemplo:

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"); 
+0

Buena descripción y ejemplos también se pueden encontrar aquí: https://docs.adobe.com/content/docs/en/spec/jcr/2.0/15_Versioning.html –

Cuestiones relacionadas