Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 329258 - No unique AspectInstance ID
Summary: No unique AspectInstance ID
Status: NEW
Alias: None
Product: JWT
Classification: SOA
Component: WE (show other bugs)
Version: 1.1.0   Edit
Hardware: PC Windows 7
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-11-02 10:17 EDT by Benjamin Honke CLA
Modified: 2011-06-06 12:27 EDT (History)
1 user (show)

See Also:


Attachments
.workflow + workflow_conf (2.49 KB, application/zip)
2010-11-03 06:59 EDT, Benjamin Honke CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Benjamin Honke CLA 2010-11-02 10:17:22 EDT
Hi,

I have to work with aspect instances programmatically. Hereby, I create my aspect instances before I add the instances to the ConfModel. In my case, the aspect is represented by a more complicated meta model. So, when I have added an aspect instance to ConfModel, the ConfModel no longer can be persisted. I think, this is caused by wrong aspect instance IDs, which are created by the AspectFactoryImpl class.

For each AspectInstance of the same type the method createAspectInstance(..) sets the same ID value via newAspectInstance.setId(aspect.getId());
In my case, this causes problems as EMF by default uses that ID for identifying reference paths. As IDs are not unique, reference paths can not be resolved which is causing an error.

For me I solved the problem by changing newAspectInstance.setId(aspect.getId()); to newAspectInstance.setId(EcoreUtil.generateUUID());

This works fine for me and until now, I noticed no side effects.

Best regards 
Benjamin Honke
Comment 1 Marc Dutoo CLA 2010-11-03 04:06:09 EDT
Hi Benjamin

I'ma fraid you should'nt have this problem, and your solution is not right.

1. in ConfMetaModel.ecore, aspect.id is not marked as an ID in its EMF definition, so should not have any constraint attached to it. Which version are you using, Helios ? Could you provide your model and conf model so we can have a look ?

2. An aspect instance's id tracks which aspect it is an instance of, so you should not generate it. For instance, in AspectEnrichedItemProviderAdapter.collectNewChildAspectDescriptors(), you can see how it is used to determine whether an aspect has already been instanciated (at least once) or not on a given model element :

for (AspectInstance aspectInstance : AspectManager.INSTANCE.getAspectInstances(modelElement)) {
   if (aspect.getId().equals(aspectInstance.getId())) {
      alreadyInstanciated = true;

I agree it would have best been named aspectId than id, but well...

So with your change, some features don't work anymore, like single ("multiple==false") aspects.

Regards,
Marc
Comment 2 Benjamin Honke CLA 2010-11-03 06:59:16 EDT
Created attachment 182281 [details]
.workflow + workflow_conf 

Hi Marc,


I attached the workflow and conf file which causes the follwoing UnresolvedReferenceException. For me the problem could be that all the reference paths '..//@aspectInstances[id='de.uni-augsburg.methodology-support.mcd.ActionGuideline']..' start equally.

I'm using the Helios version.

Regards,
Benni

03.11.2010 11:32:05 org.eclipse.jwt.we.conf.model.resource.internal.ConfModelResourceManagerImpl handleResourceLoadingError
SCHWERWIEGEND: Patchable (but won't try to patch) error loading conf model resource for ConfModel file platform:/resource/ShowCase/src/showcase/original.workflow_conf while looking for expected ConfModel of model platform:/resource/ShowCase/src/showcase/original.workflow
org.eclipse.emf.ecore.xmi.UnresolvedReferenceException: Unresolved reference '//@aspectInstances[id='de.uni-augsburg.methodology-support.mcd.ActionGuideline']/@description/@guidelines.0/@edges.0'. (platform:/resource/ShowCase/src/showcase/original.workflow_conf, 98, 227)
	at org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleForwardReferences(XMLHandler.java:1154)
	at org.eclipse.emf.ecore.xmi.impl.XMLHandler.endDocument(XMLHandler.java:1228)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java:181)
	at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(XMLResourceImpl.java:180)
	at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1494)
	at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1282)
	at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:255)
	at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:270)
	at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:397)
	at org.eclipse.jwt.we.conf.model.resource.internal.ConfModelResourceManagerImpl.loadConfModel(ConfModelResourceManagerImpl.java:457)
	at org.eclipse.jwt.we.conf.model.resource.internal.ConfModelResourceManagerImpl.loadConfModelOfModel(ConfModelResourceManagerImpl.java:192)
	at org.eclipse.jwt.we.conf.model.aspects.internal.AspectManagerImpl.getConfModel(AspectManagerImpl.java:154)
	at org.eclipse.jwt.we.conf.model.aspects.internal.AspectManagerImpl.getConfModel(AspectManagerImpl.java:122)
	at org.eclipse.jwt.we.conf.model.aspects.internal.AspectManagerImpl.getAspectInstances(AspectManagerImpl.java:653)
	at org.eclipse.jwt.we.conf.edit.aspects.provider.AspectEnrichedItemProviderAdapter.getChildren(AspectEnrichedItemProviderAdapter.java:92)
	at org.eclipse.jwt.meta.model.core.provider.ModelElementItemProvider.getChildren(ModelElementItemProvider.java:399)
	at org.eclipse.emf.edit.provider.ItemProviderAdapter.getElements(ItemProviderAdapter.java:310)
	at org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider.getElements(AdapterFactoryContentProvider.java:160)
	at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:989)
	at org.eclipse.jface.viewers.ColumnViewer.getRawChildren(ColumnViewer.java:703)
	at org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(AbstractTreeViewer.java:1332)
	at org.eclipse.jface.viewers.TreeViewer.getRawChildren(TreeViewer.java:391)
	at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:896)
	at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:601)
	at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer.java:801)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:778)
	at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:644)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:749)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalInitializeTree(AbstractTreeViewer.java:1492)
	at org.eclipse.jface.viewers.TreeViewer.internalInitializeTree(TreeViewer.java:833)
	at org.eclipse.jface.viewers.AbstractTreeViewer$5.run(AbstractTreeViewer.java:1476)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1422)
	at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:403)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1383)
	at org.eclipse.jface.viewers.AbstractTreeViewer.inputChanged(AbstractTreeViewer.java:1469)
	at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:274)
	at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1664)
	at org.eclipse.jwt.we.editors.pages.overviewPage.WEOverviewSheet.createConfigPage(WEOverviewSheet.java:740)
	at org.eclipse.jwt.we.editors.pages.overviewPage.WEOverviewSheet.<init>(WEOverviewSheet.java:252)
	at org.eclipse.jwt.we.editors.WEEditor.createPages(WEEditor.java:388)
	at org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:348)
	at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670)
	at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465)
	at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
	at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313)
	at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180)
	at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270)
	at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
	at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473)
	at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1254)
	at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1207)
	at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1606)
	at org.eclipse.ui.internal.PartStack.add(PartStack.java:497)
	at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:103)
	at org.eclipse.ui.internal.PartStack.add(PartStack.java:483)
	at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:112)
	at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:63)
	at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:225)
	at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:213)
	at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:778)
	at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:677)
	at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:638)
	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2860)
	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2768)
	at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2760)
	at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2711)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2707)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2691)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2682)
	at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651)
	at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610)
	at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:365)
	at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:168)
	at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:229)
	at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:208)
	at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:274)
	at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:250)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionGroup.handleOpen(PackageExplorerActionGroup.java:373)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$4.open(PackageExplorerPart.java:526)
	at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48)
	at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:845)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
	at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:843)
	at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1131)
	at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1235)
	at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:264)
	at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:258)
	at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:298)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Comment 3 Marc Dutoo CLA 2010-11-26 10:43:24 EST
Hi Benjamin

Is it what you suggest in 
https://bugs.eclipse.org/bugs/show_bug.cgi?id=329262 ?
(Then it'd be fine)

Regards,
Marc
Comment 4 Benjamin Honke CLA 2010-11-29 04:48:34 EST
Hi Marc,

Unfortunately, this is not my point. The model element IDs are useful to work with them at runtime, e.g. for comparing or tracing objects (perhaps with the same name). The problem with AspectInstance IDs concerns the persistence mechanism of the ConfModel. If an AspectInstance ID is the same for more than one aspect instance, references within my aspect-oriented extension, a self-contained model, are wrong persisted. This means, references cannot be de-serialized/ instantiated. In my opinion, the XMIResourceFactory is not able to resolve the referenced objects, as their reference path is not unique.

Best regards 
Benajmin


(In reply to comment #3)
> Hi Benjamin
> 
> Is it what you suggest in 
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=329262 ?
> (Then it'd be fine)
> 
> Regards,
> Marc
Comment 5 Marc Dutoo CLA 2011-06-06 12:27:19 EDT
Moved version to 1.1 since it still occurs.