Hello Guys,

I'm working in a project that uses JCR with 2 versions, one using
jackrabbit and one using OAK. Right now I'm implementing versioning on
documents.

I was able to make it work using jackrabbit. But when I try to use the code
in the OAK version, I'm getting an error.

We use OSGI to create bundles and the JCR (JackRabbit and OAK) are also
bundles, which means that we create the OAK repository when starting the
OSGI felix. Also, the repository is created in the AWS S3.

The odd thing is that we have integration tests that creates a transient
repository in memory, and it works correctly too.

Here is the creation of the document part of my method:

userSession =
repository.getUserSession(currentUser.getUserId(),tenantManager.getWorkspaceFromTenant(currentUser.getTenantId()));

folderNode =  userSession.getNodeByIdentifier(parentFolderId);
String documentName = Text.escapeIllegalJcrChars(name);
final Node fileNode = folderNode.addNode(documentName,
JcrConstants.NT_FILE);
final Node contentNode = fileNode.addNode(JcrConstants.JCR_CONTENT,
JcrConstants.NT_RESOURCE);
contentNode.addMixin(NodeType.MIX_VERSIONABLE);
contentNode.setProperty(JcrConstants.JCR_MIMETYPE, mimeType);

try {
    contentNode.setProperty(JcrConstants.JCR_DATA,
userSession.getValueFactory().createBinary(document));
} finally {
    document.close();
}

contentNode.setProperty(Property.JCR_LAST_MODIFIED,
Calendar.getInstance().getTimeInMillis());
userSession.save();
userSession.getWorkspace().getVersionManager().checkin(contentNode.getPath());

And here is the exception:

Caused by: javax.jcr.nodetype.ConstraintViolationException:
OakConstraint0021:
/0/00/00000185-24a6-3bd1-b232-d7ff21f33b6a/home/a/ad/ad50ee6d-60a3-4689-9f90-4aa6326a4f45/root/document_to_test_11/jcr:content[[nt:resource,
mix:versionable]]: Mandatory property jcr:versionHistory not found in a new
node
    at
org.apache.jackrabbit.oak.api.CommitFailedException.asRepositoryException(CommitFailedException.java:225)
    at
org.apache.jackrabbit.oak.api.CommitFailedException.asRepositoryException(CommitFailedException.java:212)
    at
org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.newRepositoryException(SessionDelegate.java:670)
    at
org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.save(SessionDelegate.java:496)
    at
org.apache.jackrabbit.oak.jcr.session.SessionImpl$8.performVoid(SessionImpl.java:419)
    at
org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.performVoid(SessionDelegate.java:274)
    at
org.apache.jackrabbit.oak.jcr.session.SessionImpl.save(SessionImpl.java:416)
    at com.hp.ccp.jcr.impl.JCRDAO.addDocument(JCRDAO.java:887)
    ... 99 more

If I add a mixin and save, I already get the error. I dont understand why
is saying that I dont have this jcr:versionHistory property.

The oak version that we are using is 1.4.0

Is there anything else to consider?

Could anyone help me out please? I tried some things without success, right
now I don't know how to proccedd.

Thanks in Advance
Ciro Santos

Reply via email to