jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stefan Guggisberg <stefan.guggisb...@gmail.com>
Subject Re: Wrong behaviour with session.refresh(true)
Date Fri, 11 Nov 2005 09:04:33 GMT
hi cédric

On 11/10/05, Cédric Damioli <cedric.damioli@anyware-tech.com> wrote:
> Hi all,
>
> I'm playing with multi-threaded stuff (SVN trunk from less than 10
> minutes).
>
> Let suppose that two different threads acquire a Session, then get the
> same Node X and then add a new child to this Node, and then call the
> save() method.
>
> First save() call will success, and second one will lead to :
> javax.jcr.InvalidItemStateException:
> b13b8065-5115-4bd3-87cf-5544879209e8: the item cannot be saved because
> it has been modified externally.
> The given UUID being the actual UUID of the Node X.
> I assume this behaviour is ok, isn't it ?

correct.

>
> But, second step, just before calling the method save(), I call
> session.refresh(true), and what I'm getting is not what I was expecting :
> firstly, the InvalidItemStateException is here again
> and secondly, after debugging, it appears that the refresh(true) doesn't
> behave as expected : after the second call to refresh(true), the second
> Sessions does not know (according to itemExists()) the first child
> created by the first Session.
>
> My code is equivalent to :
>
> Node X = session.getNode(path);
> X.addNode(whateverUniqueName);
> session.refresh(true);
> session.save();
>
>
> Do I misunderstood the refresh() method ? Or is there a bug here ?

the current behaviour of refresh=true is according to the spec. the spec
does not mandate to merge changes made by different sessions on the
*same* item, in your case parent node.

cheers
stefan

>
> Regards,
>
> --
> Cédric Damioli
> ANYWARE TECHNOLOGIES
> Tel : +33 (0)5 61 00 52 90
> Fax : +33 (0)5 61 00 51 46
> http://www.anyware-tech.com
>
>

Mime
View raw message