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

Eclipse Platform Discussion :

Récupération de classe dérivée


Sujet :

Eclipse Platform

  1. #1
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut Récupération de classe dérivée
    Bonjour,

    Dans mon code j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            // Get of every extension, extension point, ...
            IExtensionRegistry registry = Platform.getExtensionRegistry();
     
            // Get of every extension for 'com.xxx.headless.extensionpoint'
            IConfigurationElement[] configs = registry.getConfigurationElementsFor("com.xxx.headless.extensionpoint");
     
            try {
                for (IConfigurationElement e : configs) {
    ...
    Ce code me permet de récupérer l'ensemble des classes chargées qui étendent le point d'extension 'com.xxx.headless.extensionpoint' (si ma mémoire est bonne).

    Et j'aimerais savoir s'il est possible (et comment) de récupérer un ensemble de classes chargées qui implémentent la même classe abstraite ou s'il faut absolument créer un point d'extension (quitte à ce qu'il ne serve que de point de repère) ?

    Espérant avoir été clair.

    Merci d'avance pour votre aide.

  2. #2
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    Citation Envoyé par Zombee Voir le message
    Ce code me permet de récupérer l'ensemble des classes chargées qui étendent le point d'extension 'com.xxx.headless.extensionpoint' (si ma mémoire est bonne).
    Il permet de récupérer l'ensemble des extensions. Ces extensions peuvent définir des classes qui sont chargées grâce à IConfigurationElement.createExecutableExtension

    Et j'aimerai savoir s'il est possible (et comment) de récupérer un ensemble de classes chargés qui implémentent la même classe abstraite ou s'il il faut absolument créer un point d'extension (quitte à ce qu'il ne serve que de point de repère).
    En Java, et encore plus en OSGi, tu ne peux pas facilement connaître les classes filles d'une classe. En effet, le seul moyen de faire ça consiste à lister toutes les classes/resources de tout ton classpath et de charger la classe pour voir si elle étend ta classe mère. C'est une opération énorme qui risque de prendre très longtemps et de faire exploser ta mémoire. De plus, en OSGi, tu n'as même pas accès à tout le classpath, mais juste à celui du bundle et de ses dépendances, alors que les extensions viennent généralement de bundles "downstream" (i.e. qui dépendent du bundle dans lequel tu inspectes les point d'extensions).
    Bref, ça ne se fait pas.

    C'est pour ça qu'il y a les points d'extensions, et les choses "déclaratives" en général. Tu veux que ton appli soit extensible, mais tu ne peux pas trop introspecter ses classes dynamiquement, donc tu les déclares dans les extensions, que le consommateur peut lire sans trop de mal, et donc utiliser pour charger les classes qui lui sont utiles mais dont il n'a pas connaissance lors du développement.

    Dans ton cas, on mets généralement dans les extensions des classes concrètes qui fournissent du comportement.
    Si tu veux faire du OSGi pur (et non spécifiquement du Eclipse), intéresse-toi aussi au Declarative Services d'OSGi, qui sont une variante aux points d'extensions (dont ils se sont inspirés dans la spec OSGi)
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  3. #3
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut
    Merci beaucoup Mickael !

    Je suis pas sûr d'avoir tout saisi mais du moment qu'on peut le faire avec des extensions ça me va

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

Discussions similaires

  1. classe dérivée de thread
    Par aaronw dans le forum Threads & Processus
    Réponses: 9
    Dernier message: 08/03/2006, 15h35
  2. Réponses: 2
    Dernier message: 06/12/2005, 09h41
  3. Réponses: 4
    Dernier message: 20/11/2005, 05h48
  4. [MFC] CArray et classe dérivée?
    Par TigreRouge dans le forum MFC
    Réponses: 14
    Dernier message: 02/08/2005, 22h45
  5. Déterminer le type d'une class dérivée
    Par LDDL dans le forum MFC
    Réponses: 3
    Dernier message: 10/12/2004, 17h36

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