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 ?

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 ?

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

Reply via email to