Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 333248

Summary: [Dawn] GMF extension throws CoreException
Product: [Modeling] EMF Reporter: Martin Fluegge <martin.fluegge>
Component: cdo.dawnAssignee: Martin Fluegge <martin.fluegge>
Status: CLOSED WONTFIX QA Contact: Eike Stepper <stepper>
Severity: normal    
Priority: P3 Flags: stepper: review-
Version: 4.0   
Target Milestone: ---   
Hardware: All   
OS: All   
Whiteboard:
Attachments:
Description Flags
Patch v1
none
Patch v2 - do not commit none

Description Martin Fluegge CLA 2010-12-27 14:19:47 EST
On several actions the excpetion below is thrown. This happens for example if elemtns in the diagram are changed or the diagram is saved

org.eclipse.core.runtime.CoreException: No file system is defined for scheme: cdo
	at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:55)
	at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:50)
	at org.eclipse.core.internal.filesystem.InternalFileSystemCore.getFileSystem(InternalFileSystemCore.java:65)
	at org.eclipse.core.internal.filesystem.InternalFileSystemCore.getStore(InternalFileSystemCore.java:107)
	at org.eclipse.core.filesystem.EFS.getStore(EFS.java:470)
	at org.eclipse.core.internal.localstore.FileSystemResourceManager.findLinkedResourcesPaths(FileSystemResourceManager.java:129)
	at org.eclipse.core.internal.localstore.FileSystemResourceManager.allPathsForLocationNonCanonical(FileSystemResourceManager.java:120)
	at org.eclipse.core.internal.localstore.FileSystemResourceManager.allPathsForLocation(FileSystemResourceManager.java:57)
	at org.eclipse.core.internal.localstore.FileSystemResourceManager.allResourcesFor(FileSystemResourceManager.java:198)
	at org.eclipse.core.internal.resources.WorkspaceRoot.findFilesForLocationURI(WorkspaceRoot.java:112)
	at org.eclipse.core.internal.resources.WorkspaceRoot.findFilesForLocationURI(WorkspaceRoot.java:103)
	at org.eclipse.emf.workspace.util.WorkspaceSynchronizer.getFile(WorkspaceSynchronizer.java:357)
	at org.eclipse.emf.workspace.util.WorkspaceSynchronizer.getFile(WorkspaceSynchronizer.java:270)
	at org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreDiagramEditor.getNavigatorSelection(AcoreDiagramEditor.java:307)
	at org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreDiagramEditor.getShowInContext(AcoreDiagramEditor.java:293)
	at org.eclipse.ui.internal.services.WorkbenchSourceProvider.getContext(WorkbenchSourceProvider.java:412)
	at org.eclipse.ui.internal.services.WorkbenchSourceProvider.updateActivePart(WorkbenchSourceProvider.java:478)
	at org.eclipse.ui.internal.services.WorkbenchSourceProvider.checkActivePart(WorkbenchSourceProvider.java:305)
	at org.eclipse.ui.internal.services.WorkbenchSourceProvider.checkActivePart(WorkbenchSourceProvider.java:300)
	at org.eclipse.ui.internal.services.WorkbenchSourceProvider$2.windowDeactivated(WorkbenchSourceProvider.java:270)
	at org.eclipse.ui.internal.Workbench$15.run(Workbench.java:1018)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.Workbench.fireWindowDeactivated(Workbench.java:1016)
	at org.eclipse.ui.internal.WorkbenchWindow$28.shellDeactivated(WorkbenchWindow.java:3133)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:111)
	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.Widget.sendEvent(Widget.java:1077)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1058)
	at org.eclipse.swt.widgets.Decorations.WM_ACTIVATE(Decorations.java:1647)
	at org.eclipse.swt.widgets.Shell.WM_ACTIVATE(Shell.java:2137)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4162)
	at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1598)
	at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2061)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4891)
	at org.eclipse.swt.internal.win32.OS.PeekMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.PeekMessage(OS.java:3030)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3670)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
	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:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
Comment 1 Martin Fluegge CLA 2010-12-27 14:27:17 EST
Created attachment 185846 [details]
Patch v1

Shame on me. It turned out, that the exception was there all the time. But it is only visible when "-consoleLog" is activated. It also seems that it does not have a major influence when "-consoleLog" is not set (seems to be just a print out, but I did not find where it is printed), but if it is activated it simply floods the lock and slows the application. Since the root of the problem (calling the file system) is heavily used by GMF I do not think that find can get a clean solution in a short time. 

That's why I attach the patch which is merly some sort of a hack. But it seems to work to solve our problem.

Eike, I would like to discuss this solution with you. Especially the influcence on our CDO FS. Please ping me if you find some time.
Comment 2 Eike Stepper CLA 2010-12-27 16:17:29 EST
(In reply to comment #1)
> Created an attachment (id=185846)
> Patch v1
> 
> Shame on me. It turned out, that the exception was there all the time. But it is
> only visible when "-consoleLog" is activated. It also seems that it does not
> have a major influence when "-consoleLog" is not set 

What would you expect?

> (seems to be just a print
> out, but I did not find where it is printed), but if it is activated it simply
> floods the lock 

What lock?

> and slows the application. Since the root of the problem
> (calling the file system) is heavily used by GMF I do not think that find can
> get a clean solution in a short time.

Can't the WorkspaceSynchronizer be deactivated or replaced with a stub?

> That's why I attach the patch which is merly some sort of a hack. But it seems
> to work to solve our problem.

I don't like it ;-(

> Eike, I would like to discuss this solution with you. Especially the influcence
> on our CDO FS. 

There's no current influence but it will prevent us from using the cdo: protocol at the EFS layer in the future. Worse: It's visible outside of CDO and that's a no go for an internal hack.

> Please ping me if you find some time.

Will do.
Comment 3 Eike Stepper CLA 2010-12-27 16:19:50 EST
I've no clue why API Tools complain about "DawnGMFFileStore illegally implements IFileInfo". By looking at your patch I noticed that you already have an internal package for the OM class. That package is not marked internal!
Comment 4 Eike Stepper CLA 2010-12-27 16:20:38 EST
Created attachment 185849 [details]
Patch v2 - do not commit

See commetn #2
Comment 5 Martin Fluegge CLA 2010-12-28 05:05:29 EST
> > 
> > Shame on me. It turned out, that the exception was there all the time. But it is
> > only visible when "-consoleLog" is activated. It also seems that it does not
> > have a major influence when "-consoleLog" is not set 
> 
> What would you expect?
>

Exactly what I described. I simply forgot to turn it on. That's why I said 'shame on me' ;)
 
> > (seems to be just a print
> > out, but I did not find where it is printed), but if it is activated it simply
> > floods the lock 
> 
> What lock?
> 

Darn. One of my common typos. I meant 'log'. So what I meant was that the log file and/or the console are full of unnecessary stack traces.
> > and slows the application. Since the root of the problem
> > (calling the file system) is heavily used by GMF I do not think that find can
> > get a clean solution in a short time.
> 
> Can't the WorkspaceSynchronizer be deactivated or replaced with a stub?
> 

Don't know. But I do not think so because the getFile() call is used in a static way. The only to fix this out of our scope is that GMF encapsulates all static calls in a way that we can influence the calling, e.g. be something we can change. Or the implementation of getFile() could be changed from outside. Actually the last thing was what I tried be providing a dummy FS.

> > That's why I attach the patch which is merly some sort of a hack. But it seems
> > to work to solve our problem.
> 
> I don't like it ;-(

Me neither. But I think the alternative is worse.

> 
> > Eike, I would like to discuss this solution with you. Especially the influcence
> > on our CDO FS. 
> 
> There's no current influence but it will prevent us from using the cdo:
> protocol at the EFS layer in the future. 

If we decide later that we want to use "cdo" as filesystem, we could just do it and remove this solution. In this context it is only important that we have a FS registered with the prefix 'cdo'. As far as I could see it the content is irrelevant.

>Worse: It's visible outside of CDO and
> that's a no go for an internal hack.
> 

Agreed. I would be happier if we'd find a better solution

> > Please ping me if you find some time.
> 
> Will do.

O.k. I'll wait for you :P
Comment 6 Eike Stepper CLA 2010-12-31 08:37:57 EST
This is an issue in EMF Transactions and should be addressed there.