2012-06-11 12 views
10

Estoy trabajando en el servicio OSGi ahora mismo, y tengo una pregunta sobre el uso de los servicios en OSGi. Hay alguna forma diferente de registrar el servicio del usuario. ¿Alguien puede explicar la diferencia entre el rastreador de servicios OSGi y los servicios declarativos? ¿Cuál es mejor?Qué es diferente entre el rastreador de servicios OSGi y los servicios declarativos

+0

Gracias a todos. Toda tu respuesta es útil. Pero solo puedo elegir uno –

Respuesta

14

En OSGi, el ServiceTracker es una forma programática de adquirir una referencia a un servicio. es decir, usted escribe el código ServiceTracker que "rastrea" una referencia a otro servicio y le permite usarlo cuando esté disponible.

En cambio, los servicios declarativos (DS), le permite declarar las dependencias que se inyectan en su componente. DS es, como tal, una forma de inyección de dependencia. El gráfico de dependencia entre servicios, junto con su orden de inicio determinará cuándo se iniciará su servicio. La propiedad de cardinalidad en una definición de DS le permite declarar si la relación es obligatoria (1..1), múltiple con al menos uno (1..n), opcional (0..1) o múltiple opcional (0..n) Cuando declara relaciones obligatorias, su servicio no se iniciará hasta que se satisfagan todas las dependencias. Cuando declara una relación opcional, su servicio se iniciará independientemente del estado de la dependencia, pero debe tener cuidado en el código de que la referencia a su servicio puede ser nula.

Desde una perspectiva práctica, ServiceTracker es una gran cantidad de código repetitivo para escribir y mantener. Dada la naturaleza dinámica de los servicios OSGi, hay muchos estados permitidos por las especificaciones OSGi que deben tenerse en cuenta. DS le dará una forma limpia de declarar y mantener sus dependencias. Las dependencias bien definidas lo ayudarán a mantener la coherencia de su entorno de tiempo de ejecución.

+1

DS - Servicios Declarativos – Robin

+0

@Robin Siempre mezclo ese acrónimo en mi cabeza - corregido. – maasg

3

Un servicio OSGi Rastreador te permite registrar detectores para ciertos servicios, por lo que puede reaccionar cuando que el servicio esté disponible.

Servicios declarativos, por el contrario, utiliza implícitamente el rastreador de servicios para retrasar la ejecución de su código de activación paquete hasta que las dependencias de servicios han sido resueltos.

4

Servicios declarativos (DS) son muy fáciles de usar y se evitan algunos de los código repetitivo asociado con el uso de ServiceTracker. Si usa OSGI simple, solo con ServiceTracker, debe ocuparse de algunos aspectos de la naturaleza dinámica de los servicios OSGI. Los servicios pueden ir y venir y su componente necesita lidiar con eso. Si usa DS, la mayor parte de este trabajo ya está hecho. Solo necesita definir referencias a otros servicios y DS inyectará esas referencias cuando estén disponibles. DS activará su componente cuando se cumplan los requisitos del componente.

Si utiliza anotaciones Apache Felix SCR o las anotaciones proporcionadas por bndlib También puede evitar escribir el código XML requerido por Servicios declarativos. Recientemente, el grupo OSGI también publicó sus anotaciones. Creo que los proporcionados por bndlib y los de OSGI son muy similares y estoy casi seguro de que la herramienta Bnd puede procesar ambos.

Utilicé anotaciones Apache SCR hace algún tiempo, pero ahora prefiero usar bndlib porque incluye anotaciones para Metatype y algunas clases que hacen que la implementación de un servicio administrado sea mucho más fácil. Metatype es una especificación relacionada con los servicios administrados. Básicamente, proporciona metadatos que pueden ser utilizados por las implementaciones de administración de configuración para proporcionar una interfaz más fácil de usar para la configuración de un componente.

Conozco otras dos alternativas: iPojo y Blueprint.

iPojo es bastante potente y con muchas funciones. Resume la mayoría de las cosas de OSGI e incluye algunas características agradables como la compatibilidad con EventAdmin y el soporte de ConfigAdmin.

Utilicé Blueprint un poco, pero debido al uso excesivo de xml no me gusta tanto. Creo que podrías decir que Blueprint es como Spring para OSGI.

Cuestiones relacionadas