OSGi: заменяет ли Blueprint декларативные услуги?
В новой спецификации R4.2 для OSGi описывается служба Blueprint, для впрыска зависимостей и проводки обслуживания.
Использует ли Blueprint Declarative Services (который все еще входит в спецификацию),
или они предназначены для совместной работы?
Является ли Blueprint уже доступным для популярных реализаций (Felix и Equinox)?
Ответы
Ответ 1
Я задал себе тот же вопрос, и, обсуждая это с другими участниками этой темы, тенор заключался в том, что, хотя оба они частично перекрываются, прецедент, когда использовать, что очень отличается. DS - это легкое решение, позволяющее декларативно исключать активаторы и моделировать сервисные зависимости. BP в основном представляет собой контейнер DI, предназначенный для развертывания предприятий. Это также более распространено для "обычных" разработчиков Java, не знакомых с динамической природой OSGi (скрывающей много за прокси).
Реализация мудрая, над ней работают два проекта (все они являются агностиками, а не официально выпущены). Spring DM 2.0 будет обеспечивать реализацию (2.0.0.M1 уже содержит рабочую реализацию), а также Apache как часть его проект geronimo (слайд-шоу).
Ответ 2
Для моего опыта в среде на основе Felix DS является единственным инжектором зависимостей, который является зрелым enougth и обеспечивает согласованность с другими частями спецификаций OSGi Compendium, таких как ConfigAdmin.
Концепция кажется мне политическим включением Spring DM в спецификации OSGi.
iPojo - альтернатива на основе аннотаций Java вместо дескрипторов XML, которая скрывает часть основы OSGi.
Ответ 3
Если вы раньше использовали Spring, лучше использовать службы Blueprint. Декларативные услуги не столь мощны, но широко применяются в контейнерах OSGi.
Ответ 4
Другая проблема заключается в том, что сервисные службы, насколько я знаю, все присутствуют в одном контейнере, контейнере чертежа, тогда как декларативные услуги доступны в пакетах, которые ссылаются на них. Особенно с Equinox это приводит к поведению. DS следует использовать над планом, если вы хотите придерживаться строгого подхода к загрузке классов, который защищает равноденствие.