2010-10-15 6 views
8

Ich fange gerade an, mit JCR (apache jackrabbit) zu arbeiten, ich möchte einfache Frage stellen (weil ich kein gutes Tutorial dafür finden konnte): Also für was brauche ich Node. Checkout und Node.checkin Methoden? Was bedeuten sie?JCR checkin/checkout operations

Thx

Antwort

8

Die ‚Check‘ und ‚Kasse‘ Methoden haben zu tun, wie eine JCR-Repository die Versionen von Inhalten verfolgt. Die Methode 'checkout' signalisiert dem Repository, dass Ihre Client-Anwendung (wahrscheinlich) einige versionierbare Inhalte ändert. Die "Eincheck" -Methoden signalisieren dem Repository, dass Ihre Clientanwendung Änderungen an dem versionierbaren Inhalt vorgenommen hat, und dass das Repository diese Änderungen (z. B. die neue Version) in der Versionsgeschichte aufzeichnen sollte.

Stellen wir uns zum Beispiel vor, dass wir einen Knoten bei '/ a/b/c' erstellen möchten, der versionierbar ist. Dies geschieht mit etwas wie dem folgenden Code:

Um Inhalte zu erstellen, setzen Sie einfach den 'mix: versionable' Mixin (oder verwenden Sie einen Mixin oder primären Knotentyp, der von 'mix: versionable' erbt) Speichern Sie dann Ihre Änderungen. Zu diesem Zeitpunkt wird das Repository den Versionsverlauf für diesen Knoten (oder Untergraphen) initialisieren.

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

Nach 'session.save()', das Repository wird die 'Mix: versionierbar' beachten mixin und die Versionsgeschichte für den Inhalt an '/ a/b/c' initialisieren. Ab diesem Zeitpunkt verwendet Ihre Client-Anwendung "checkout" und "checkin", um dem Verlauf neue Versionen hinzuzufügen.

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

Wenn 'CheckIn' genannt wird, wird das Repository nimmt den aktuellen Stand des '/ a/b/c' und es wird auf die Version der Geschichte hinzufügen. Dieser Prozess wird natürlich jedes Mal wiederholt, wenn Sie Änderungen an versionierbaren Knoten vornehmen möchten.

+0

Erstellt 'vm.checkout' Versionshistorie davon Nur Knoten oder rekursiv, wenn der Knoten Kinder hat? – Emerald214

3

In Hase 2.x sind die Verfahren auf Knoten deprecated. Verwenden Sie stattdessen VersionManager.checkout/checkin (sie sind auch in Jackrabbit 1.x verfügbar). Hier ist ein Beispielcode:

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

Gute Beschreibung und Beispiele finden Sie auch hier: https://docs.adobe.com/content/docs/en/spec/jcr/2.0/15_Versioning.html –