OSGi paquete (o servicio) - cómo registrarse para un determinado período de tiempo?

StackOverflow https://stackoverflow.com/questions/4471943

  •  11-10-2019
  •  | 
  •  

Pregunta

Búsqueda no me dio una pista, ¿cómo puedo actuar con la siguiente situación:

Me encantaría tener 2 implementaciones OSGI de la misma interfaz: una es regular, el otro debe trabajar (ser activo / presente / lo que sea) en el período de tiempo determinado (f.e durante semanas de Navidad:))

El objetivo principal es llamar a la mismo interfaz sin especificar banderas / propiedades / sin conmutación manual de Ranking . Aplicación de alguna manera debe cambiar la implementación de este período especial, haciendo otro trabajo / regular antes y después:)

Soy un novato, tal vez yo no entiendo por completo el concepto OSGi en algún lugar, lo siento por la de déme un toque o un enlace, lo siento por mi Inglés.

Uso de Felix / Equinox con Apache Aries.

¿Fue útil?

Solución

Yo todavía no han visto un contenedor OSGi que en un marco de apoyo a nivel de fecha / hora disponibilidad de servicios basada.

Si yo fuera tú, simplemente deje caer un servicio de proxy delante de las dos implementaciones de interfaz y poner la invocación de un servicio basado en la lógica de la fecha en ese país.

Otros consejos

El editor de un servicio puede registrar y eliminar ese servicio toda vez que quiera utilizar la API normal. Si así lo decide, entonces puede hacerlo de acuerdo con algún horario regular.

Si hay otra instancia de servicio que está disponible de forma continua, entonces el consumidor del servicio a veces verá dos instancias del servicio y, a veces ver uno. Cuando sólo hay una instancia disponible, entonces es trivial para obtener sólo esa instancia. Cuando hay dos instancias, entonces usted necesita una manera de asegurarse de que obtiene la instancia "preferido". La propiedad SERVICE_RANKING es una manera de hacer esto. El método getService de un ServiceTracker normales siempre devolverá el servicio de mayor puntuación, por lo que este aparecería para satisfacer sus necesidades.

No creo que no hay ningún apoyo marco para lo que está pidiendo.

Si tienen la intención de evitar los filtros de servicios, puede probar esto.

Implementar un PolicyService. Este servicio es el encargado de decidir qué instancia de su servicio debe ser registrado en un punto dado en el tiempo. Cuando es hora de que el servicio de la política para cambiar las implementaciones, sólo utiliza las API de registro / anular el registro como de costumbre. Usted implementación del servicio de la política puede leer en un archivo de configuración que especifica el intervalo de fechas para la implementación del servicio de mapeo. Esto le permitirá añadir un nuevo comportamiento modificando el archivo de configuración e instalación de un nuevo paquete con el nuevo servicio.

Estoy de acuerdo con Neil que un servicio sólo debe publicarse si en realidad se puede invocar. Mi solución a este problema sería tener todos los productores de servicios sean dependientes de una "dependencia restricción de tiempo". Mientras que tal dependencia no está disponible en los marcos de dependencia estándar (como declarativa Servicios, Blueprint, iPOJO) se implementa fácilmente con el Apache Felix Dependencia Manager, que le permite crear sus propios tipos de dependencias. Nota que la escritura de una nueva dependencia tal vez es un poco de trabajo, pero si se trata de una pieza central de su solicitud creo que vale la pena. consumidores de servicios no requieren ninguna lógica especial, que sólo servirían para invocar el servicio que estaba allí.

Ok, lo que finalmente he hecho ...

  1. implementa un paquete despachador común - y llamar a cualquiera de los servicios únicamente a través de él (por lo tanto, cron no se necesita, cuando la llamada es a la carta)
  2. Cuando solicitan despachador obtiene - se busca para la interfaz en su propia caché y -
  3. Cuando hay> 1 servicio con la misma clasificación y ambos son iguales (registrado) - entonces
  4. Dispatcher resuelve servicio necesario a través del propio anotación @TimigPolicy escrito con "de" y "a" campos
  5. Para el servidor dado nueva fecha y hora () - regresa despachador instancia de servicio adecuada

Mucho trabajo, debería decir :) pero funciona casi perfecto:)

Gracias a todos por darme consejos, fue muy útil !!!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top