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
Respuesta
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.
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.
y cuál es mejor?
Es bastante simple de crear y utilizar algunos servicios declarativos, especialmente con anotaciones Apache Felix SCR y los plugins Apache Felix SCR Maven:
https://felix.apache.org/site/scr-annotations.html
https://felix.apache.org/site/apache-felix-maven-scr-plugin-use.html
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.
- 1. OSGi: ¿Blueprint reemplaza los servicios declarativos?
- 2. Integrando los servicios de Guice y OSGi
- 3. Buscar servicios OSGI por propiedades
- 4. Exportación de componentes Spring como servicios OSGi
- 5. Cómo prestación de servicios OSGi por cliente
- 6. Cómo inicio automático/inicio ansioso Servicios OSGi en plataforma Eclipse
- 7. Servicios RIA frente a los servicios WCF
- 8. ¿Qué es SOA (arquitectura orientada a servicios)?
- 9. WF, WCF y Servicios declarativos (o: ¿Qué quiere decir Microsoft con "declarativo"?)
- 10. diferencia entre servicios y receptores de difusión
- 11. Cómo comunicarse entre los servicios de Windows
- 12. ¿Qué son los servicios de WCF RIA?
- 13. ¿Qué son los servicios web RESTful?
- 14. Diferencia entre los servicios web OData y REST
- 15. ¿Qué son exactamente los "servicios de WPF"?
- 16. Compartir datos entre actividades y servicios
- 17. diferencia entre los servicios web y aplicaciones web
- 18. Servicios RIA contra servicios WCF: ¿cuál es la diferencia
- 19. ¿Cómo elegir en tiempo de ejecución entre varios servicios OSGi de una manera inteligente?
- 20. android: habilitar y servicios
- 21. Qué son los servicios web RESTful
- 22. Obtener servicios OSGi de un paquete en Sling/CQ
- 23. Servicios web de intercambio: ¿por qué ItemId no es constante?
- 24. ¿Qué es la arquitectura orientada a servicios?
- 25. Integridad referencial de datos entre servicios
- 26. ¿Cuál es la diferencia entre el localizador de servicios y el patrón de diseño de fábrica?
- 27. Diferencia entre "COM" tradicional y COM + (en servicios de componentes)
- 28. Comprender los servicios de Symfony2
- 29. Objetos y servicios de dominio
- 30. ¿Cómo descubro los servicios web RESTful?
Gracias a todos. Toda tu respuesta es útil. Pero solo puedo elegir uno –