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