Bonjour,
Je suis en train de passer une application sur OSGi et je me heurte à un problème au niveau de la récupération des services.
J'arrive parfaitement à déployer des services avec Spring DM. Ca, il n'y a pas de soucis, mais je bloque pour la récupération de certains services.
Quand on est directement dans l'Activator, il y a pas de problèmes, c'est très simple de récupérer le service, mais c'est dans le reste de l'application qui me pose problème.
J'ai par exemple un service ILoggingManager qui mer permet de fournir des Logger aux autres bundles de l'application. Il garde aussi en mémoire un cache de Logger.
Maintenant, comment est-ce que je peux récupérer ce services depuis une autre partie de l'application, typiquement une simple classe utilitaire ?
Avant de passer à OSGi j'utilisais une classe Managers qui donnait une méthode getManager(Class class) permettant de récupérer ce manager.
Je vois plusieurs solutions, mais elles sont toutes horribles et me semblent aller à l'encontre des principes d'OSGi :
- Une idée que j'ai donc eu serait de créer une classe utilitaire Services avec une méthode statique getService(Class class) et qui aurait une instance de bundleContext pour un des modules. Par contre, ça voudrait dire qu'un module accéderait à un service via le bundle context d'un autre bundle, ce qui me semble très mauvais...
- Une autre solution serait de dupliquer cette classe Services pour chaque bundle pour fournir un accès rapide aux services, mais c'est pas non plus très propre.
- Et la dernière idée que j'ai, c'est de récupérer tous les services nécessaire au bundle dans l'activator de les stocker dans l'activator et des récupérer depuis les autres modules directement depuis cet Activator, mais bon, ça reste très moche
Qu'en pensez-vous ? Comment faites vous pour avoir un accès simple aux services ?
Partager