|
Re: stereotypes not found on model reload [message #1273086 is a reply to message #1272946] |
Wed, 19 March 2014 13:22 |
|
Hi,
When the same model is loaded again, is it loaded in a different
ResourceSet than the first time? If so, was it unloaded in the first
resource set? And were the profiles also unloaded in that first
resource set?
Because the CacheAdapter is a static singleton and maintains references
(for indexing of non-navigable inverse references, such as the
stereotypes' metaclass extensions) to every UML model element that is
loaded, is it important always to unload every resource in the
ResourceSet when you have finished with that ResourceSet. Otherwise,
it and all of its contents will leak.
I suspect that something cached in the CacheAdapter from the first copy
of the model is interfering with the inverse-reference searches in the
second copy when looking for applied stereotypes. Or else the dynamic
EPackage definitions of the profiles are not being resolved properly
the second time.
This is all guesswork, as you haven't provided many clues as to what
may be going wrong. You can step through the
getAppliedStereotypes(Element) or getStereotypeApplications(Element)
method of the ElementOperations class (depending on which your
application uses) in the debugger to see whether the problem is that
(a) inverse references from stereotype applications are not being found, or
(b) stereotype applications are not traceable to stereotypes
and why (step through the getStereotype(EObject) method and its call
tree to diagnose the latter case).
In any case, the only thing connected with the first time loading your
model that can reasonably be expected to interfere with the second time
is the CacheAdapter, because it is shared globally. So, I expect that
careful unloading should fix your problem.
HTH,
Christian
On 2014-03-19 06:19:30 +0000, Andrew Miga said:
> We are working on an application which transforms UML behavior diagrams
> annotated with MARTE stereotypes into another EMF model. The
> application deserializes a .uml file (located in a directory with many
> supporting *.profile.uml files) into UML objects and then converts the
> MARTE annotated diagrams into another model. At many points MARTE
> stereotype tags and values which are attached to various diagram
> elements are successfully read.
>
> Everything works fine the first time a specific .uml model is
> transformed. The file is deserialized into a UML object model and the
> attached stereotypes are successfully read. However the second time the
> same .uml model file is transformed no stereotypes of any kind are
> found. The UML objects themselves are created but attached stereotypes
> can't be found. If the application is restarted the everything works
> fine again.
>
> Is there something that needs to be cleared or reset before the same
> .uml model is deserialized for a second time ?
>
|
|
|
|
|
Re: stereotypes not found on model reload [message #1277041 is a reply to message #1276754] |
Tue, 25 March 2014 11:55 |
|
Yep, you'll find that in every UML-based application. :-) It's
essential to preventing memory leaks.
Cheers,
Christian
On 2014-03-25 01:28:04 +0000, Andrew Miga said:
> In an update to my previous reply I have found it necessary to unload
> all resources from the resource set with the following loop. The code
> for the loop was from a forum email.
>
>
> if( modelResource != null ) { // unload previous resources if existing
> // unload every resource in the resourceSet including profiles
> for (Iterator<Resource> i = resourceSet.getResources().iterator();
> i.hasNext();) {
> Resource current = (Resource) i.next();
> current.unload();
> i.remove();
> }
> }
|
|
|
Powered by
FUDForum. Page generated in 0.01766 seconds