You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by David Rauschenbach <da...@imap.cc> on 2007/09/14 05:19:23 UTC
JCR2SPI Node.remove causes ConstraintVE("ChangeLog not
self-contained")
My removeNodeTest doesn't seem to want to work through jcr2spi. When I
remove a node and save its parent, jcr2spi ChangeLog throws
ConstraintViolationException("ChangeLog is not self contained"), because:
1. opStates (returned by op.getAffectedItemStates()) contains two entries:
1a. Status.EXISTING_REMOVED of the node being removed
1b. Status.EXISTING_MODIFIED of its parent, the root node.
whereas
2. affectedStates contains only one entry:
2a. Status.EXISTING_MODIFIED of the root node
Any idea why the affectedStates var would only contain the one entry, not
both? Maybe some metadata drives that?
I'm using a web service SPI I implemented, in conjunction with the jcr2spi
and spi2jcr bridges, coupled with a back-end Jackrabbit in-memory
filesystem. So there's always the possibility that node or property SPI
calls inject errors and cause this downstream problem.
Here's my invoking code;
> final String NODE = "block";
>
> Session serverSession = login(repository, creds);
> Node serverRootNode = serverSession.getRootNode();
> assertFalse(serverRootNode.hasNode(NODE));
> Node serverNode = serverRootNode.addNode(NODE, "nt:folder");
> serverSession.save();
> assertTrue(serverRootNode.hasNode(NODE));
>
> Session clientSession = login(clientRepository, creds);
> Node clientRootNode = clientSession.getRootNode();
> Node clientNode = clientRootNode.getNode(NODE);
> clientNode.remove();
> clientRootNode.save(); <== THROWS "ChangeLog is not self contained"
>
> serverSession.refresh(false);
> assertFalse(serverRootNode.hasNode(NODE));
Thanks
Re: JCR2SPI Node.remove causes ConstraintVE("ChangeLog not
self-contained")
Posted by David Rauschenbach <da...@imap.cc>.
My problem went away after freshening my jars from a fresh trunk build. I
think I caused this problem with mismatched jar files. If so, sorry for
wasting anyone's time.
David
On 9/14/07 4:40 AM, "Marcel Reutegger" <ma...@gmx.net> wrote:
> that's very strange. does this also happen if you connect jcr2spi directly
> with
> spi2jcr without your intermediary layer?
>
> regards
> marcel
>
> David Rauschenbach wrote:
>> My removeNodeTest doesn't seem to want to work through jcr2spi. When I
>> remove a node and save its parent, jcr2spi ChangeLog throws
>> ConstraintViolationException("ChangeLog is not self contained"), because:
>>
>> 1. opStates (returned by op.getAffectedItemStates()) contains two entries:
>>
>> 1a. Status.EXISTING_REMOVED of the node being removed
>> 1b. Status.EXISTING_MODIFIED of its parent, the root node.
>>
>> whereas
>>
>> 2. affectedStates contains only one entry:
>>
>> 2a. Status.EXISTING_MODIFIED of the root node
>>
>> Any idea why the affectedStates var would only contain the one entry, not
>> both? Maybe some metadata drives that?
>>
>> I'm using a web service SPI I implemented, in conjunction with the jcr2spi
>> and spi2jcr bridges, coupled with a back-end Jackrabbit in-memory
>> filesystem. So there's always the possibility that node or property SPI
>> calls inject errors and cause this downstream problem.
>>
>> Here's my invoking code;
>>
>>> final String NODE = "block";
>>>
>>> Session serverSession = login(repository, creds);
>>> Node serverRootNode = serverSession.getRootNode();
>>> assertFalse(serverRootNode.hasNode(NODE));
>>> Node serverNode = serverRootNode.addNode(NODE, "nt:folder");
>>> serverSession.save();
>>> assertTrue(serverRootNode.hasNode(NODE));
>>>
>>> Session clientSession = login(clientRepository, creds);
>>> Node clientRootNode = clientSession.getRootNode();
>>> Node clientNode = clientRootNode.getNode(NODE);
>>> clientNode.remove();
>>> clientRootNode.save(); <== THROWS "ChangeLog is not self contained"
>>>
>>> serverSession.refresh(false);
>>> assertFalse(serverRootNode.hasNode(NODE));
>>
>> Thanks
>>
>>
>>
>
Re: JCR2SPI Node.remove causes ConstraintVE("ChangeLog not self-contained")
Posted by Marcel Reutegger <ma...@gmx.net>.
that's very strange. does this also happen if you connect jcr2spi directly with
spi2jcr without your intermediary layer?
regards
marcel
David Rauschenbach wrote:
> My removeNodeTest doesn't seem to want to work through jcr2spi. When I
> remove a node and save its parent, jcr2spi ChangeLog throws
> ConstraintViolationException("ChangeLog is not self contained"), because:
>
> 1. opStates (returned by op.getAffectedItemStates()) contains two entries:
>
> 1a. Status.EXISTING_REMOVED of the node being removed
> 1b. Status.EXISTING_MODIFIED of its parent, the root node.
>
> whereas
>
> 2. affectedStates contains only one entry:
>
> 2a. Status.EXISTING_MODIFIED of the root node
>
> Any idea why the affectedStates var would only contain the one entry, not
> both? Maybe some metadata drives that?
>
> I'm using a web service SPI I implemented, in conjunction with the jcr2spi
> and spi2jcr bridges, coupled with a back-end Jackrabbit in-memory
> filesystem. So there's always the possibility that node or property SPI
> calls inject errors and cause this downstream problem.
>
> Here's my invoking code;
>
>> final String NODE = "block";
>>
>> Session serverSession = login(repository, creds);
>> Node serverRootNode = serverSession.getRootNode();
>> assertFalse(serverRootNode.hasNode(NODE));
>> Node serverNode = serverRootNode.addNode(NODE, "nt:folder");
>> serverSession.save();
>> assertTrue(serverRootNode.hasNode(NODE));
>>
>> Session clientSession = login(clientRepository, creds);
>> Node clientRootNode = clientSession.getRootNode();
>> Node clientNode = clientRootNode.getNode(NODE);
>> clientNode.remove();
>> clientRootNode.save(); <== THROWS "ChangeLog is not self contained"
>>
>> serverSession.refresh(false);
>> assertFalse(serverRootNode.hasNode(NODE));
>
> Thanks
>
>
>