tutorial felix example español ejemplo compendium java osgi

java - felix - osgi service



La mejor técnica para obtener el contexto del paquete OSGi? (4)

No hay magia aquí. Necesita alguna forma de proporcionar la información a las otras clases. Por lo tanto, está disponible a través de la pila de llamadas o en algún lugar conocido (por ejemplo, estático).

Cada paquete en mi proyecto OSGi tiene su propio BundleActivator, que creo que es normal. Esto pasa el actual BundleContext, que es útil para obtener referencias de servicio y otras cosas.

Sin embargo, de las clases en mi paquete, ¿cómo puedo obtener el BundleContext? Asignarlo a un campo estático público en el BundleActivator es una mierda y pasarlo como un argumento también es una mierda. ¿Hay una manera más inteligente?


Otra alternativa es usar los servicios declarativos, que le permiten recibir el BundleContext en su método de activación. Por ejemplo, suponiendo que usa las Anotaciones Bnd para DS:

@Activate public void activate(BundleContext context) { // ... }

Sin embargo, como dijo RaduK, es mucho mejor si puedes escribir la mayoría de tu código en estilo POJO sin usar las API OSGi como BundleContext.


Una buena práctica al desarrollar paquetes OSGi en mi opinión es tratar de escribir el código OSGi lo más centralizado posible. De esta forma, si desea usar su código en un entorno que no sea OSGi, el esfuerzo de migración es mínimo.

Por lo tanto, no es una buena idea usar referencias estáticas o FrameworkUtil por todo el lugar. Ninguno de los dos está usando OSGi simple. Intente mirar iPOJO o los servicios declarativos.