Bonjour,
Existe-t-il un moyen standard dans OSGi pour déclarer les services offerts par un bundle ?
IMyService = MyServiceImpl
etc...
Merci !
Anthony
Bonjour,
Existe-t-il un moyen standard dans OSGi pour déclarer les services offerts par un bundle ?
IMyService = MyServiceImpl
etc...
Merci !
Anthony
Salut,
Il existe à priori 2 façons officielles de le faire, et une autre devrait les rejoindre bientôt (introduite par Spring DM) :
1. Par programmation :
Dans ton activator :
http://www.eclipsezone.com/eclipse/forums/t90688.html
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public class Activator implements BundleActivator { private ServiceRegistration reg; public void start(BundleContext context) throws Exception { reg=context.registerService(IServiceInterface.class, new ServiceImple(), null); } public void stop(BundleContext context) throws Exception { if(reg!=null){ reg.unregister(); } } }
http://www.eclipsezone.com/eclipse/forums/t90796.html
http://www.eclipsezone.com/eclipse/forums/t91059.html
2. Declarative Services :
http://www.eclipsezone.com/eclipse/forums/t96740.html
http://www.eclipsezone.com/eclipse/forums/t97690.rhtml
3. Spring DM
Comparable à DS, mais en beaucoup plus puissant, car reposant sur les concepts de Spring (IoC par exemple).
http://springosgi.googlepages.com/
Bonjour,
je reveille cette vielle discussion car je cherche à définir un service dynamiquement.
j'ai un bundle qui reçois des demandes. à chaque demande il consulte une base de donnée qui contient des définition de ressources
pour chaque type de ressource il crée un objet qui implémente un service d'accès à cette resource.
mon problème est de déclarer ce service dans osgi.
je me demande comment faire.
A+JYT
Bonjour,
je vais tenter de résumer:
- un bundle B créée et publie un service S,
- un appel à une méthode du service S doit provoquer la création et la publication d'un service T.
- un autre appel au service S peut entraîner la création/publication d'un autre service U.
- etc.
- les service T et U (et les suivants) ne peuvent pas être définis avant l'exécution (=services dynamiques).
Si j'ai bien compris ton problème, une solution peut consister à:
- faire en sorte que S ait accès à son BundleContext*
- enregistrer 'manuellement' les services créés via la méthode BundleContext.registerService
*Il existe plusieurs moyens pour y parvenir:
- Si S est déclaré via Declarative Services, tu peux récupérer le Bundlecontext dans la méthode d'activation
- Si tu utilises SpringDM/GeminiBlueprint, il existe une interface BundleContextAware (de mémoire) que devra implémenter S
- Si tu publie S "à la main" la classe qui le publie possède le BundleContext et pourra le fournir à S via un setter ou le constructeur par exemple
merci pour toute ces infos
ça va me permettre de commencer à explorer une(des) solution(s)
A+JYT
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager