2010-10-15 33 views
8

Je commence juste à travailler avec JCR (apache jackrabbit), je veux poser une question simple (parce que je ne trouve pas de bon tutoriel pour cela): Donc pour quoi ai-je besoin Node. Checkout et méthodes Node.checkin? Que signifient-ils?JCR checkin/checkout opérations

Thx

Répondre

8

Les méthodes « checkin » et « caisse » ont à voir avec la façon dont un référentiel JCR suit les versions de contenu. La méthode 'checkout' signale au référentiel que votre application cliente va (probablement) modifier un contenu versionnable. Les méthodes 'checkin' signalent au référentiel que votre application cliente a apporté des modifications au contenu versionnable et que le référentiel doit enregistrer ces modifications (par exemple, la nouvelle version) dans l'historique des versions. Par exemple, imaginons que nous voulons créer un noeud '/ a/b/c' qui soit versionnable. Pour créer du contenu, il vous suffit de définir le mixin 'mix: versionable' (ou d'utiliser un type de nœud mixin ou primaire héritant de 'mix: versionable') sur un nœud et puis sauvegardez vos modifications. À ce stade, le référentiel initialise l'historique des versions de ce nœud (ou sous-graphe).

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()', le dépôt noteront le 'mélange: versionnable' mixin et initialise l'historique de version pour le contenu à '/ a/b/c. À partir de ce moment, votre application client utilise 'checkout' et 'checkin' pour ajouter de nouvelles versions à l'historique.

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

Quand « checkin » est appelé, le dépôt prendra l'état actuel de «/a/b/c » et ajoutera à l'historique des versions. Bien sûr, ce processus est répété chaque fois que vous souhaitez apporter des modifications aux nœuds versionnables.

+0

Est-ce que 'vm.checkout' crée l'historique des versions de ce nœud uniquement ou récursivement dans le cas où ce nœud a des enfants? – Emerald214

3

En Jackrabbit 2.x, les méthodes sur le nœud sont deprecated. Au lieu de cela, utilisez VersionManager.checkout/checkin (ils sont également disponibles dans Jackrabbit 1.x). Voici quelques exemples de code:

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

Une bonne description et des exemples peuvent également être trouvés ici: https://docs.adobe.com/content/docs/fr/spec/jcr/2.0/15_Versioning.html –