OSGi декларативные службы или ManagedService для настройки службы?
Я только недавно наткнулся на тот факт, что декларативные сервисы в OSGi могут настроить конфигурацию компонента на требуемую, чтобы компонент получал ее при активации, устраняя разрыв между активацией и конфигурацией компонента. Я также понял, что вы можете получать обновления конфигурации через modified
-метод.
Мне кажется, что эта функциональность очень похожа на то, что обеспечивается ManagedService
интерфейс и публикация, что в качестве одной из "услуг" вы предоставляете.
Кажется, я мог полностью игнорировать ManagedService
& просто используйте инъекцию конфигурации DS.
Один из этих методов предпочтительнее другого или есть другие компромиссы, которых я не вижу?
2 ответа
Да, вы можете полностью игнорировать ManagedService
а также ManagedServiceFactory
и просто используйте компоненты декларативных сервисов. И да, я бы рекомендовал этот подход.
Просто думайте об этом как о разных уровнях абстракции. MS/MSF - это низкоуровневый API для администратора конфигурации, и он доступен, даже если у вас не запущен пакет DS. Преимущество этого заключается в том, что вы можете писать настраиваемые сервисы без зависимости от DS, что может быть желательно для определенных компонентов "системного уровня".
Однако, если вы довольны зависимостью от DS, например, от компонентов "прикладного уровня", то использование встроенной интеграции DS с config admin сделает вашу жизнь намного проще.
Несколько примеров строительства заводов декларативных услуг:
1) через администратора конфигурации: carrot-osgi-scr-factory-cm
2) через фабрику компонентов: carrot-osgi-scr-factory-ds
взгляните на тесты для вариантов использования;