(Sorry for the many mails on this.)

After I added the mix:versionable as described in my previous posting, with
saving the session in between, I am not able to retrieve the history of it,
as I am getting an error as follows:

org.springframework.web.util.NestedServletException: Request processing
failed; nested exception is java.lang.IllegalStateException: Base version
does not exist for /documents/versiontest17.jpg


This is what my node looks like after I created it and added the mixin:

{
  "jcr:created": "Mon Dec 19 2016 20:02:43 GMT+0100",
  "jcr:isCheckedOut": true,
  "jcr:mixinTypes": [
    "mix:referenceable",
    "mix:versionable"
  ],
  "jcr:createdBy": "admin",
  "jcr:uuid": "6481825f-09f0-4639-b166-7bd450cfa836",
  "jcr:primaryType": "nt:file",
  "jcr:content": {
    "jcr:lastModifiedBy": "admin",
    ":jcr:data": 3,
    "jcr:lastModified": "Mon Dec 19 2016 20:02:43 GMT+0100",
    "jcr:uuid": "dd466d5c-0cf8-41da-a86a-c2e7bc3efadd",
    "jcr:primaryType": "nt:resource"
  }
}


>From my understanding, the baseVersion should be automatically initialized
when the node is made versionable?!

https://docs.adobe.com/content/docs/en/spec/jcr/2.0/15_Versioning.html

"Additionally, under full versioning: The REFERENCE property jcr:baseVersion
of N is initialized to the identifier of V0. This constitutes a reference
from N to its current base version."




mathiasconradt wrote
> 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-tp4664014p4665904.html
Sent from the Jackrabbit - Dev mailing list archive at Nabble.com.

Reply via email to