2009-10-19 17 views
23

La nueva especificación R4.2 para OSGi describe el servicio Blueprint, para inyección de dependencias y cableado de servicio.OSGi: ¿Blueprint reemplaza los servicios declarativos?

¿Blueprint reemplaza a los servicios declarativos (que también forma parte de la especificación), o están destinados a funcionar juntos?

¿Ya está disponible Blueprint para las implementaciones populares (Felix y Equinox)?

+1

Actual toma en esto - [Blueprint o DS o qué usar?] (Http://karaf.922171.n3.nabble.com/Blueprint-or-DS-or-what-to-use-td4045845.html) – fnt

Respuesta

12

Me hice la misma pregunta y mientras discutía esto con otras personas involucradas en el tema, el tenor era que, aunque los dos se superponen en cierta medida, el caso de uso es muy diferente. DS es una solución liviana para evitar activadores y modelar dependencias de servicio declarativamente. BP es básicamente un contenedor DI que apunta a implementaciones empresariales. También es más común que los desarrolladores de Java "normales" no estén tan familiarizados con la naturaleza dinámica de OSGi (ocultando mucho detrás de los proxies).

En cuanto a la implementación, hay dos proyectos trabajando en ello (todos son independientes del contenedor y no se han lanzado oficialmente). Spring DM 2.0 proporcionará una implementación (2.0.0.M1 already contains a working implementation) y Apache como parte de su proyecto geronimo (slideshow).

3

Para mi experiencia dentro del entorno basado en Felix, DS es el único inyector de dependencia maduro y que proporciona coherencia con otras partes de las especificaciones de OSGi Compendium como ConfigAdmin.

Blueprint me parece una inclusión política de Spring DM en las especificaciones OSGi.

iPojo es una alternativa basada en anotaciones Java en lugar de descriptores XML, oculta parte de la base OSGi.

1

Si ha utilizado Spring anteriormente, los servicios de Blueprint son más familiares de usar. Los servicios declarativos no son tan potentes, pero están ampliamente adoptados en los contenedores OSGi.

0

Otro problema es que los servicios blueprint -en la medida de lo sé- están todos presentes en un mismo contenedor, el anteproyecto container- mientras que los servicios declarativos se ponen a disposición de los paquetes que hacen referencia a ellos. Especialmente con Equinox esto da como resultado un comportamiento diferente. DS debe usarse sobre blueprint cuando se quiere adherir al estricto enfoque de carga de clases que defiende Equinox.

Cuestiones relacionadas