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 (JIRA)" <ji...@apache.org> on 2007/09/14 07:36:32 UTC

[jira] Closed: (JCR-1122) JCR2SPI Node.addMixin ignored and not added to ChangeLog

     [ https://issues.apache.org/jira/browse/JCR-1122?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

David Rauschenbach closed JCR-1122.
-----------------------------------

    Resolution: Cannot Reproduce

I just noticed that I cannot reproduce this problem from the command-line. It only fails from within Eclipse. Therefore I have some sort of other issue interfering.

> JCR2SPI Node.addMixin ignored and not added to ChangeLog
> --------------------------------------------------------
>
>                 Key: JCR-1122
>                 URL: https://issues.apache.org/jira/browse/JCR-1122
>             Project: Jackrabbit
>          Issue Type: Bug
>          Components: SPI
>    Affects Versions: 1.4
>            Reporter: David Rauschenbach
>
> The Node.addMixin(String) method does not result in any state change being recorded. A subsequent save then becomes a noop, because there are no affected nodes.
> The addMixin method is called on an existing node that does not yet contain a jcr:mixinTypes property, so SessionItemStateManager performs addPropertyState, and then performs nState.markModified().
> When rootNode (parent of the node used above) save() is called, getItemState() is immediately called by save, and returns state.status = Status.EXISTING. However there are pending changes, so save falls through and calls getChangeLog, which returns an empty log because NodeEntryImpl.collectStates returns nothing, because getAllChildEntries also returns nothing, not even a propertyEntry for the new transient jcr:mixinTypes property.
> Test code:
> 		final String NODE = "testNode";
> 		
> 		Session serverSession = login(repository, creds);
> 		Node serverRootNode = serverSession.getRootNode();
> 		Node serverNode = serverRootNode.addNode(NODE, "nt:unstructured");
> 		serverSession.save();
> 		assertEquals(0, serverNode.getMixinNodeTypes().length);
> 		
> 		Session clientSession = login(clientRepository, creds);
> 		Node clientNode = clientSession.getRootNode().getNode(NODE);
> 		clientNode.addMixin("mix:referenceable"); <== Doesn't mark anything modified
> 		clientSession.save(); <== Does nothing
> 		serverNode.refresh(false);
> 		assertEquals(1, serverNode.getMixinNodeTypes().length); <== fails
> I'm using an 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.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.