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
> 
> 
>