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

  1. #1
    Futur Membre du Club
    [OSGi] Ne pas démarrer les bundles quand on lance OSGi depuis Eclipse
    Bonjour à tous

    Alors voilà mon soucis : j'utilise OSGi via la console Eclipse, et à chaque fois que je démarre OSGi tous mes bundles se lancent automatiquement ce qui me pose des soucis. J'ai tenté deux choses :
    - Arrêter les bundles posant problème avant de quitter OSGi
    - Modifier ma configuration de Run en décochant lesdits bundles
    Ca n'a pas marché. Dans le premier cas les bundles se lancent tout de même lorsque je redémarre OSGi, et dans le deuxième cas mes bundles n'apparaissent pas dans la liste des bundles installés lorsque je fais la commande ss.

    Le lancement automatique pourrait ne pas être gênant ; le problème est que l'un de mes bundles demande à l'utilisateur de saisir des informations dans la console. La lecture au clavier fonctionne mal lorsque c'est demandé au démarrage, je suis obligée de faire planter mon application pour pouvoir arrêter et redémarrer ce bundle. Lorsque ce bundle redémarre, je n'ai plus de soucis avec la lecture au clavier (même si mes autres bundles ont toujours des threads lancés en arrière plan).
    D'où ma question : comment faire pour ne pas démarrer certains bundles au démarrage d'OSGi ?

    J'ai fait une recherche rapide avant de créer le sujet, je n'ai rien vu qui réponde à ma question (a priori). Désolée pour le doublon si le sujet existe déjà ^^

    Merci d'avance pour votre aide !

  2. #2
    Expert éminent
    OOPS
    ce n'est pas du tout dans l'esprit d'OSGI que de faire un prompt dans la phase de démarrage.

    je crois que c'est ton bundle qui est mal conçu

    il faut voir l'activator comme une phase d'init
    elle est là pour mettre en place tous les éléments nécessaire au fonctionnement du bundle et lancer tous les tâche en background.

    l'interaction avec l'utilisateur ne se faisant qu'à la demande.

    A+JYT

  3. #3
    Futur Membre du Club
    Citation Envoyé par sekaijin Voir le message
    OOPS
    ce n'est pas du tout dans l'esprit d'OSGI que de faire un prompt dans la phase de démarrage.

    je crois que c'est ton bundle qui est mal conçu

    il faut voir l'activator comme une phase d'init
    elle est là pour mettre en place tous les éléments nécessaire au fonctionnement du bundle et lancer tous les tâche en background.

    l'interaction avec l'utilisateur ne se faisant qu'à la demande.

    A+JYT
    La demande d'informations à l'utilisateur ne se fait pas dans l'activator ; l'activator du bundle en question ne fait que lancer un thread, et c'est ce thread qui gère l'interaction avec l'utilisateur. Peut-être que gérer l'interaction via une interface graphique aurait été mieux pour éviter ce genre de soucis, mais je n'avais pas vraiment le temps de me pencher sur ça. ^^


    Je n'ai toujours pas trouvé de réponse à ma question (et je ne sais toujours pas s'il est possible de ne pas démarrer certains bundles au démarrage d'OSGi), mais j'ai trouvé une alternative qui me permet de faire fonctionner mon application correctement. J'utilisais la console d'Eclipse RCP, qui n'arrivait pas à distinguer les commandes OSGi et la "lecture au clavier" dans le cadre de mon application.
    Si ça peut aider quelqu'un, j'ai simplement modifié la configuration en rajoutant un numéro de port pour OSGi dans les arguments du Run, afin de pouvoir utiliser séparément OSGi (via telnet sur un terminal à part) et la console Eclipse pour l'interaction utilisateur.

  4. #4
    Expert éminent
    C'est contre nature.

    pense que ton bundle c'est un plugin pour ton navigateur
    lorsque le navigateur démare il liste tous les plugins actif et charge en mémoire tous le nécessaire à leur fonctionnement.
    il lance toute les taches de fond.

    ensuite durant ta navigation ces taches de fond interceptent des événements et réagissent.
    AddBlock va intercepter les flux HTML et bloquer les requêtes vers certain site. PDFview va intercepter les contenus PDF et afficher son interface.
    et pour d'autre il te faudra lancer les action toi-même.

    mais tu ne vas pas modifier le code de ton navigateur pour empêcher les plugins de démarrer.

    dans karaf soit tu les arrêtes (comme on désactive un plugin) et lorsque tu redémarre il sont toujours arrêté, soit tu les laisse actif et au redémarrage il le seront toujours.

    si tu utilise Karaf je te conseille de regarder comment on implémente une commande shell
    c'est très simple.
    du coup ton bundle démarre et ne fait rien
    mais lorsque un utilisateur (il peut y en avoir plusieurs en même temps ) tape la commande il entre en interaction avec ton bundle dans sa console.

    les tutos de christian sont plutôt bien fait à ce sujet
    http://www.liquid-reality.de/display...araf+Tutorials
    dans le N°6 il fait des commandes qui permettent d'interroger des datasources.

    A+JYT