amitection
amitection

Reputation: 2943

Unable to delete a Node in jackrabbit

I am trying to delete a Node which I have saved using jackrabbit but I get this error.

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

Here is the code I have used to save it:

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

Here is the code I am using to delete it:

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

How can I overcome this error?

Upvotes: 1

Views: 2677

Answers (1)

Oliver Gebert
Oliver Gebert

Reputation: 1176

Frozen nodes are protected because deleting them would (maybe) put the version store in a corrupted state. In order to remove a "complete" version from the history, you have to something like this:

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

Upvotes: 2

Related Questions