ExtendedLogService не запускается
Я пытаюсь запустить приложение Eclipse 3.x, используя Equinox в Neon, как описано в этом вопросе.
Похоже, что моя оставшаяся проблема заключается в том, что LogReaderService, по-видимому, недоступен, так как вторая строка ниже в org.eclipse.core.internal.runtime.InternalPlatform.getLog() выдает исключение NullPointerException:
ExtendedLogReaderService logReader = logReaderTracker.getService();
logReader.addLogListener(result, result);
Реализация этого класса может быть найдена в org.eclipse.osgi, с которым я запускаю приложение. Однако по какой-либо причине служба имеет значение null, что приводит к тому, что ряд подключаемых модулей выдает исключения при ведении журнала, поскольку многие подключаемые модули зависят от получения службы ведения журнала от активатора.
Поскольку org.eclipse.osgi содержит реализацию во внутренних органах, я предполагал, что она также зарегистрирует службу. Это не похоже на случай. Я также попытался включить log4j и org.apache.felix.log, и ни один из них не решил эту проблему.
Должно быть что-то простое, чего здесь не хватает, чтобы запустить LogService? Вот трассировка стека:
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
Я также добавил
Require-Capability: osgi.service;filter:="(objectClass=org.osgi.service.log.LogService)";effective:=active
К одному из зависимых файлов bnd. Это не казалось, чтобы решить проблему.
Изменить: Поскольку OSGI Framework установлен в org.eclipse.osgi в файле bndrun, это препятствует инициализации регистрации? Я также попытался добавить org.apache.commons.logging, а также osgi.enroute.equinox.log.adapter, и я все еще получаю NPE, когда что-либо пытается войти. Пакет org.eclipse.osgi уже считается работающим к моменту активации плагинов RCP... пока нет ExtendedLogReaderService. Нужно ли мне найти способ установить Felix в качестве основной среды выполнения, чтобы org.eclipse.osgi мог запускаться с помощью инфраструктуры для регистрации ExtendedLogReaderServiceImpl?
Я нашел множество примеров того, как слушать LogService... Я не вижу, как запустить ExtendedLogService.
Редактировать 2: я могу подавить
LogService
пустые проблемы при регистрации манекена ExtendedLogService
Реализации.
1 ответ
Проблема была решена (наконец-то), и теперь мы вернемся к этому, когда наша система сборки уже готова, и решение, вероятно, osgi.enterprise
не был Required-Bundle
Это также вызвало неправильную работу наших служб OSGI-JDBC при тестировании развернутых целевых платформ.
Кроме того, наш основной плагин RCP (содержащий Application
класс и т. д.) не было Bundle-ActivationPolicy: lazy
пункт в *.bnd
файлы, используемые для генерации MANIFEST.MF
файл, который приводит к некоторым другим проблемам.
На случай, если кто-то еще столкнется с такими проблемами.