IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OGSi Java Discussion :

OSGi et récupération de services


Sujet :

OGSi Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut OSGi et récupération de services
    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 ?

  2. #2
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour,

    Est-ce que l'utilisation de l'injection te conviendrais?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <bean id="monBean" class="cc.dd.BeanImpl">
        <property name="champ" ref="service" />
    </bean>
     
    <osgi:reference id="service" interface="aa.bb.SomeService"/>

  3. #3
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    L'injection me va très bien, mais seulement dans le cas ou le cas ou j'ai besoin d'accéder à un service depuis un bean Spring.

    Comment faire dans le cas d'une classe utilitaire avec toutes ses méthodes statiques et un constructeur private ?

  4. #4
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Je suis peut être en erreur, mais je ne crois pas que cela soit très "OSGI" d'avoir des méthodes statiques.
    De plus, le 'D' de 'Spring-DM' voulant dire dynamique, je ne suis pas sûr que ce framework offre quelque chose de ce genre. Et si une fonctionnalité te permet d'arriver à tes fins, il est possible que cela soit un détournement de l'utilisation prévue.
    Après, je suis en pleine découverte de cet outil, donc je peux me tromper

  5. #5
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Billets dans le blog
    2
    Par défaut
    Mais en fait il n'existe pas de "bean Spring" ou plutôt tout peut être un bean au sens Spring. Donc tes utilitaires peuvent très bien être des beans Spring comme tu dis et là plus de problème.
    D'ailleurs où est réellement ton problème ? Qu'est-ce qui te pose problème dans la déclaration de tes utilitaires comme "Spring Bean" ?

  6. #6
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Le fait de les déclarer comme beans Spring implique alors que toute classe voulant utiliser cet utilitaire devra avoir accès au contexte Spring...

    A mon avis une classe utilitaire du genre d'un FileUtils n'a pas à être dans le contexte Spring...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OSGI] Déclaration des services
    Par onlytoine dans le forum OGSi
    Réponses: 4
    Dernier message: 19/11/2012, 22h01
  2. Réponses: 1
    Dernier message: 27/12/2008, 11h59
  3. Récupération de fichiers avec un service web
    Par Fantacassis dans le forum Services Web
    Réponses: 5
    Dernier message: 24/09/2008, 15h38
  4. Web Service : récupération objet request
    Par silver95 dans le forum Services Web
    Réponses: 1
    Dernier message: 26/08/2007, 19h29
  5. [WCF] Récupération de l'instance du service coté serveur
    Par pc152 dans le forum Windows Communication Foundation
    Réponses: 2
    Dernier message: 20/06/2007, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo