felix - osgi service
Cuál es la diferencia entre los componentes OSGi y los servicios (2)
Los "componentes" se definen de forma menos formal que los servicios.
Un servicio es cualquier objeto que está registrado en el Registro de servicios OSGi y puede buscarse usando su nombre (s) de interfaz. El único requisito previo es que un servicio debe implementar alguna interfaz ... cualquier interfaz. Por ejemplo, podría registrar un objeto ejecutable bajo la interfaz java.lang.Runnable
, y los clientes podrían buscarlo usando ese nombre de interfaz.
Un "componente" tiende a ser un objeto cuyo ciclo de vida se gestiona, generalmente mediante un marco de componentes como los Servicios Declarativos (DS), Blueprint o iPOJO. Consulte esta página en OSGi Community Wiki para obtener una descripción de los diferentes marcos de componentes disponibles.
Un componente puede tener cualquiera de las siguientes características, en combinación o solo:
- Un componente puede iniciarse y detenerse ; esto se consideraría un componente "activo", aunque también es un término informal. Un componente que no necesita iniciarse o detenerse se llama pasivo.
- Un componente puede publicarse como un servicio OSGi.
- Un componente puede vincularse o consumir servicios OSGi.
En general, el uso de un marco de componentes es la forma más fácil de trabajar con servicios OSGi porque el marco administrará el enlace a los servicios que desea consumir. Por ejemplo, podría decir que su componente "depende de" un servicio en particular, en cuyo caso el componente solo se creará y activará cuando ese servicio esté disponible, y también se destruirá cuando el servicio deje de estar disponible.
En OSGi, ¿cuáles son las principales diferencias entre Componentes vs Servicios? Según entiendo, todos los Servicios deben ser Componentes, pero no todos los Componentes deben ser servicios.
¿Cuáles son los beneficios de usar uno sobre el otro con casos de uso de muestra?
EDITAR: Ver la respuesta de Neil Bartlett. He respondido bastante específicamente a los Servicios Declarativos, pero es más sutil de lo que he dicho incorrectamente aquí.
En resumen: los componentes son consumidores de servicios, no proveedores. Los servicios son una extensión de los componentes que se registran como proveedores de servicios.
Un componente tiene un ciclo de vida (de / activate y modify), gestión de dependencia del servicio (un / bind).
Un servicio es una extensión de un componente; a través del registro de servicios, ofrece sus servicios a otros paquetes, etc. mediante la publicación de interfaces y propiedades implementadas.
El caso de uso para Servicios es obvio, los casos típicos para usar Componentes requieren la administración del ciclo de vida, la configuración o las dependencias del servicio, pero no necesitan / desean publicar el Componente para el uso entre paquetes.