Mi equipo está tratando de desarrollar un nuevo sistema basado en OSGi, y ahora tenemos más de 50 paquetes y contando. El problema es que hay una dependencia entre los paquetes. Por ejemplo, cuando se inicia el paquete A, se registrará un servicio en OSGi, y cuando se inicie el paquete B, usará ese servicio. Por lo tanto, necesito el inicio del paquete A antes que el paquete B. Para que esto ocurra, establezco el nivel de inicio del paquete A menor que el paquete B.¿Es razonable usar diferentes niveles de inicio para administrar las dependencias entre los paquetes OSGi?
Intentamos utilizar ServiceTracker para evitar establecer niveles de inicio, pero cuando los servicios cuentan cada vez más hasta se vuelve difícil de administrar y comprender todo el sistema.
Sin embargo, he encontrado este artículo en Internet: OSGi and Start Levels. No estoy seguro de que con dos frases en ella:
- orden de salida en el nivel de inicio es indeterminado!
- En general, al trabajar con niveles de inicio, nunca dependa de la orden de inicio. Piense en los niveles de inicio como un problema de gestión, no como un problema de tiempo de desarrollo.
¿Significa que el nivel de inicio no decidirá la orden de inicio? Entonces, cuando debería usarlo?
¿Es razonable usar diferentes niveles de inicio para administrar las dependencias entre los paquetes OSGi?
Es posible hacer que todos los paquetes sean un módulo dinámico (use ServiceTracker para rastrear todos los servicios que utiliza), pero lleva más tiempo y demanda desarrolladores senior, y el sistema se vuelve difícil de depurar.
Mi equipo ha utilizado niveles de inicio para problemas similares. Es una excelente manera de buscar problemas y es una solución útil a corto plazo si no tienes tiempo para solucionar el problema subyacente de inmediato. – Jon7
+1 a la respuesta de rsteele. Según el orden de inicio, se presenta una fragilidad extrema. Otro caso de uso para los niveles de inicio es la optimización. Sus paquetes siempre deben * TRABAJAR * independientemente del orden en el que se inicien ... sin embargo, a veces un paquete puede necesitar más o menos trabajo dependiendo de su orden de inicio. Para que pueda utilizar los niveles de inicio para optimizar el rendimiento de su aplicación, simplemente no dependa de ellos para la funcionalidad real. –
Gracias Neil. No había considerado el problema de la eficiencia, pero tiene mucho sentido. –