You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Arnaud GARCIA <ar...@sim.hcuge.ch> on 2006/04/24 16:56:40 UTC
ConcurrentModificationException ...
Hello,
I have a problem with multithreaded access with cayenne ...
My model is a simple one to many relationship (an Order can have many
series)
In my main thread I add new series to an Order :
order.addToSeries(aSerie);
But in another thread I am doing an Iteration over the series which
launch an exception:
List series = order.getSeries();
for (Iterator iter = series.iterator(); iter.hasNext();) {
...
}
Exception in thread "Thread-985" java.util.ConcurrentModificationException
at
java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:617)
Is there a way to lock/synchronize the addToSeries or the iter.hasNext()
.... what is the good way to do this with cayenne ?
many thanks,
Arnaud
Re: ConcurrentModificationException ...
Posted by Cris Daniluk <cr...@gmail.com>.
On 4/24/06, Arnaud GARCIA <ar...@sim.hcuge.ch> wrote:
> Hello,
> I have a problem with multithreaded access with cayenne ...
> My model is a simple one to many relationship (an Order can have many
> series)
>
> In my main thread I add new series to an Order :
> order.addToSeries(aSerie);
>
> But in another thread I am doing an Iteration over the series which
> launch an exception:
> List series = order.getSeries();
> for (Iterator iter = series.iterator(); iter.hasNext();) {
> ...
> }
Cayenne is returning its internal reference to the collection. This is
easy to avoid by just wrapping the collection:
List series = new ArrayList(order.getSeries());
This is a good general habit to be in anyway... in single-theaded
apps, you'll still get the CME if you attempt to modify the collection
(through remove, etc)
Cris