OSGi – Los bundles dependen entre sí.
Tengo dos paquetes:
- Servicio de internacionalización (I18n)
- Servicio de persistencia (Base de datos)
El caso es que el paquete “I18n” utiliza los servicios de la base de datos para almacenar “Textos” y “Mensajes” en diferentes idiomas. Y el Servicio de Persistencia también utiliza “I18n” para almacenar algunos “Mensajes de Error” en diferentes idiomas, por lo que cada servicio depende del otro, pero no deberían trabajar juntos, ya que ambos ofrecen diferentes tipos de servicios.
Mi pregunta es: ¿Alguien conoce un “Patrón” o “Estructura” que pueda ayudarme a resolver este problema? Necesito registrar estos servicios y permitirles utilizar el uno al otro.
En el Activador del Servicio de Persistencia, tengo la siguiente dependencia declarada:
dependencyManager.add(createComponent()
.setImplementation(PersistenceImpl.class)
.add(createServiceDependency()
.setService(I18nService.class)
.setRequired(true))
);
Pero lo mismo no puede hacerse con “I18n”, en ese caso ninguno de ellos se iniciaría:
dependencyManager.add(createComponent()
.setImplementation(I18nImpl.class)
.add(createServiceDependency()
.setService(PersistenceService.class)
.setRequired(true))
);
Gracias.
davy.ai
Una posible solución a este problema es utilizar el patrón de pizarra blanca de OSGi. Así es como se puede implementar:
I18n
para registrarse como unMessageProvider
utilizando el patrón de pizarra blanca de OSGi:Persistence
para buscar todos los serviciosMessageProvider
utilizando el patrón de pizarra blanca de OSGi:En este ejemplo, el servicio
Persistence
busca todos los servicios que implementan la interfazMessageProvider
y los almacena en un mapa. Luego utiliza el métodogetMessage
del servicioMessageProvider
para recuperar mensajes de error en diferentes idiomas.Persistence
para declarar una dependencia del servicioMessageProvider
:Esto asegurará que el servicio
Persistence
dependa de al menos un servicioMessageProvider
, que será proporcionado por el servicioI18n
.Con este enfoque, cada servicio permanece independiente y no depende directamente del otro servicio. Cada uno puede registrar y descubrir servicios utilizando el patrón de pizarra blanca de OSGi, lo que permite una mayor flexibilidad y desacoplamiento.</string,></string,></string,>