ExtendedLogService似乎没有启动

问题描述 投票:0回答:1

我试图在qonxswpoi中使用Equonx在Neon中运行Eclipse 3.x应用程序。

看来我的剩余问题是LogReaderService似乎不可用,因为org.eclipse.core.internal.runtime.InternalPlatform.getLog()下面的第二行似乎抛出NullPointerException:

this question

这个类的实现可以在org.eclipse.osgi中找到,我正在使用它启动应用程序。但是,无论出于何种原因,该服务为null,这会导致许多插件在记录时抛出异常,因为许多插件依赖于从Activator获取Logging服务。

由于org.eclipse.osgi在其内部包含实现,我假设它也会注册该服务。情况似乎并非如此。我也试过包括log4j和org.apache.felix.log,似乎都没有解决这个问题。

这里必须有一些简单的东西才能启动LogService?这是堆栈跟踪:

ExtendedLogReaderService logReader = logReaderTracker.getService();
logReader.addLogListener(result, result);

我还补充道

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

其中一个从属的bnd文件。这似乎没有解决问题。


Edit: Because the OSGI Framework is set to org.eclipse.osgi in the bndrun file, is that preventing the logging from getting initialized? I have also tried adding org.apache.commons.logging as well as osgi.enroute.equinox.log.adapter and I am still getting NPEs when anything attempts to log. The org.eclipse.osgi bundle is already considered running by the time the RCP plugins get activated... yet there is no ExtendedLogReaderService. Do I need to find a way to install Felix as the Core Runtime in order to make org.eclipse.osgi able to get started by the framework in order for the ExtendedLogReaderServiceImpl to get registered?

我找到了很多关于如何监听LogService的例子......我没有看到如何启动ExtendedLogService。


Edit 2: I am able to suppress the Require-Capability: osgi.service;filter:="(objectClass=org.osgi.service.log.LogService)";effective:=active nulls issue by registering dummy LogService implementations.
java osgi eclipse-rcp equinox bndtools
1个回答
0
投票

问题已经解决(最后),现在重新审视我们的构建系统已经到位,解决方案可能是ExtendedLogService不是osgi.enterprise,这也导致我们的OSGI-JDBC服务在测试已部署的目标平台时无法正常工作。

此外,我们的主要RCP插件(包含Required-Bundle类等)在用于生成Application文件的Bundle-ActivationPolicy: lazy文件中没有*.bnd子句,这导致了一些其他问题。

以防万一其他人遇到这样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.