2016-07-18 4 views
1

Я пытаюсь удалить узел, который я сохранил с помощью jackrabbit, но получаю эту ошибку.Невозможно удалить узел в jackrabbit

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

Вот код, который я использовал, чтобы сохранить его:

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

Вот код, я использую, чтобы удалить его:

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

Как я могу преодолеть эту ошибку?

ответ

2

Замороженные узлы защищены, поскольку удаление их может (возможно) поставить хранилище версий в поврежденном состоянии. Чтобы удалить «полную» версию из истории, вы должны что-то вроде этого:

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

Код удаляет полную версию. Узел версии, замороженный узел и то, что еще является частью версии. Я думал, это то, что вы пытались сделать. –

+0

Я пробовал 'history.removeVersion (fileVersion.getName());', но теперь я получаю эту ошибку 'Не удалось удалить файл ! javax.jcr.ReferentialIntegrityException: невозможно удалить версию. По крайней мере, один раз ссылался. ' – amitection

+1

Хорошо. Я думаю, это потому, что версия, которую вы пытаетесь удалить, является текущей версией. Возможно, вам придется удалить исходный узел, прежде чем удалять присоединенный узел версии. –