Как автоматически запускать / запускать сервисы OSGi на платформе Eclipse - PullRequest
9 голосов
/ 13 марта 2012

Я разрабатываю приложение Eclipse RCP, которое интенсивно использует пакеты OSGi, которые предоставляют сервисы для последующего использования.Вариант использования требует, чтобы пакеты для регистрации их услуг (например, фильтров импорта) использовались позже в различных ситуациях.Пакеты OSGi собираются с помощью maven-bundle-plugin.

Как я могу сказать Equinox, чтобы автоматически запускать пакеты OSGi?Обычный подход через активатор не работает.Работает только ленивый режим, но я не могу трогать классы в неизвестных пакетах.Я прочитал спецификацию OSGi, и противоположность ленивой загрузке, нетерпеливой загрузке, не предоставляется.Есть ли еще один шанс пометить пакет для автоматической загрузки?

В Eclipse у меня есть возможность установить для Auto-Start значение true, но что мне делать в сборке дистрибутива Maven и Tycho?

Декларативные службы не работают из-за не загруженного файла org.eclipse.equinox.ds.Можно ли как-нибудь запустить его вместо Активатора?Это тоже было бы решением, но я не знаю, как построить дистрибутив или что настроить в качестве конфигурации.

Каковы лучшие практики здесь?Есть ли другие возможности?Документация по пакетам OSGi на платформе Eclipse немного тонкая.

Ответы [ 5 ]

9 голосов
/ 13 марта 2012

Вздох.Вы стали жертвой ошибочной стратегии в Eclipse, чтобы помешать (глупым) программистам увеличить время запуска.Вместо предупреждения они просто решили вообще не запускать связки.Это противоположно тому, что рекомендует OSGi :-( Пакет может активироваться только (они в основном аннулированы при запуске), когда кто-то загружает из него класс (это и есть ленивая активация.)

На сегодняшний день лучшее решениеиспользовать декларативные сервисы. Вы можете объявить немедленные сервисы, которые будут активированы при запуске, и вы можете объявить ленивые сервисы, которые активируются при использовании. Конечно, ленивые предпочтительнее (если вы не тупой программист), но обязательноСценарии использования требуют немедленного действия, как, например, сервер, который предлагает свои услуги через Интернет. Вы должны убедиться, что в вашем config.ini запущен DS.

7 голосов
/ 13 марта 2012

Вы можете использовать точку расширения org.eclipse.ui.startup в вашем плагине.Это позволяет вам указать класс IStartup, который будет вызываться при запуске пользовательского интерфейса Eclipse.Пока это класс в вашем комплекте, ваш пакет будет запущен.

Это будет означать включение файла plugin.xml, и это будет, в частности, плагин Eclipse, а не стандартный OSGi, но выможет затем использовать этот плагин для активации любого из ваших стандартных OSGi-пакетов.

4 голосов
/ 13 марта 2012

Вы были на правильном пути с декларативными услугами.Регистрация ваших служб вручную очень похожа на тяжелую работу, а поиск их безопасно может быть еще более трудоемким и сложным, чтобы получить право.Еще одним стандартом в этой области, о котором следует знать, является Blueprint, хотя я, конечно, не советую вам что-либо переписывать, если у вас есть метаданные DS.Blueprint имеет немного более приятные характеристики в очень динамичной среде и более богатую конфигурацию.(Я являюсь приверженцем одной из реализаций Blueprint, Apache Aries.) И с Blueprint, и с DS важно то, что управление вашими услугами за вас что-то еще делает.

Это оставляет нас в стороне от проблемыпочему ваши связки не запускаютсяЯ думаю, что должен быть ключ к тому, что они начинаются в Феликсе.Вы запустили консоль равноденствия и подтвердили, что все ваши пакеты установлены и исправлены?('ss', чтобы вывести список пакетов.) Вы просмотрели файл config.ini и подтвердили, что ваши пакеты перечислены, и с соответствующим начальным уровнем - или вы используете пакет автозапуска Equinox - все остальное?

0 голосов
/ 22 июля 2017

Вы можете добавить это в свой .product файл:

<configurations>
    <plugin id="my.plugin.id" autoStart="true" startLevel="4" />
</configurations>

В качестве альтернативы, откройте файл .product в Eclipse и перейдите на вкладку Конфигурация, и добавьте туда плагин с желаемым начальным уровнем..

0 голосов
/ 13 марта 2012

MANIFEST.MF имеет это:

Bundle-ActivationPolicy: lazy

Это также может быть полезно:

http://wiki.eclipse.org/Lazy_Start_Bundles#Should_I_change_to_the_new_Bundle-ActivationPolicy_Header.3F

Однако я бы сказал, что постараюсь максимально полагаться на активацию OSGI. Если нет другого способа решить вашу проблему, тогда предыдущая ссылка может помочь.

...