Una vez que una instancia de un servicio OSGi se obtenidos del contexto paquete qué que se convierta en invalidada cuando el servicio se detiene?
No, la referencia en sí no se invalida. Mientras algo dentro del contenedor lo contenga, tampoco puede ser sometido a GC.
Sin embargo, si será o no útil, depende solo de la implementación del servicio en sí, no del contenedor.
Mis pruebas iniciales muestran que la instancia de servicio se puede usar incluso después de que el paquete de servicios> se detiene, lo que contradice mi comprensión de la naturaleza dinámica de OSGi.
Las propias especificaciones indican que tales referencias no deben mantenerse, pero corresponde al implementador tener cuidado de implementar las especificaciones correctamente; significa que no hay contradicción, solo existe el hecho de que puede implementar y desplegar paquetes que no se comportan correctamente de acuerdo con las especificaciones.
supongo que esto se reduce a lo que la recuperación de un servicio (a través de ServiceTracker) de otro paquete en el contenedor OSGi en realidad no, tampoco crea una nueva instancia o se le dará un puntero a la instancia que es registrado en el contenedor?
El contenedor no crea nuevas instancias de servicios, excepto si hay un ServiceFactory involucrado (ver especificaciones). Buscar un servicio siempre debe darle un puntero a la instancia registrada en el contenedor.
¿Hay algún peligro al usar la instancia de servicio una vez que se ha detenido el servicio?
Eso solo depende de la implementación del servicio; sin embargo, al hacerlo en un paquete, crea automáticamente un paquete que no cumple con las especificaciones.
En la práctica, muchos servicios se implementan para liberar recursos y referencias y ya no responderán correctamente.
Gracias por la respuesta, por desgracia no es un definitivo sí o no como yo esperaba! –