2010-10-15 13 views
8

Sto appena iniziando a lavorare con JCR (apache jackrabbit), voglio fare una domanda semplice (perché non ho trovato un buon tutorial per questo): Quindi per quello che ho bisogno di nodo. checkout e metodi Node.checkin? Cosa significano?JCR checkin/checkout operazioni

Thx

risposta

8

Il 'check-in' e metodi 'Cassa' hanno a che fare con il modo in un repository JCR tiene traccia delle versioni di contenuti. Il metodo 'checkout' segnala al repository che (probabilmente) l'applicazione client modificherà alcuni contenuti versionabili. I metodi 'checkin' segnalano al repository che l'applicazione client ha apportato modifiche al contenuto versionable e che il repository deve registrare tali modifiche (ad es. La nuova versione) nella cronologia delle versioni.

Ad esempio, immaginiamo di voler creare un nodo in "/ a/b/c" che è versionabile. Questo viene fatto usando qualcosa come il seguente codice:

Per creare il contenuto, è sufficiente impostare il mixin "mix: versionable" (o utilizzare un mixin o un tipo di nodo primario che eredita da "mix: versionable") su un nodo e quindi salva le tue modifiche. A quel punto, il repository inizializzerà la cronologia delle versioni per quel nodo (o sottografo).

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(); 

Upon 'session.save()', il repository si nota il 'mix: versionable' mixin e inizializzare la cronologia delle versioni per il contenuto in '/ a/b/c'. Da questo momento in poi, l'applicazione client utilizza 'checkout' e 'checkin' per aggiungere nuove versioni alla cronologia.

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

Quando 'check-in' che viene chiamato, il repository avrà lo stato attuale della '/ a/b/c' e lo aggiungeremo la cronologia delle versioni. Ovviamente, questo processo viene ripetuto ogni volta che si desidera apportare modifiche ai nodi versionable.

+0

Does 'vm.checkout' crea la cronologia delle versioni di quello solo nodo o ricorsivo nel caso in cui il nodo abbia figli? – Emerald214

3

In Jackrabbit 2.x, i metodi su Node sono deprecated. Invece, usa VersionManager.checkout/checkin (sono disponibili anche in Jackrabbit 1.x). Ecco alcuni esempi di codice:

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

Una buona descrizione ed esempi possono anche essere trovati qui: https://docs.adobe.com/content/docs/en/spec/jcr/2.0/15_Versioning.html –