jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Carlos Villegas <...@uniscope.jp>
Subject Re: ItemStateException
Date Tue, 28 Feb 2006 06:18:07 GMT
Could this error happen if two threads are working simultaneously on the 
same session?

I have a InputStream property in one node and spawn a thread to pipe an 
OutputStream from some process. It seems, in a slow machine, since the 
process already closed the OutputStream, it goes on saving other 
properties in the same node. However, the piping thread may still be 
executing the final node.save(). The interesting thing is that I 
reversed the calls and now I don't see the error anymore. In other 
words, I execute the pipe at the end, and then return control to the 
interactive GUI, so no more JCR operations happens for a while.

Carlos

Stefan Guggisberg wrote:
> On 2/27/06, Carlos Villegas <cav@uniscope.jp> wrote:
> 
>>What does the following exception mean:
>>
>>javax.jcr.InvalidItemStateException:
>>d35eb7b6-ca1a-4c18-98fc-0aa0ee9b8987: the item cannot be saved because
>>it has been modified externally.
>>
>>There's only one application using the repository. What could be happening?
> 
> 
> this exception indicates that you have 2 separate sessions that try to modify
> the *same* item.
> 
> the following code fragment illustrates this:
> 
> Node a1 = session1.getRootNode().getNode("a");
> Node a2 = session2.getRootNode().getNode("a");
> 
> // session 1 modifies node a
> a1.addNode("b");
> // session 2 modifies node a
> a2.addNode("c");
> 
> // session 1 saves its changes
> a1.save();
> 
> // session 2 tries to save its changes but gets
> // an InvalidItemStateException because its
> // changes have become stale
> a2.save();   // throws
> 
> 
> you can avoid such situations if you lock the node before
> you start modifiying it.
> 
> cheers
> stefan
> 
> 
>>Carlos
>>
> 
> 


Mime
View raw message