I just noticed, I can add the mix:versionable when I save the session in between creating the new node and adding the mixin. Not sure if this is supposed to work like this and mandatory to save the session first or not.
So this works: Node fileNode = folderNode.addNode(filename, "nt:file"); session.save(); fileNode.addMixin("mix:versionable"); session.save(); - Mathias mathiasconradt wrote > I am getting the same error message with the current trunk as of today. > Created a new node and added the "mix:versionable" mixable. > > fileNode = folderNode.addNode(filename, "nt:file"); > if (fileNode.canAddMixin("mix:referenceable")) > fileNode.addMixin("mix:referenceable"); > if (fileNode.canAddMixin("mix:versionable")) > fileNode.addMixin("mix:versionable"); > // if (fileNode.canAddMixin("mix:simpleVersionable")) > fileNode.addMixin("mix:simpleVersionable"); > > Error: > > org.springframework.web.util.NestedServletException: Request processing > failed; nested exception is > javax.jcr.nodetype.ConstraintViolationException: OakConstraint0021: > /documents/versiontest3.jpg[[nt:file, mix:referenceable, > mix:versionable]]: Mandatory property jcr:predecessors not found in a new > node > > > (However, I don't get the message if I add the "mix:simpleVersionable" > instead, which makes sense though since it does not seem to be implemented > according to https://issues.apache.org/jira/browse/OAK-4166: "As a result, > versioning-related methods invoked on such [simpleVersionable] nodes > doesn't work correctly.) > > I looked up the definition: > > https://docs.adobe.com/content/docs/en/spec/jcr/2.0/15_Versioning.html > > "Under both simple and full versioning, on persist of a new versionable > node N that neither corresponds nor shares with an existing node: > > Additionally, under full versioning: > > The multi-value REFERENCE property jcr:predecessors of N is initialized to > contain a single identifier, that of V0 (the same as jcr:baseVersion)." > > Now I am wondering, should all this (initialization of the > jcr:predecessors property) not be handled by the repository automatically > in both cases, since it knows whether this is a new node etc.? Is it a > bug? > > I found Jira tickets related to versioning, but they are already three > years old and set to resolved. > > https://issues.apache.org/jira/browse/OAK-815 > https://issues.apache.org/jira/browse/OAK-1118 > > Regards, > Mathias > > smg11 wrote >> Hi While accessing Jackrabbit oak through deployed Jackrabbit oak web-app >> using rmi, I am getting following error while check in the node to >> repository. >> >> Stack trace: >> Exception in thread "main" >> javax.jcr.nodetype.ConstraintViolationException: OakConstraint0021: >> /testNode_1462713844833[[nt:unstructured, mix:versionable]]: Mandatory >> property jcr:predecessors not found in a new node >> at >> org.apache.jackrabbit.rmi.server.ServerObject.getRepositoryException(ServerObject.java:109) >> at >> org.apache.jackrabbit.rmi.server.ServerSession.save(ServerSession.java:265) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) >> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >> at java.lang.reflect.Method.invoke(Method.java:498) >> at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323) >> at sun.rmi.transport.Transport$1.run(Transport.java:200) >> at sun.rmi.transport.Transport$1.run(Transport.java:197) >> at java.security.AccessController.doPrivileged(Native Method) >> at sun.rmi.transport.Transport.serviceCall(Transport.java:196) >> at >> sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) >> at >> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) >> at >> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) >> at java.security.AccessController.doPrivileged(Native Method) >> at >> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) >> at >> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) >> at >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) >> at java.lang.Thread.run(Thread.java:745) >> at >> sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:276) >> at >> sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:253) >> at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162) >> at org.apache.jackrabbit.rmi.server.ServerSession_Stub.save(Unknown >> Source) >> at >> org.apache.jackrabbit.rmi.client.ClientSession.save(ClientSession.java:272) >> at TestJCRVersionable.main(TestJCRVersionable.java:23) >> >> >> >> Code snippet: >> >> public class TestJCRVersionable { >> >> public static void main(String[] args) throws Exception { >> Repository repository = new >> URLRemoteRepository("http://localhost:8080/oak/rmi"); >> Session session = repository.login(new >> SimpleCredentials("admin", >> "admin".toCharArray())); >> >> Node root = session.getRootNode(); >> long id=System.currentTimeMillis(); >> >> //create versionable node >> Node n = root.addNode("testNode_" + id, "nt:unstructured"); >> n.addMixin("mix:versionable"); >> session.save(); >> >> VersionManager vMgr = session.getWorkspace().getVersionManager(); >> vMgr.checkin("/testNode_" + id); >> >> session.logout(); >> >> } >> >> } -- View this message in context: http://jackrabbit.510166.n4.nabble.com/Mandatory-property-jcr-predecessors-not-found-in-a-new-node-tp4664014p4665903.html Sent from the Jackrabbit - Dev mailing list archive at Nabble.com.