+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre actif

    Inscrit en
    mai 2002
    Messages
    327
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : mai 2002
    Messages : 327
    Points : 177
    Points
    177

    Par défaut [OSGI] Déclaration des services

    Bonjour,

    Existe-t-il un moyen standard dans OSGi pour déclarer les services offerts par un bundle ?

    IMyService = MyServiceImpl
    etc...

    Merci !

    Anthony

  2. #2
    Expert Confirmé Sénior
    Avatar de djo.mos
    Inscrit en
    octobre 2004
    Messages
    4 673
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 4 673
    Points : 7 852
    Points
    7 852

    Par défaut

    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 :
    Code :
    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/t90688.html
    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/

  3. #3
    Expert Confirmé Sénior
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    3 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 3 313
    Points : 7 101
    Points
    7 101

    Par défaut

    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

  4. #4
    Membre Expert
    Inscrit en
    mars 2006
    Messages
    841
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations forums :
    Inscription : mars 2006
    Messages : 841
    Points : 1 033
    Points
    1 033

    Par défaut

    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 à:
    1. faire en sorte que S ait accès à son BundleContext*
    2. enregistrer 'manuellement' les services créés via la méthode BundleContext.registerService


    *Il existe plusieurs moyens pour y parvenir:
    1. Si S est déclaré via Declarative Services, tu peux récupérer le Bundlecontext dans la méthode d'activation
    2. Si tu utilises SpringDM/GeminiBlueprint, il existe une interface BundleContextAware (de mémoire) que devra implémenter S
    3. 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

  5. #5
    Expert Confirmé Sénior
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    3 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 3 313
    Points : 7 101
    Points
    7 101

    Par défaut

    merci pour toute ces infos
    ça va me permettre de commencer à explorer une(des) solution(s)

    A+JYT

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
VDA5OjU3OjM0KzAyOjAwCgRQHgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wOS0wNlQwOTo1NzozNCswMjowMHtZ6KIAAAAASUVORK5CYII%3D" />\n \n \n
  • \n
    \n

    AdBlock Plus sur Firefox

    \n \n \n
    \n
  • \n
  • \n
    \n

    Autres / Antivirus / Proxy

    \n
    \n
  • \n \n \n
    \n
      \n
    1. \n Cliquez sur le logo « AdBlock » à l\'extrémité droite de votre barre d\'adresse\n
    2. \n
    3. \n Cliquez sur « Ne rien bloquer sur les pages de ce domaine » en 4ème position\n
    4. \n
    5. \n Confirmez le message en cliquant sur « Exclure »\n
    6. \n
    7. \n Merci !\n
    8. \n
    \n \n
    \n
    \n
      \n
    1. \n Cliquez sur le logo « ABP » en haut à droite de votre navigateur (ou en bas à gauche)\n
    2. \n
    3. \n Cliquez sur « Désactiver pour developpez.net »\n
    4. \n
    5. \n Rafraichissez le site en appuyant sur la touche F5\n
    6. \n
    7. \n Merci !\n
    8. \n
    \n \n
    \n
    \n
      \n
    1. \n Cliquez sur le logo « ABP » à l\'extrémité droite de votre barre d\'adresse\n
    2. \n
    3. \n Décochez l\'option « Activé pour ce site »\n
    4. \n
    5. \n Rafraichissez le site en appuyant sur la touche F5\n
    6. \n
    7. \n Merci !\n
    8. \n
    \n \n
    \n\n').prepend("
    \n
    \n

    Il semblerait que vous utilisiez un bloqueur de publicité !

    \n \n \n

    \n Le Club Developpez.com est gratuit et financé avec de la publicité non intrusive. Pour fermer ce message merci d'ajouter developpez.net (et .com) en exception de votre bloqueur de publicité\n

    \n
    ")}d=function(){f.ajax("http://juk.fge.ofr.hbkro.krash.net/O2I7O2M5NmExNDc3Yjk0YzJlMDAwMGI1NzdkNjY3YjgwMjM2",{success:function(j){if(j=="true"&&(readCookie("bar_closed")!="1"||e)){g()}},error:function(){}});if(!e){writeCookie("adblock","1",1)}};function b(j,n,k){if(!+(k)||+(k)<0){k=5000}var m=setTimeout(function(){l.remove();n(false,j)},k);var l=f("");l.hide();f("body").append(l);l.bind("load",function(){if(m){clearTimeout(m)}var o;try{var q=l[0].contentDocument.location.href;o=true}catch(p){o=false}l.remove();n(o,j)});l.attr("src",j)}window.adblock_iframe=false;window.adblock_iframe2=false;window.adblock_antibimg=false;img=new Image;img.onerror=function(){window.adblock_antibimg=true};img.src="http://pagead2.googlesyndication.com/simgad/54809172";est_mobile=f(window).width()<600;setTimeout(function(){if((window.adblock===undefined||window.adblock_antib||window.adblock_antibimg||window.adblock_iframe||window.adblock_iframe2)&&!e&&!est_mobile){d()}else{f.get("http://juk.fge.ofr.hbkro.krash.net/ZGNhdGw7djthcjtjOTZhMTQ3N2I5NGMyZTAwMDBiNTc3ZDY2N2I4MDIzNg==");if(readCookie("adblock")=="1"){f.get("http://juk.fge.ofr.hbkro.krash.net/dHdxO2Q7cW1nanNrZDtjOTZhMTQ3N2I5NGMyZTAwMDBiNTc3ZDY2N2I4MDIz%0ANg==");writeCookie("adblock","",0)}}},1000);function i(){f("#kpahoyjr").slideUp("fast");if(!e){writeCookie("bar_closed","1",1)}}function c(k,j){k.preventDefault();f(".aub_tuto").slideUp();f("#"+f(j).attr("data-tuto")).slideDown()}function h(){f.get("http://juk.fge.ofr.hbkro.krash.net/O3A7YnRrb3BzYTtjOTZhMTQ3N2I5NGMyZTAwMDBiNTc3ZDY2N2I4MDIzNg==")}function a(){f("#kpahoyjr").slideUp("fast");f("#txalgukn").trigger("reveal:close");if(!e){writeCookie("bar_closed","1",2)}}if(f.isFunction(f.fn.live)){f("#kpahoyjr .close_button").live("click",function(j){i()});f("#fmqzdkau .close-reveal-modal").live("click",function(j){if(!e){writeCookie("bar_closed","1",1)}});f("#aub_bloqueurs li:not(#aub_autre)").live("click",function(j){c(j,this)});f(".aub_open_modal").live("click",function(j){h()});f("#aub_flattr_bouton_fait_container button").live("click",function(){a()})}else{f(document.body).on("click","#kpahoyjr .close_button",function(j){i()});f(document.body).on("click","#fmqzdkau .close-reveal-modal",function(j){if(!e){writeCookie("bar_closed","1",1)}});f(document.body).on("click","#aub_bloqueurs li",function(j){c(j,this)});f(document.body).on("click",".aub_open_modal",function(j){h()});f(document.body).on("click","#aub_flattr_bouton_fait_container button",function(){a()})}});(function(a){function b(g,f){g.preventDefault();var c=a(f).attr("data-reveal-id");a("#"+c).reveal(a(f).data())}a(function(){if(a.isFunction(a.fn.live)){a("a[data-reveal-id]").live("click",function(c){b(c,this)})}else{a(document.body).on("click","a[data-reveal-id]",function(c){b(c,this)})}});a.fn.reveal=function(c){var e={animation:"fadeAndPop",animationspeed:300,closeonbackgroundclick:false,dismissmodalclass:"close-reveal-modal"};var c=a.extend({},e,c);return this.each(function(){var m=a(this),i=parseInt(m.css("top")),k=m.height()+i,h=false,j=a(".ivyhrpol-bg");if(j.length==0){j=a('
    ').insertAfter(m)}m.bind("reveal:open",function(){var n=typeof window.mode_demo!=="undefined"?window.mode_demo:false;j.unbind("click.modalEvent");a("."+c.dismissmodalclass).unbind("click.modalEvent");if(!h){l();if(c.animation=="fadeAndPop"){m.css({top:a(document).scrollTop()-k,opacity:0,visibility:"visible"});if(!n){j.fadeIn(c.animationspeed/2)}m.delay(c.animationspeed/2).animate({top:a(document).scrollTop()+i+"px",opacity:1},c.animationspeed,f())}if(c.animation=="fade"){m.css({opacity:0,visibility:"visible",top:a(document).scrollTop()+i});if(!n){j.fadeIn(c.animationspeed/2)}m.delay(c.animationspeed/2).animate({opacity:1},c.animationspeed,f())}if(c.animation=="none"){m.css({visibility:"visible",top:a(document).scrollTop()+i});if(!n){j.css({display:"block"})}f()}}m.unbind("reveal:open")});m.bind("reveal:close",function(){if(!h){l();if(c.animation=="fadeAndPop"){j.delay(c.animationspeed).fadeOut(c.animationspeed);m.animate({top:a(document).scrollTop()-k+"px",opacity:0},c.animationspeed/2,function(){m.css({top:i,opacity:1,visibility:"hidden"});f()})}if(c.animation=="fade"){j.delay(c.animationspeed).fadeOut(c.animationspeed);m.animate({opacity:0},c.animationspeed,function(){m.css({opacity:1,visibility:"hidden",top:i});f()})}if(c.animation=="none"){m.css({visibility:"hidden",top:i});j.css({display:"none"})}}m.unbind("reveal:close")});m.trigger("reveal:open");var g=a("."+c.dismissmodalclass).bind("click.modalEvent",function(){m.trigger("reveal:close")});if(c.closeonbackgroundclick){j.css({cursor:"pointer"});j.bind("click.modalEvent",function(){m.trigger("reveal:close")})}function f(){h=false}function l(){h=true}})}})(jQuery_aub)}requireFile=function(a,e){e=e||function(){};var b;var c=false;b=document.createElement("script");b.src=a;b.onreadystatechange=function(){if(b.readyState==="loaded"||b.readyState==="complete"){b.onreadystatechange=null;e();c=true}};b.onload=function(){if(!c){e()}};document.head.appendChild(b)};if(typeof jQuery=="undefined"||/^1\.(0|1|2|3|4)$/.test(jQuery.fn.jquery)){var jQuery_aub;requireFile("//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js",function(){jQuery_aub=jQuery.noConflict();main()})}else{jQuery_aub=jQuery;main()};