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] Pour une architecture de type plugins


Sujet :

OGSi Java

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut [OSGi] Pour une architecture de type plugins
    Bonjour à tous,

    Mon projet étant basé sur une architecture à base de plugins, je veux réorganiser cette architecture. Pour ce faire, je veux utiliser OSGI. J'utilise Eclipse comme EDI.

    J'aurai un projet core et plusieurs projets plugin1, plugin2, ...

    J'ai plusieurs questions à propos d'OSGI.
    Quelqu'un connait-il un bon tutoriel pour débuter avec OSGI ? (les tutos que Google me donne ne me satisfont pas,) un tutoriel qui prendrait également en compte la problématique du déploiement ?

    Chaque projet plugin doit être compilé sous forme de jar et je peux appeler, dans mon core, le jar que je veux (donc aussi les méthodes des classes du jar importé).

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    Bonjour à tous,

    Mon projet étant basé sur une architecture à base de plugins, je veux réorganiser cette architecture. Pour ce faire, je veux utiliser OSGI. J'utilise Eclipse comme EDI.

    J'aurai un projet core et plusieurs projets plugin1, plugin2, ...

    J'ai plusieurs questions à propos d'OSGI.
    Quelqu'un connait-il un bon tutoriel pour débuter avec OSGI ? (les tutos que Google me donne ne me satisfont pas,) un tutoriel qui prendrait également en compte la problématique du déploiement ?

    Chaque projet plugin doit être compilé sous forme de jar et je peux appeler, dans mon core, le jar que je veux (donc aussi les méthodes des classes du jar importé).

    Merci
    Salut,

    le meilleur tuto que j'aie vu jusqu'ici est celui de Felix: http://felix.apache.org/site/apache-...-tutorial.html
    Tu as pas mal de doc intéressante ici : http://felix.apache.org/site/documentation.html

    Par contre si ton core doit être au courant de tous les plugins, ça me parait un design bizarre... as-tu une interface commune qui sera appelée ? Connais-tu le principe des services dans OSGi ?

    A plus

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Salut George7 et merci d'avoir répondu

    Bon, tu confirmes ce que je pensais. Je vais donc m'attaquer à l'implémentation Felix d'OSGI.

    Par contre si ton core doit être au courant de tous les plugins
    Mon core ne sera au courant de mes plugins que "un par un". Pour être plus clair, j'aurai plusieurs versions. Core + plugin1 puis Core + plugin2, ...

    Par contre, si ça ne t'embête pas, peux-tu rapidement m'expliquer le principe des services dans OSGI (ou alors un lien qui explique cela bien) ? De quoi s'agit-il ? Comme je le vois pour le moment, j'imagine qu'il s'agit de services fournis par le plugin et que le Core va consommer ...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    Bon, tu confirmes ce que je pensais. Je vais donc m'attaquer à l'implémentation Felix d'OSGI.
    Le tuto explique les concepts d'OSGi en général, et est pas spécifique à Felix. Tu peux utiliser n'importe quelle implémentation respectant la spec avec ce tuto.


    Citation Envoyé par identifiant_bidon Voir le message
    Mon core ne sera au courant de mes plugins que "un par un". Pour être plus clair, j'aurai plusieurs versions. Core + plugin1 puis Core + plugin2, ...
    En théorie, le core doit être indépendant des plugins, et uniquement travailler avec une interface publique. L'utilisation de "Require-Bundle" est souvent déconseillée car crée des liens en dur entre les bundles, ce qui est contraire à la philosophie OSGi.
    Si plugin1 et plugin2 on la même interface, je mettrais cette interface dans le core en l'exportant et les plugins l'importent et l'implémentent. Ensuite il suffit d'enregistrer cette implémentation en tant que service et le core peut utiliser ce service.
    Après il faut voir ton problème particulier comment on le résout au mieux.

    Citation Envoyé par identifiant_bidon Voir le message
    Par contre, si ça ne t'embête pas, peux-tu rapidement m'expliquer le principe des services dans OSGI (ou alors un lien qui explique cela bien) ? De quoi s'agit-il ? Comme je le vois pour le moment, j'imagine qu'il s'agit de services fournis par le plugin et que le Core va consommer ...
    Le tuto que je t'ai donné explique bien les services, essaie déjà de regarder là et demande si tu ne comprends pas quelque chose.

    Sans vouloir faire peur ou passer pour un fou : une excellente source d'informations est la spécification OSGi. Elle est pleine d'exemples et très facile à comprendre. Souvent elle permet de résoudre très rapidement des problèmes incompréhensibles, donc n'aie pas peur de la télécharger et de lire ce qui peut t'intéresser (au début de la spec est expliqué quelles sections sont intéressantes pour qui, jettes-y un oeil)

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai oublié un lien que j'aime beaucoup aussi (même si j'ai renoncé à en voir une version finie un jour) : OSGi in Action avec un exemple de messagerie qui introduit bien les concepts.

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Bonjour,

    J'ai commencé à regarder les toturiels se trouvanr à cette adresse :
    http://felix.apache.org/site/apache-...-tutorial.html
    Ceci dit, je commence à me poser quelques questions :

    Voici ce que j'en ai compris.

    Le tuto 1 indique comment créer un bundle tout simple qui affiche un message au start et au stop -> c'est le bundle 1
    Le tuto 2 crée une interface Dictionary et une classe Activator du bundle qui implémente cette interface -> c'est le bundle 2
    Le tuto 3 fait un lien avec le bundle 2 et fait une reference a l'interface du bundle 2 -> c'est le bundle 3

    Dans une invite de commande, au prompt osgi, si j'install et start les bundle un à un, j'ai bien le comportement attendu. Jusqu'ici : logique.

    Si je refais uen nouvelle fois start 3 (qui correspond a bundle 3), rien ne s'affiche alors qu'au premier start 3, j'avais "Enter a blank line to exit. Enter word:" Pourquoi ? (lorsque je fais ss, j'ai mes bundle tous à ACTIVE). Quelque chose m'échappe apparemment ...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Tu viens de tomber sur un problème classique : la compréhension du cycle de vie d'un bundle. Pour la suite il serait bon pour toi de bien connaitre cette image:


    Quand un bundle est démarré pour le redémarrer il faut d'abord le stopper.

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Ok merci George7.
    J'ai donc commencé à développer et je me base donc sur cet exemple :

    http://felix.apache.org/site/apache-...nstration.html

    Je dispose de plusieurs projets : host qui sera mon core, square, circle, triangle, trapezoid qui seront mes plugins. J'ai fait un checkout des projets et réussi plus ou moins à l'adapter à mon cas. Ceci dit, j'ai une première question :

    Dans le projet host, j'ai une référence vers les "plugins" (dans ce cas ci, seulement vers square) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           configMap.put(AutoActivator.AUTO_START_PROP + ".1", "file:servicebased.square-1.0.0.jar");
    Je me retrouve donc avec 2 jars, un pour host et l'autre pour square. Lorsque je supprime le square, j'ai mon host qui s'éxécute bien tout seul lorsque je le lance, ceci dit, j'ai d'abord le message suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Auto-properties install: org.osgi.framework.BundleException: Unable to cache bundle: file:servicebased.square-1.0.0.jar
    Auto-properties start: org.osgi.framework.BundleException: Unable to cache bundle: file:servicebased.square-1.0.0.jar
    Cela est surement du au fait que le jar du square est absent. Cela est-il risqué de virer le square dans ce cas précis ? C'est bien le but d'OSGI de rendre les modules d'un projet relativement indépendant les uns des autres (surtout ce qui sera mon core)? Comment faire pour supprimer ces lignes (le but étant de pouvoir changer sans problème de plugin, tout en gardant le même core) ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Salut,

    Justement avec Felix tu as la possibilité de dire de démarrer automatiquement tous les Bundles d'un répertoire sans les nommer en dur, la propriété s'appelle "felix.auto.deploy.dir"
    regarde le fichier dans conf/config.properties qui est largement commenté
    Ainsi il te suffit de donner le répertoire dans lequel seront tes bundles à démarrer automatiquement et tu pourras en ajouter et retirer autant que tu veux sans avoir à modifier ton core.

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Ok merci George7, j'apprécie beaucoup ton aide.

    Ceci dit, dans le main de mon core, j'ai donc ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Map configMap = new StringMap(false);
            configMap.put("felix.auto.deploy.dir", "bundle/");  
            configMap.put(AutoActivator.AUTO_START_PROP + ".1", "file:servicebased.square-1.0.0.jar");
     
            Felix felix = new Felix(configMap);
            felix.start();
    Maintenant, j'ai ajouté un dossier bundle dans lequel je ne met rien et j'ai toujours le message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Auto-properties install: org.osgi.framework.BundleException: Unable to cache bundle: file:servicebased.square-1.0.0.jar
    Auto-properties start: org.osgi.framework.BundleException: Unable to cache bundle: file:servicebased.square-1.0.0.jar
    Ceci dit, derrière cela se passe bien mais j'ai toujours ces messages que j'aimerai bien masquer :s

  11. #11
    Invité
    Invité(e)
    Par défaut
    Mais tu as toujours le lien en dur vers ton plugin square
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    configMap.put(AutoActivator.AUTO_START_PROP + ".1", "file:servicebased.square-1.0.0.jar");
    Pourquoi ? si il est dans le répertoire bundle et que tu as bien cette propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    felix.auto.deploy.action=install,start
    dans ta configuration, alors tout devrait se passer comme il faut. Tu pourras mettre un deux trois ou zéro plugin, ils seront démarrés automatiquement sans avoir besoin de les référencer dans le code

    De plus à ta place je chargerait la config depuis le fichier config.properties, ce qui te permettra de la changer sans devoir recompiler ton module core.

  12. #12
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Bon, ça ne marche pas. J'ai du oublier un truc. Je vais continuer les investigations mais sans log, c pas évident

  13. #13
    Invité
    Invité(e)
    Par défaut
    Je te conseille très fortement cette page (aussi inclue dans la distribution Felix que tu as téléchargée), elle explique comment lancer soi même le framework avec exemple et détails.

  14. #14
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Bon j'ai beau me creuser la tête. Je ne vois pas pourquoi le plugin n'est pas pris en compte. J'ai toutefois une petite idée.

    1- Je n'ai pas telechargé la distribution de Felix. J'utilise Maven pour faire mes builds (comme dans l'exemple proposé). Cela peux peut-être jouer.

    2- Voici le code utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
            Map configMap = new StringMap(false);
            configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "org.apache.felix.example.servicebased.host.service; version=1.0.0");
            configMap.put("felix.auto.deploy.action", "install,start");        
            configMap.put("felix.auto.deploy.dir", "bundle/");   
            configMap.put(FelixConstants.LOG_LEVEL_PROP, "0");
            configMap.put(Constants.FRAMEWORK_STORAGE, cachedir.getAbsolutePath());
     
            // Create list to hold custom framework activators.
            List list = new ArrayList();
            // Add activator to process auto-start/install properties.
            list.add(new AutoActivator(configMap));
            // Add our own activator.
            list.add(new Activator());
            // Add our custom framework activators to the configuration map.
            configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
     
            try
            {
                // Now create an instance of the framework.
                Felix felix = new Felix(configMap);
                felix.start();
            }
            catch (Exception ex)
            {
                System.err.println("Could not create framework: " + ex);
                ex.printStackTrace();
                System.exit(-1);
            }
    Là, d'après ce que tu m'as dit George7, cela devrait suffire mais ça n'est pas le cas. J'ai beau mettre le jar de mon plugin dans le dossier bundle/, celui-ci n'est pas vu par mon projet Core. L'ordre dans lequel je mets mes proprietés joue peut-être...

    3- Peut-être dois-je modifier quelque chose dans le fichier manifest de mon projet plugin ?


  15. #15
    Invité
    Invité(e)
    Par défaut
    Quelle version de Felix utilises-tu ?
    As-tu regardé mon dernier lien ? tes plugins sont bien dans le répertoire bundle ?
    A quoi ressemble le manifest de ton bundle ? tu pourrais mettre ton projet à disposition que j'y regarde ?

  16. #16
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Ok, je te file tout ça George7. C'est d'autant + incompréhensible que, tu le verras, il n'y a pas pourtant énormément de code pour le moment ... J'ai regardé ton dernier lien. Il ne m'a malheureusement pas été d'une grande aide. Le plugin se trouve bien dans le repertoire bundle mais il n'est pas "vu".

    De ce que je vois dans le POM, la version de Felix utilisée est la 1.0.4.
    Alors, voici donc mes fichiers

    PREMIER PROJET : Le plugin

    Activator.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    package org.apache.felix.example.servicebased.square;
     
    import org.apache.felix.example.servicebased.host.service.SimpleShape;
    import org.osgi.framework.BundleActivator;
    import org.osgi.framework.BundleContext;
     
    public class Activator implements BundleActivator
    {
        private BundleContext m_context = null;
     
        public void start(BundleContext context)
        {
            m_context = context;
            System.out.println("Je suis dans mon plugin");
        }
     
        public void stop(BundleContext context)
        {
        }
     
        public class Square implements SimpleShape
        {
     
            public void draw()
            {
            }
        }
    }
    MANIFEST.MF généré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Manifest-Version: 1.0
    Private-Package: org.apache.felix.example.servicebased.square
    Built-By: Identifiant_bidon
    Tool: Bnd-0.0.238
    Bundle-Name: Nagios plugin service
    Created-By: Apache Maven Bundle Plugin
    Bundle-Vendor: The Apache Software Foundation
    Build-Jdk: 1.6.0_22
    Bundle-Version: 1.0.0
    Bnd-LastModified: 1297354515779
    Bundle-ManifestVersion: 2
    Bundle-Activator: org.apache.felix.example.servicebased.square.Activator
    Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
    Bundle-Description: A simple Nagios service for using Nagios
    Import-Package: org.apache.felix.example.servicebased.host.service,org
     .osgi.framework;version="1.4"
    Bundle-SymbolicName: org.apache.felix.example.teamTILTForNagios
    Bundle-DocURL: http://www.apache.org/
    DEUXIEME PROJET

    Activator.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    package org.apache.felix.example.servicebased.host;
     
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
     
    import org.apache.felix.framework.Felix;
    import org.apache.felix.framework.util.FelixConstants;
    import org.apache.felix.framework.util.StringMap;
    import org.apache.felix.main.AutoActivator;
    import org.osgi.framework.BundleActivator;
    import org.osgi.framework.BundleContext;
    import org.osgi.framework.Constants;
     
    public class Activator implements BundleActivator
    {
     
        public void start(final BundleContext context)
        {	
        	System.out.println("Ceci est un test. Je suis dans mon futur module Core");	
        }
     
        public void stop(BundleContext context)
        {
        }
     
    	public static void main(String[] argv) throws Exception
        {
            final File cachedir = File.createTempFile("felix.example.servicebased", null);
            cachedir.delete();
            Runtime.getRuntime().addShutdownHook(new Thread() {
                public void run()
                {
                    deleteFileOrDir(cachedir);
                }
            });
     
            Map configMap = new StringMap(false);
            configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "org.apache.felix.example.servicebased.host.service; version=1.0.0");
            configMap.put(AutoActivator.AUTO_START_PROP + ".1", "file:servicebased.square-1.0.0.jar");      
            configMap.put(FelixConstants.LOG_LEVEL_PROP, "0");
            configMap.put(Constants.FRAMEWORK_STORAGE, cachedir.getAbsolutePath());
            configMap.put("felix.auto.deploy.action", "install,start");        
            configMap.put("felix.auto.deploy.dir", "bundle/");   
     
            List list = new ArrayList();
            list.add(new AutoActivator(configMap));
            list.add(new Activator());
            configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
     
            try
            {
                Felix felix = new Felix(configMap);
                felix.start();
            }
            catch (Exception ex)
            {
                System.err.println("Could not create framework: " + ex);
                ex.printStackTrace();
                System.exit(-1);
            } 
        }
     
        private static void deleteFileOrDir(File file)
        {
            if (file.isDirectory())
            {
                File[] childs = file.listFiles();
                for (int i = 0;i < childs.length;i++)
                {
                    deleteFileOrDir(childs[i]);
                }
            }
            file.delete();
        }
    }
    MANIFEST.MF généré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Manifest-Version: 1.0
    Export-Package: org.apache.felix.example.servicebased.host.service
    Private-Package: org.apache.felix.example.servicebased.host,org.apache
     .felix.framework,org.apache.felix.framework.cache,org.apache.felix.fr
     amework.ext,org.apache.felix.framework.searchpolicy,org.apache.felix.
     framework.util,org.apache.felix.framework.util.ldap,org.apache.felix.
     framework.util.manifestparser,org.apache.felix.main,org.apache.felix.
     moduleloader,org.osgi.framework;version="1.4",org.osgi.framework.hook
     s.service,org.osgi.framework.launch,org.osgi.service.packageadmin;ver
     sion="1.2",org.osgi.service.startlevel;version="1.1",org.osgi.service
     .url;version="1.0",org.osgi.util.tracker;version="1.3.3"
    Ignore-Package: dalvik.system,android.dalvik
    Built-By: Identifiant_bidon
    Tool: Bnd-0.0.238
    Bundle-Name: Apache Felix Service-Based Host
    Created-By: Apache Maven Bundle Plugin
    Bundle-Vendor: The Apache Software Foundation
    Build-Jdk: 1.6.0_22
    Bundle-Version: 1.0.0
    Bnd-LastModified: 1297354456123
    Bundle-Activator: org.apache.felix.example.servicebased.host.Activator
    Bundle-ManifestVersion: 2
    Bundle-Description: A simple application that embeds Felix and uses th
     e service model for extensibility.
    Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
    Embed-Dependency: *;artifactId=org.apache.felix.main;inline=true
    Import-Package: javax.swing,org.apache.felix.example.servicebased.host
     .service,org.osgi.framework;version="1.4",org.osgi.service.packageadm
     in;version="1.2",org.osgi.service.startlevel;version="1.1",org.osgi.s
     ervice.url;version="1.0",org.osgi.util.tracker;version="1.3"
    Bundle-SymbolicName: org.apache.felix.example22.teamtilt.core
    Bundle-DocURL: http://www.apache.org/
    Main-Class: org.apache.felix.example.servicebased.host.Activator
    Et l'interface SimpleShape implémentée dans mon premier projet par la classe square.

    Je fais des maven install sur mes 2 projets, ce qui me génère mes jars. Je les place aux bons endroits et je ne vois que le message suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ceci est un test. Je suis dans mon futur module Core
    Merci beaucoup George7. Ca fait une après-midi que je cherche et je sèche lamentablement.

  17. #17
    Invité
    Invité(e)
    Par défaut
    je vais regarder ça, mais Felix version 1.0.4
    On en est à la version 3 !!! tu veux/peux pas mettre à jour la version dans ton pom ? ça simplifierait parce que la doc utilise la dernière version et que beaucoup de choses concernant la configuration ont changé depuis...

    EDIT : pourquoi le lien ne t'a pas été d'une grande aide ? il est bien documenté et explique comment ça marche avec le launcher par défaut

  18. #18
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Ok George7, je vais voir comment passer a la dernière version de Felix.
    J'ai peut être mail exploité le lien que tu m'avais fourni. Je vais m'y remettre de ce pas.

    Tu as pu jeter un oeil au code que j'ai mis plus haut ?

    Merci encore.

  19. #19
    Invité
    Invité(e)
    Par défaut
    Ce que tu m'as donné ci dessus ne marche pas avec la dernière version de Felix car la classe AutoActivator n'existe plu (ou alors ailleurs), mais je pense que mon lien te donne tout ce qu'il faut pour ce que tu veux.

    Une question : il y a une raisons particulière pourquoi tu veux embarquer le framework dans ton propre main ? est-ce que tout est bundle ? (il me semble).
    Dans ce cas au lieu de t'embêter démarre felix en éditant le fichier de conf pour ne pas démarrer la console par défaut mais ton bundle core et voilà, tu auras tout comme tu veux....

  20. #20
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Euh non, il n'y a aucune raison particulière, c'est juste que je ne connais pas du tout OSGI et Felix et que je pars de l'exemple donné sur le site (host, circle, square, ...)

    Est-ce que tu peux s'il te plait m'indiquer la bonne marche que je devrais suivre dans ce cas ?
    - Telecharger la dernière version du framework - version 3.0.8 (avec les dossiers bin, bundle, doc et conf)
    - mettre tous mes bundles (plugins) dans le dossier bundle
    - mettre mon bundle core a la racine
    - dans le fichier config.properties, je mets la proprieté qui va bien pour démarrer de mon core. Ja rajoute aussi comme tu me le disais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    felix.auto.deploy.dir et felix.auto.deploy.action=install,start
    Par contre, quelle est la proprieté que je dois mettre pour lui dire de démarrer de mon Core ?

    - De la, le Core s'exécute et a bel et bien accès a mes bundles / plugins.

    Pour déployer mon appli, je ferai donc seulement java -jar felix.jar. Le framework va lire le fichier de properties et ensuite me lancer mon core et mes plugins ? J'ai bien compris ?

    Merci encore pour le temps que tu prends a répondre a mes interrogation

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Utilisation de JSPF pour un projet d'architecture de type plugins =======
    Par identifiant_bidon dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 01/02/2011, 17h44
  2. Problème pour une définition de type
    Par Kleer dans le forum Ada
    Réponses: 4
    Dernier message: 05/03/2007, 13h34
  3. Réponses: 2
    Dernier message: 02/03/2006, 12h57
  4. Réponses: 2
    Dernier message: 18/10/2003, 15h42

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