Community
Participate
Working Groups
The ant task implementation bundle of Epsilon (org.eclipse.epsilon.workflow) ultimately depends on the Eclipse UI and requires an Eclipse workbench. This does not seem right, given that Ant does not assume the presence of either a workbench or a graphical user interface. It blocks the use of Epsilon workflow in OSGI servers and CI. One trace is like this: org.eclipse.epsilon.workflow -> org.eclipse.epsilon.common.dt -> org.eclipse.debug.ui -> org.eclipse.ui -> org.eclipse.equinox.preferences -> requires workbench to be present, as seen below The issue seems to be that the workflow depends on a design-time artifact. I would assume that it should be possible to rely on a runtime artifact. !SESSION 2021-04-30 12:11:25.711 ----------------------------------------------- eclipse.buildId=unknown java.version=11.0.11 java.vendor=Ubuntu BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_AU Command-line arguments: -dev file:/home/jg/workspaces/java/.metadata/.plugins/org.eclipse.pde.core/Start Webserver/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog -console !ENTRY org.eclipse.equinox.preferences 4 2 2021-04-30 12:11:28.309 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.equinox.preferences". !STACK 0 java.lang.IllegalStateException: Workbench has not been created yet. at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:102) at org.eclipse.debug.internal.ui.DebugUIPreferenceInitializer.setThemeBasedPreferences(DebugUIPreferenceInitializer.java:219) at org.eclipse.debug.internal.ui.DebugUIPreferenceInitializer.initializeDefaultPreferences(DebugUIPreferenceInitializer.java:88) at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper$1.run(PreferenceServiceRegistryHelper.java:307) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.runInitializer(PreferenceServiceRegistryHelper.java:310) at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.applyRuntimeDefaults(PreferenceServiceRegistryHelper.java:134) at org.eclipse.core.internal.preferences.PreferencesService.applyRuntimeDefaults(PreferencesService.java:374) at org.eclipse.core.internal.preferences.DefaultPreferences.applyRuntimeDefaults(DefaultPreferences.java:225) at org.eclipse.core.internal.preferences.DefaultPreferences.load(DefaultPreferences.java:279) at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:370) at org.eclipse.core.internal.preferences.EclipsePreferences.internalNode(EclipsePreferences.java:624) at org.eclipse.core.internal.preferences.EclipsePreferences.node(EclipsePreferences.java:767) at org.eclipse.core.internal.preferences.AbstractScope.getNode(AbstractScope.java:41) at org.eclipse.core.runtime.preferences.DefaultScope.getNode(DefaultScope.java:77) at org.eclipse.ui.preferences.ScopedPreferenceStore.getDefaultPreferences(ScopedPreferenceStore.java:222) at org.eclipse.ui.preferences.ScopedPreferenceStore.getPreferenceNodes(ScopedPreferenceStore.java:251) at org.eclipse.ui.preferences.ScopedPreferenceStore.internalGet(ScopedPreferenceStore.java:389) at org.eclipse.ui.preferences.ScopedPreferenceStore.getString(ScopedPreferenceStore.java:433) at org.eclipse.debug.internal.ui.launchConfigurations.PerspectiveManager.initPerspectives(PerspectiveManager.java:988) at org.eclipse.debug.internal.ui.launchConfigurations.PerspectiveManager.startup(PerspectiveManager.java:286) at org.eclipse.debug.internal.ui.DebugUIPlugin.start(DebugUIPlugin.java:548) at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:814) at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1) at java.base/java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:806) at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:763) at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1012) at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:366) at org.eclipse.osgi.container.Module.doStart(Module.java:605) at org.eclipse.osgi.container.Module.start(Module.java:468) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1845) at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1838) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1781) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1743) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1665) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345) !ENTRY org.eclipse.debug.ui 4 0 2021-04-30 12:11:28.326 !MESSAGE FrameworkEvent ERROR !STACK 0 org.osgi.framework.BundleException: Exception in org.eclipse.debug.internal.ui.DebugUIPlugin.start() of bundle org.eclipse.debug.ui. at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:835) at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:763) at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1012) at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:366) at org.eclipse.osgi.container.Module.doStart(Module.java:605) at org.eclipse.osgi.container.Module.start(Module.java:468) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1845) at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1838) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1781) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1743) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1665) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345) Caused by: java.lang.IllegalStateException: Workbench has not been created yet. at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:102) at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.startup(LaunchingResourceManager.java:546) at org.eclipse.debug.internal.ui.DebugUIPlugin.getLaunchingResourceManager(DebugUIPlugin.java:341) at org.eclipse.debug.internal.ui.DebugUIPlugin.start(DebugUIPlugin.java:550) at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:814) at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1) at java.base/java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:806) ... 14 more Root exception: java.lang.IllegalStateException: Workbench has not been created yet. at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:102) at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.startup(LaunchingResourceManager.java:546) at org.eclipse.debug.internal.ui.DebugUIPlugin.getLaunchingResourceManager(DebugUIPlugin.java:341) at org.eclipse.debug.internal.ui.DebugUIPlugin.start(DebugUIPlugin.java:550) at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:814) at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1) at java.base/java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:806) at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:763) at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1012) at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:366) at org.eclipse.osgi.container.Module.doStart(Module.java:605) at org.eclipse.osgi.container.Module.start(Module.java:468) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1845) at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1838) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1781) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1743) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1665) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345) osgi> !ENTRY org.eclipse.osgi 4 0 2021-04-30 12:11:28.519 !MESSAGE Bundle org.eclipse.debug.ui_3.14.800.v20210222-1101 [134] is not active.
This is due to a flawed assumption that OSGi === Eclipse. To address this we should introduce an OsgiHost (which works in an OSGi envrionment but does not assume a running Eclipse instance) in addition to the EclipseHost (EclipseHost would probably extend OsgiHost), and make dependencies to the *.dt plugins optional. Any relevant contributions would be much appreciated!
In [1] I added a new test suite (WorkflowPluggedInHeadlessTestSuite) which executes a simple workflow that loads an XML-based model and runs an EOL program against. The new test suite seems to be working fine when I run it as a JUnit Plug-in Test with the application in the Main tab set to "No Application - Headless Mode". Any thoughts on how I can replicate the issue you're encountering would be more than welcome. [1] https://git.eclipse.org/c/epsilon/org.eclipse.epsilon.git/commit/?id=bda5e5b77eb5c35f972730374bc16eea73389b7d