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 :

[Introspection] probl�me de NoClassDefFoundError


Sujet :

Eclipse Platform

  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    17
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 17
    Par d�faut [Introspection] probl�me de NoClassDefFoundError
    Bonjour � tous, je poste ici mais je sais pas si c'est dans la bonne partie du forum (ne pas h�sit� � d�placer le post)

    bon, je vais essayer d'�tre clair... voici le contexte.

    Je en train de d�velopper un projet Java RCP, j'ai un de mes plugin qui fait de l'introspection pour charger dynamiquement des classes (editor). Le souci c'est que ce plugin est isol� au niveau de ses d�pendances (c'est volontaire). Ceci implique que au moment de l'�x�cution de l'instruction Class.forName("leNomDeMaClass"); j'ai un beau NoClassDefFoundError.

    J'ai cru comprendre apr�s quelques heures de recherches et de lecture que mon probl�me pouvait surement venir de mon ClassLoader. il faudrait que j'en red�finisse un...

    Plus clairement, les classes que je souhaient instancier ne font pas parti du plugin mais sont charg�es normalement avec l'application car l'�diteur fait parti de l'application... r�sultat, comme elle ne font pas parti du plug-in, il m'envoie bouler � l'�x�cution de l'introspection

    Autre probl�me ! j'ai r�ussi � charger une de mes classes en lui indiquant le chemin absolu de la class via un classLoader (ce qui est bien) mais le probl�me, c'est quand j'aurais mon produit, je n'aurais plus la m�me structure de fichiers. Pour que �a marche, j'interogeais mon workSpace...

    Auriez vous des id�es...? Dois-je chercher du c�t� de classLoader...? du c�t� de mon classPath...?

    Au passage derni�re question, quand je lance mon produit, qu'est ce que j'ai en m�moire (je parle des classes) ? (ne devrais-je pas avoir les classes de mon �diteur...?)


    Voici le basiquement ce qui se passe :
    Plugin Pr�sentation
    -Il contient mes �diteurs et mes vues
    Plugin d'introspection
    -Il contient un fichier.properties (ce dernier contient le nom absolu de mes �diteurs pour pouvoir les charger � partir de Class.forName(String))
    -Ma classe �x�cutant l'introspection

    Ma vue 1 veut ouvrir mon editeur 1 :
    ->Ma vue 1 interroge ma classe d'introspection afin qu'elle signale � mon �diteur 1 de s'ouvrir.
    ->Ma classe d'introspection int�roge le fichier properties et connait donc le nom de l'�diteur � ourvir
    ->Ma classe d'introspection utilise Class.forName(NomAbsoluDeMonEditeur1) pour r�cup�rer la classe de l'�diteur 1

    �a plante quand ma classe d'instropection fait Class.forName

    Voil�

    Merci d'avance

  2. #2
    Membre confirm�
    Inscrit en
    Juin 2007
    Messages
    151
    D�tails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 151
    Par d�faut
    J'avais un peu le meme probleme pour acceder a une classe d'un autre plugin (mais je n'ai pas le solution)

    Par contre, tu met bien le chemin relatif dans ton workspace que tu fait ton forName ?

    Par exemple si ta classe "maClasse" est dans le package "mesClassesDynamiques", tu dois indiquer forName("mesClassesDynamiques.maClasse").

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    17
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 17
    Par d�faut
    oui pas de souci de ce c�t� l�.

    Je me plonge dans le livre Eclipse RCP � la recherche d'informations...

    Sinon je me disais que le probl�me revient � avoir acc�s aux plugin charg�s au d�marage et donc aux classes de ces plugin (mais comment faire... )

    Si je trouve promis je poste la solution !

  4. #4
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    17
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 17
    Par d�faut
    �a y est j'ai la solution

    Bon faut faire plusieurs choses :

    dans mon plugin isol� (appelons le plug1):

    Cr�ation d'un point d'extension avec les param�tres qu'il faut (pour cr�er son extension, vous pouvez �ventuellement aller ici)
    Appelons ce point extensionBonus

    Ensuite sur chaque plugin d�pendant de plug1, je leur met une d�pendance vers mon point d'extension extensionBonus

    Ensuite pour pouvoir acc�s � ma classe depuis plug1, j'utilise la m�thode suivante :
    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
    private static Class getControlerClass(String useCaseId, String className, String activatorName) throws Exception{
    		/*
    		 * We get the activator name in order to get back activator object
    		 * Indeed, when we have this object we can get the classLoader of
    		 * calling plugin so we can found our controler class. We do not directly get
    		 * the controler because all our controler have private constructor and the called 
    		 * process will invoke basic contructor on controler (the private)
    		 *
    		 * We load all plugins who manage useCaseExention
    		 */
    		IConfigurationElement[] decls = Platform.getExtensionRegistry().getConfigurationElementsFor(EXTENSION_POINT);
    		/*
    		 * We skim through the plugin in order to search the correct Activator
    		 */
    		for (int i = 0; i < decls.length; i++){
    			IConfigurationElement element = decls[i];
    			if (activatorName.equals(element.getAttribute("activatorClassName"))){
    						try{
    							/*
    							 * When we found the correct activator, we instanciate the object and 
    							 * use it's classLoader in order to found the controler class
    							 */
    							Object elementTest = element.createExecutableExtension("activatorClassName");
    							return elementTest.getClass().getClassLoader().loadClass(className);
    						}catch(CoreException e){
    							throw e;
    						} 
    						catch (ClassNotFoundException e) {
    							throw e;
    						}
    					}
    		}
    		/*
    		 * If no class was found then we generate a ClassNotFoundException
    		 */
    		ClassNotFoundException exception = new ClassNotFoundException("No class found for : "+useCaseId);
    		throw exception;
    	}
    Dans mon cas, je r�cup�re l'activator du plugin appelant afin d'avoir son classLoader associ� et donc ma class

    Une fois ma class r�cup�r�e, j'utilise l'introspection pour en faire ce que je veux.

    Et voil� le tour est jou�

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. probl�me de NoClassDefFoundError
    Par Nostalgeek dans le forum G�n�ral Java
    R�ponses: 5
    Dernier message: 21/10/2010, 16h27
  2. [Framework] Probl�me ClassPathXmlApplicationContext NoClassDefFoundError
    Par Reno17 dans le forum Spring
    R�ponses: 5
    Dernier message: 03/12/2009, 23h57
  3. Probl�me de NoClassDefFoundError pour un simple programme
    Par houpli dans le forum D�buter avec Java
    R�ponses: 2
    Dernier message: 17/10/2008, 08h30
  4. probl�me d'introspection sous eclipse
    Par rainz dans le forum Eclipse Java
    R�ponses: 4
    Dernier message: 13/05/2005, 17h33
  5. [Applet] NoClassDefFoundError probl�me
    Par raj dans le forum Applets
    R�ponses: 8
    Dernier message: 28/12/2004, 13h52

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