I am attempting to run an Eclipse 3.x application using Equinox in Neon as initiated in this question.
It appears that my remaining issue is that the LogReaderService appears to not be available, as the second line below in org.eclipse.core.internal.runtime.InternalPlatform.getLog() appears to throw a NullPointerException:
ExtendedLogReaderService logReader = logReaderTracker.getService();
logReader.addLogListener(result, result);
An implementation of this class can be found in org.eclipse.osgi, which I am launching the application with. For whatever reason, though, the service is null, which causes a number of plug-ins to throw exceptions when logging since many of the plug-ins rely on getting the Logging service from the Activator.
Since org.eclipse.osgi contains the implementation in its internals, I assumed that it would also register the service. That does not appear to be the case. I have also tried including log4j and org.apache.felix.log and neither appear to resolve this problem.
There must be something simple that is missing here to get the LogService to start? Here's the stack trace:
Caused by: java.lang.ClassNotFoundException: An error occurred while automatically activating bundle org.eclipse.core.resources (44).
at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:116)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:529)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:325)
at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:345)
at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:36)
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:419)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:372)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:364)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:161)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 20 more
Caused by: org.osgi.framework.BundleException: Exception in org.eclipse.core.resources.ResourcesPlugin.start() of bundle org.eclipse.core.resources.
at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:795)
at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:724)
at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:932)
at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:309)
at org.eclipse.osgi.container.Module.doStart(Module.java:581)
at org.eclipse.osgi.container.Module.start(Module.java:449)
at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:470)
at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107)
... 29 more
Caused by: java.lang.NullPointerException
at org.eclipse.core.internal.runtime.InternalPlatform.getLog(InternalPlatform.java:353)
at org.eclipse.core.runtime.Platform.getLog(Platform.java:976)
at org.eclipse.core.internal.utils.Policy.log(Policy.java:159)
at org.eclipse.core.internal.resources.Workspace.setCrashed(Workspace.java:2302)
at org.eclipse.core.internal.resources.SaveManager.restoreSnapshots(SaveManager.java:963)
at org.eclipse.core.internal.resources.SaveManager.restore(SaveManager.java:720)
at org.eclipse.core.internal.resources.SaveManager.startup(SaveManager.java:1587)
at org.eclipse.core.internal.resources.Workspace.startup(Workspace.java:2399)
at org.eclipse.core.internal.resources.Workspace.open(Workspace.java:2156)
at org.eclipse.core.resources.ResourcesPlugin.start(ResourcesPlugin.java:464)
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:774)
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:767)
... 36 more
I also added
Require-Capability: osgi.service;filter:="(objectClass=org.osgi.service.log.LogService)";effective:=active
To one of the dependent bnd files. This did not appear to solve the problem.
I have found numerous examples of how to listen for the LogService... I'm not seeing how to start the ExtendedLogService.
LogService
nulls issue by registering dummy ExtendedLogService
implementations.
The problem has been resolved (finally), revisiting this now that our build system is in place the solution was likely that osgi.enterprise
was not a Required-Bundle
which also caused caused our OSGI-JDBC services to not work properly when testing the deployed target platforms.
Additionally, our primary RCP plug-in (containing the Application
class, etc.) did not have a Bundle-ActivationPolicy: lazy
clause in the *.bnd
files used to generate the MANIFEST.MF
file which lead to some other problems.
Just in case anyone else runs into such problems.