Community
Participate
Working Groups
I started a new i0505, closed the intro page and the intro view and exited. started again and looked at the list of plugins acivated. update.core and update.scheduler were activated but it is unclear why. Below are the stack traces for their activation. I see that the scheduler is listed as an automatic startup plugin but since I do not have scheduling turned on, activation is not required. Some other mechnaism (perhaps expressions) should be found. Activating plugin: org.eclipse.update.core Plugin activation stack: org.eclipse.update.core Class loading stack: org.eclipse.update.search.IUpdateSearchResultCollector org.eclipse.update.internal.scheduler.AutomaticUpdatesJob Stack trace: java.lang.Throwable at org.eclipse.osgi.framework.stats.StatsManager.traceActivate (StatsManager.java:149) at org.eclipse.osgi.framework.stats.StatsManager.startActivation (StatsManager.java:125) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker (BundleHost.java:394) at org.eclipse.osgi.framework.internal.core.AbstractBundle.start (AbstractBundle.java:298) at org.eclipse.core.runtime.adaptor.EclipseClassLoader.findLocalClass (EclipseClassLoader.java:110) at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass (BundleLoader.java:368) at org.eclipse.osgi.framework.internal.core.BundleLoader.requireClass (BundleLoader.java:333) at org.eclipse.osgi.framework.internal.core.BundleLoader.findRequiredClass (BundleLoader.java:911) at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass (BundleLoader.java:396) at org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.loadClass (AbstractClassLoader.java:93) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:537) at org.eclipse.osgi.framework.internal.defaultadaptor.DefaultClassLoader.defineClas s(DefaultClassLoader.java:292) at org.eclipse.core.runtime.adaptor.EclipseClassLoader.defineClass (EclipseClassLoader.java:203) at org.eclipse.osgi.framework.internal.defaultadaptor.DefaultClassLoader.findClassI mpl(DefaultClassLoader.java:281) at org.eclipse.osgi.framework.internal.defaultadaptor.DefaultClassLoader.findClass (DefaultClassLoader.java:172) at org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.findLocalClass (AbstractClassLoader.java:220) at org.eclipse.core.runtime.adaptor.EclipseClassLoader.findLocalClass (EclipseClassLoader.java:60) at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass (BundleLoader.java:368) at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass (BundleLoader.java:399) at org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.loadClass (AbstractClassLoader.java:93) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:1610) at java.lang.Class.getConstructor0(Class.java:1922) at java.lang.Class.newInstance0(Class.java:278) at java.lang.Class.newInstance(Class.java:261) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio n(ConfigurationElement.java:141) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio n(ConfigurationElement.java:124) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio n(ConfigurationElement.java:113) at org.eclipse.ui.internal.WorkbenchPlugin$1.run (WorkbenchPlugin.java:196) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:51) at org.eclipse.ui.internal.WorkbenchPlugin.createExtension (WorkbenchPlugin.java:193) at org.eclipse.ui.internal.EarlyStartupRunnable.getExecutableExtension (EarlyStartupRunnable.java:109) at org.eclipse.ui.internal.EarlyStartupRunnable.run (EarlyStartupRunnable.java:61) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:607) at org.eclipse.core.runtime.Platform.run(Platform.java:668) at org.eclipse.ui.internal.Workbench$15.run(Workbench.java:1259) at java.lang.Thread.run(Thread.java:534) Activating plugin: org.eclipse.update.scheduler Plugin activation stack: org.eclipse.update.scheduler org.eclipse.jface.text Class loading stack: org.eclipse.update.internal.scheduler.SchedulerStartup org.eclipse.jface.text.ITextSelection Stack trace: java.lang.Throwable at org.eclipse.osgi.framework.stats.StatsManager.traceActivate (StatsManager.java:149) at org.eclipse.osgi.framework.stats.StatsManager.startActivation (StatsManager.java:125) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker (BundleHost.java:394) at org.eclipse.osgi.framework.internal.core.AbstractBundle.start (AbstractBundle.java:298) at org.eclipse.core.runtime.adaptor.EclipseClassLoader.findLocalClass (EclipseClassLoader.java:110) at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass (BundleLoader.java:368) at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass (BundleLoader.java:399) at org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.loadClass (AbstractClassLoader.java:93) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at org.eclipse.osgi.framework.internal.core.BundleLoader.loadClass (BundleLoader.java:304) at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass (BundleHost.java:336) at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass (AbstractBundle.java:1315) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio n(ConfigurationElement.java:131) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio n(ConfigurationElement.java:124) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio n(ConfigurationElement.java:113) at org.eclipse.ui.internal.WorkbenchPlugin$1.run (WorkbenchPlugin.java:196) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:51) at org.eclipse.ui.internal.WorkbenchPlugin.createExtension (WorkbenchPlugin.java:193) at org.eclipse.ui.internal.EarlyStartupRunnable.getExecutableExtension (EarlyStartupRunnable.java:109) at org.eclipse.ui.internal.EarlyStartupRunnable.run (EarlyStartupRunnable.java:61) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:607) at org.eclipse.core.runtime.Platform.run(Platform.java:668) at org.eclipse.ui.internal.Workbench$15.run(Workbench.java:1259) at java.lang.Thread.run(Thread.java:534) Activating plugin: org.eclipse.jface.text Plugin activation stack: org.eclipse.jface.text Class loading stack: org.eclipse.jface.text.ITextSelection Stack trace: java.lang.Throwable at org.eclipse.osgi.framework.stats.StatsManager.traceActivate (StatsManager.java:149) at org.eclipse.osgi.framework.stats.StatsManager.startActivation (StatsManager.java:125) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker (BundleHost.java:394) at org.eclipse.osgi.framework.internal.core.AbstractBundle.start (AbstractBundle.java:298) at org.eclipse.core.runtime.adaptor.EclipseClassLoader.findLocalClass (EclipseClassLoader.java:110) at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass (BundleLoader.java:368) at org.eclipse.osgi.framework.internal.core.BundleLoader.requireClass (BundleLoader.java:333) at org.eclipse.osgi.framework.internal.core.BundleLoader.findRequiredClass (BundleLoader.java:906) at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass (BundleLoader.java:396) at org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.loadClass (AbstractClassLoader.java:93) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager.selecti onChanged(SelectedResourceManager.java:129) at org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager.windowA ctivated(SelectedResourceManager.java:76) at org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager.<init> (SelectedResourceManager.java:47) at org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager.getDefa ult(SelectedResourceManager.java:59) at org.eclipse.debug.internal.ui.DebugUIPlugin$2.run (DebugUIPlugin.java:345) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages (Synchronizer.java:106) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:2571) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2276) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1353) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1324) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench (Workbench.java:243) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:140) at org.eclipse.ui.internal.ide.IDEApplication.run (IDEApplication.java:90) at org.eclipse.core.internal.runtime.PlatformActivator$1.run (PlatformActivator.java:298) at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:249) at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:126) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.eclipse.core.launcher.Main.basicRun(Main.java:269) at org.eclipse.core.launcher.Main.run(Main.java:722) at org.eclipse.core.launcher.Main.main(Main.java:706)
The update.core is pre-req of the scheduler, so I assume it gets started as a result of the scheduler starting. I don't control starting of the update.scheduler, all I do is provide the startup extension point. Is there anything else needed?
You need to ensure that your function behaves well. If the startup extension is not suiting your needs, a different way must be found. As for the prereq'ing, prereqs are not started just because they are prereq'd. They are started because classes are loaded. Loading fewer (i.e., no) classes can improve things. Doing less on activation also helps.
I made a simple change, to avoid having the Update core started unless automatic updates are enabled. The startup code for automatic update checks the plugin preferences (where we save whether automatic updates is enabled) and returns if disabled. Otherwise it schedule a job (at which point update.core is started). Does this good enough? Are there better mechanisms to deal with this scenario?
not sure what all the startup extension allows. Ideally it would allow something along the lines of the expressions stuff to be used in determining if a plugin should actually be activated. This way people could say "yes, I would like to be considered for activation and here is a predicate to decide if you should try" Failing some existing mechanism, update should do the absolute bare minimum if scheduling is not on and UI should take an item for post 3.0 to offer more flexibility here. CC Nick for comments on the startup mechanism
Dorian, scheduler should first check the value of the master on/off switch. If off, it should exit right away - no tasks should be scheduled and no classes that will cause Update Core to load should be instantiated.
It does (see comment #3)
The startup extension point does not currently support conditional startup. I've filed bug 61780 for the conditional startup enhancement.
Consider for post 3.0
[LATER->WONTFIX] The "LATER" bugzilla resolution is being removed so reopening to mark as WONTFIX.