Tengo en mente un sistema inteligente que puede elegir dinámicamente entre los servicios OSGi disponibles. Es decir, elija una implementación u otra dependiendo de algún parámetro de tiempo de ejecución. Por ejemplo, notificar a un algoritmo en ejecución que cambie a un operador después de varias iteraciones, o según el equilibrio de carga en un sistema o lo que sea.¿Cómo elegir en tiempo de ejecución entre varios servicios OSGi de una manera inteligente?
while(stopCriterion){
operator.doSomething(); //There exist many operator implementations
}
Mi primer enfoque consiste en utilizar DS para exponer los servicios y enlazar con los servicios 0..n y política dinámica. Luego, desde un componente externo inteligente, notifique al algoritmo qué servicio se usa en cada iteración (usando EventAdmin, ¿quizás?).
operator[selected].doSomething();
Esto me podría ayudar a reducir la complejidad cuando se deben ejecutar muchos experimentos con una gran cantidad de diferentes implementaciones de servicios. Además, tengo la intención de utilizar la especificación de servicios remotos con Eclipse Communication Framework para hacer investigación en algoritmos distribuidos y esas cosas, por lo que de forma dinámica aparición de nuevas implementaciones en tiempo de ejecución también podría ser posible
Sin embargo, no sé si es esto una buena idea o existe otro mecanismo mejor para seleccionar dinámicamente qué uso de la implementación. Creo que usar ServiceTracker en cambio DS no es una buena opción, pero estoy abierto a sugerencias :)
Gracias de antemano.
Hola Andy. Me gusta su idea de un servicio de selector intermedio para seleccionar la instancia apropiada :) Sin embargo, los desarrolladores de "Operadores" y "Algoritmos" probablemente no estén familiarizados con OSGi, y creo que el Selector podría confundirlos. De todos modos, encontré tu comentario una forma elegante para resolver mi problema. Si nadie me ofrece otra solución, marcaré su respuesta como "marcada" (esta es mi primera pregunta en StackOverflow, no sé si lo he podido comprobar más que una respuesta o modificar mi elección). –
No es necesario que los operadores-implementadores conozcan mucho sobre OSGi, siempre que solo implementen la interfaz correcta. En cuanto a aceptar una respuesta: no creo que puedas revisar tu elección, así que elige sabiamente. (O vea [faq] (http://stackoverflow.com/faq) para obtener más información.) –
Gracias Angelo (¡no Andy!). Su idea es genial porque Selector también puede vincular otros servicios que el "Algoritmo" usa para extraer información :) (Todavía no puedo recomendar su respuesta, necesito más reputación). –