Home » Modeling » EMF "Technology" (Ecore Tools, EMFatic, etc) » [EMF Transaction] ConcurrentModificationException while unloading a resource
|
Re: [EMF Transaction] ConcurrentModificationException while unloading a resource [message #92465 is a reply to message #92449] |
Thu, 02 August 2007 18:56 |
Eclipse User |
|
|
|
Originally posted by: cdamus.ca.ibm.com
Hi, Sascha,
I answered some of your more general questions on the EMF newsgroup, where
EMF Transaction now lives.
Regarding the concurrent modification in the ReadWriteValidatorImpl: that
shouldn't happen, so it is probably a bug. If you can provide a
reproducible test case on a bugzilla, that would be great.
In general, loading and unloading resources isn't something that you would
do in a command on the CommandStack, because commands should modify the
model content (what I call "abstract changes") and not just
bookkeeping/metadata objects such as Resources (what I call "concrete
changes"). However, I doubt that this would be the cause of the exception.
Cheers,
Christian
Sascha Theves wrote:
> Hi all,
>
> we get sometimes ConcurrentModificationExceptions when we are about to
> unload/load an EMF resource. Thats because a Thread iterates over the
> resources in our common ResourceSet (we only have one) and another Thread
> loads a resource - for example. We have written a thread-safe class that
> does all the load and unload operations and all other components have to
> use that class. This works now but it does not cover the following issue:
>
> One Thread unloads a resource. Another Thread reads the model from the
> resource that is being unloaded. These two Threads are not synchronized
> and we get several Exceptions.
>
> Our idea is now to use EMF Transaction and there, the READ/WRITE lock
> mechanism to prevent these problems. But we are not sure if it is a good
> idea to put the load/unload operations in the WRITE lock. Is there another
> way to prevent these multithreading issues? Is the approach with EMF
> Transaction necessary in load/unload operations? Is our approach with the
> thread-safe class a better idea?
>
> For testing purposes we have written several commands which
> loading/unloading an EMF resource. These commands are executed in
> CommandStack of the TransactionalEditingDomain.
> But now we get sometimes a ConcurrentModificationException at
>
org.eclipse.emf.transaction.impl.ReadWriteValidatorImpl$Noti ficationTree.collectNotifications(ReadWriteValidatorImpl.jav a:405).
> Means that unloading/loading of an EMF resource should not be done within
> a command?
>
> Thanks in advance
>
> Sascha
|
|
|
Re: [EMF Transaction] ConcurrentModificationException while unloading a resource [message #92568 is a reply to message #92465] |
Fri, 03 August 2007 12:35 |
Sascha Theves Messages: 39 Registered: July 2009 |
Member |
|
|
Hi Christian,
thanks for the answer. I put all load/unload Operations in the Read-Lock
(with runExclusive(...)). It seems that this works fine. The
ConcurrentModificationException is gone. I can try to reproduce the
ConcurrentModificationException in a test case and report it on bugzilla.
Thanks for your help!
Sascha
"Christian W. Damus" <cdamus@ca.ibm.com> schrieb im Newsbeitrag
news:f8t9c0$6su$3@build.eclipse.org...
> Hi, Sascha,
>
> I answered some of your more general questions on the EMF newsgroup, where
> EMF Transaction now lives.
>
> Regarding the concurrent modification in the ReadWriteValidatorImpl: that
> shouldn't happen, so it is probably a bug. If you can provide a
> reproducible test case on a bugzilla, that would be great.
>
> In general, loading and unloading resources isn't something that you would
> do in a command on the CommandStack, because commands should modify the
> model content (what I call "abstract changes") and not just
> bookkeeping/metadata objects such as Resources (what I call "concrete
> changes"). However, I doubt that this would be the cause of the
> exception.
>
> Cheers,
>
> Christian
>
> Sascha Theves wrote:
>
>> Hi all,
>>
>> we get sometimes ConcurrentModificationExceptions when we are about to
>> unload/load an EMF resource. Thats because a Thread iterates over the
>> resources in our common ResourceSet (we only have one) and another Thread
>> loads a resource - for example. We have written a thread-safe class that
>> does all the load and unload operations and all other components have to
>> use that class. This works now but it does not cover the following issue:
>>
>> One Thread unloads a resource. Another Thread reads the model from the
>> resource that is being unloaded. These two Threads are not synchronized
>> and we get several Exceptions.
>>
>> Our idea is now to use EMF Transaction and there, the READ/WRITE lock
>> mechanism to prevent these problems. But we are not sure if it is a good
>> idea to put the load/unload operations in the WRITE lock. Is there
>> another
>> way to prevent these multithreading issues? Is the approach with EMF
>> Transaction necessary in load/unload operations? Is our approach with the
>> thread-safe class a better idea?
>>
>> For testing purposes we have written several commands which
>> loading/unloading an EMF resource. These commands are executed in
>> CommandStack of the TransactionalEditingDomain.
>> But now we get sometimes a ConcurrentModificationException at
>>
> org.eclipse.emf.transaction.impl.ReadWriteValidatorImpl$Noti ficationTree.collectNotifications(ReadWriteValidatorImpl.jav a:405).
>> Means that unloading/loading of an EMF resource should not be done within
>> a command?
>>
>> Thanks in advance
>>
>> Sascha
>
|
|
|
Re: [EMF Transaction] ConcurrentModificationException while unloading a resource [message #609415 is a reply to message #92449] |
Thu, 02 August 2007 18:56 |
Eclipse User |
|
|
|
Originally posted by: cdamus.ca.ibm.com
Hi, Sascha,
I answered some of your more general questions on the EMF newsgroup, where
EMF Transaction now lives.
Regarding the concurrent modification in the ReadWriteValidatorImpl: that
shouldn't happen, so it is probably a bug. If you can provide a
reproducible test case on a bugzilla, that would be great.
In general, loading and unloading resources isn't something that you would
do in a command on the CommandStack, because commands should modify the
model content (what I call "abstract changes") and not just
bookkeeping/metadata objects such as Resources (what I call "concrete
changes"). However, I doubt that this would be the cause of the exception.
Cheers,
Christian
Sascha Theves wrote:
> Hi all,
>
> we get sometimes ConcurrentModificationExceptions when we are about to
> unload/load an EMF resource. Thats because a Thread iterates over the
> resources in our common ResourceSet (we only have one) and another Thread
> loads a resource - for example. We have written a thread-safe class that
> does all the load and unload operations and all other components have to
> use that class. This works now but it does not cover the following issue:
>
> One Thread unloads a resource. Another Thread reads the model from the
> resource that is being unloaded. These two Threads are not synchronized
> and we get several Exceptions.
>
> Our idea is now to use EMF Transaction and there, the READ/WRITE lock
> mechanism to prevent these problems. But we are not sure if it is a good
> idea to put the load/unload operations in the WRITE lock. Is there another
> way to prevent these multithreading issues? Is the approach with EMF
> Transaction necessary in load/unload operations? Is our approach with the
> thread-safe class a better idea?
>
> For testing purposes we have written several commands which
> loading/unloading an EMF resource. These commands are executed in
> CommandStack of the TransactionalEditingDomain.
> But now we get sometimes a ConcurrentModificationException at
>
org.eclipse.emf.transaction.impl.ReadWriteValidatorImpl$Noti ficationTree.collectNotifications(ReadWriteValidatorImpl.jav a:405).
> Means that unloading/loading of an EMF resource should not be done within
> a command?
>
> Thanks in advance
>
> Sascha
|
|
|
Re: [EMF Transaction] ConcurrentModificationException while unloading a resource [message #609422 is a reply to message #92465] |
Fri, 03 August 2007 12:35 |
Sascha Theves Messages: 39 Registered: July 2009 |
Member |
|
|
Hi Christian,
thanks for the answer. I put all load/unload Operations in the Read-Lock
(with runExclusive(...)). It seems that this works fine. The
ConcurrentModificationException is gone. I can try to reproduce the
ConcurrentModificationException in a test case and report it on bugzilla.
Thanks for your help!
Sascha
"Christian W. Damus" <cdamus@ca.ibm.com> schrieb im Newsbeitrag
news:f8t9c0$6su$3@build.eclipse.org...
> Hi, Sascha,
>
> I answered some of your more general questions on the EMF newsgroup, where
> EMF Transaction now lives.
>
> Regarding the concurrent modification in the ReadWriteValidatorImpl: that
> shouldn't happen, so it is probably a bug. If you can provide a
> reproducible test case on a bugzilla, that would be great.
>
> In general, loading and unloading resources isn't something that you would
> do in a command on the CommandStack, because commands should modify the
> model content (what I call "abstract changes") and not just
> bookkeeping/metadata objects such as Resources (what I call "concrete
> changes"). However, I doubt that this would be the cause of the
> exception.
>
> Cheers,
>
> Christian
>
> Sascha Theves wrote:
>
>> Hi all,
>>
>> we get sometimes ConcurrentModificationExceptions when we are about to
>> unload/load an EMF resource. Thats because a Thread iterates over the
>> resources in our common ResourceSet (we only have one) and another Thread
>> loads a resource - for example. We have written a thread-safe class that
>> does all the load and unload operations and all other components have to
>> use that class. This works now but it does not cover the following issue:
>>
>> One Thread unloads a resource. Another Thread reads the model from the
>> resource that is being unloaded. These two Threads are not synchronized
>> and we get several Exceptions.
>>
>> Our idea is now to use EMF Transaction and there, the READ/WRITE lock
>> mechanism to prevent these problems. But we are not sure if it is a good
>> idea to put the load/unload operations in the WRITE lock. Is there
>> another
>> way to prevent these multithreading issues? Is the approach with EMF
>> Transaction necessary in load/unload operations? Is our approach with the
>> thread-safe class a better idea?
>>
>> For testing purposes we have written several commands which
>> loading/unloading an EMF resource. These commands are executed in
>> CommandStack of the TransactionalEditingDomain.
>> But now we get sometimes a ConcurrentModificationException at
>>
> org.eclipse.emf.transaction.impl.ReadWriteValidatorImpl$Noti ficationTree.collectNotifications(ReadWriteValidatorImpl.jav a:405).
>> Means that unloading/loading of an EMF resource should not be done within
>> a command?
>>
>> Thanks in advance
>>
>> Sascha
>
|
|
|
Goto Forum:
Current Time: Thu Apr 18 14:38:17 GMT 2024
Powered by FUDForum. Page generated in 0.02030 seconds
|