2016-07-18 1 views
1

J'essaie de supprimer un nœud que j'ai enregistré en utilisant jackrabbit mais je reçois cette erreur.Impossible de supprimer un nœud dans jackrabbit

Failed to delete file 
! javax.jcr.nodetype.ConstraintViolationException: Unable to perform operation. Node is protected. 

Voici le code que j'ai utilisé pour enregistrer:

  session = repository.login(new SimpleCredentials("admin", "admin".toCharArray())); 

      Node parent = (Node) itemAtPath(parentPath, session); 
      Node newNode = parent.addNode(nodeName); 
      newNode.addMixin("mix:versionable"); 
      session.save(); // Create Root Node 

      VersionableChanges changes = new VersionableChanges(newNode.getSession()); 
      changes.checkout(newNode); 

      Binary binary = session.getValueFactory().createBinary(in); 
      newNode.setProperty(PROPERTY_DATA, binary); 
      newNode.setProperty(PROPERTY_NAME, fileName + System.currentTimeMillis()); 
      newNode.setProperty(PROPERTY_CREATEDBY, createdBy); 
      newNode.setProperty(PROPERTY_CREATEDDATE, createdDate); 
      newNode.setProperty(PROPERTY_COMMENT, comment); 
      Value value = session.getValueFactory().createValue(binary); 
      changes.checkin(); 
      session.save(); 

Voici le code que je utilise pour le supprimer:

  session = repository.login(new SimpleCredentials("admin", "admin".toCharArray())); 
      Version fileVersion = null; 
      Node fileNode = null; 

      if (version != null && !version.isEmpty()) { 
       fileVersion = session.getWorkspace().getVersionManager().getVersionHistory(path).getVersion(version); 
      } else { 
       fileVersion = session.getWorkspace().getVersionManager().getBaseVersion(path); 
      } 

      fileNode = fileVersion.getFrozenNode(); 
      fileNode.remove(); 
      //need to save session to persist the remove operation 
      session.save();      

Comment puis-je surmonter cette erreur?

Répondre

2

Les noeuds gelés sont protégés car leur suppression pourrait (peut-être) mettre la version store dans un état corrompu. Afin de supprimer une version "complète" de l'historique, vous devez quelque chose comme ceci:

VersionHistory history = session.getWorkspace().getVersionManager() 
          .getVersionHistory(info.getVersionedNodePath()); 
history.removeVersion(info.getVersionName()); 
session.save(); 
+0

Le code est en train de supprimer la version complète. Le noeud version, le noeud gelé et quoi d'autre fait partie de la version. Je pensais que c'était ce que tu essayais de faire. –

+0

J'ai essayé 'history.removeVersion (fileVersion.getName());' mais maintenant j'obtiens cette erreur 'Impossible de supprimer le fichier ! javax.jcr.ReferentialIntegrityException: Impossible de supprimer la version. Au moins une fois référencé. » – amitection

+1

Ok. Je suppose que c'est parce que la version que vous essayez de supprimer est la version actuelle. Vous devrez peut-être supprimer le nœud d'origine lui-même avant de pouvoir supprimer le nœud de version joint. –