Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1301 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [java] Création dynamique de classes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java] Création dynamique de classes

n°1047598
jnoune
Posté le 14-04-2005 à 16:24:15  profilanswer
 

Bonjour,
 
Je génère une série de sources java en dynamique (des .java) dans le but de réutiliser ces objets par la suite, au cours de la même exécution. Seul problème il semble que les fichiers sources générés durant l'exécution ne soient pas automatiquement détectés par ma jvm.
 
Je résume :
-   Génération d'un .java définissant une classe "Foo" conforme et dans un repertoire recensé par le classpath
-   Recherche de la classe "Foo" pour faire de la réflexivité dessus ou instanciation d'un Foo
     Class monFoo = Class.forName( "Foo" );  
    --> et là j'obtiens un beau classNotFound
 
A ce que j'ai cru comprendre, la JVM recherche dynamiquement dans son classpath les définitions des classes qu'elle ne connaît pas encore. Au démarrage, elle est parfaitement capable de détecter le .java et le compiler à la volée si nécessaire, est-ce aussi le cas en cours d'exécution ou n'est-elle capable de ne retrouver que des classes compilées (et ne peut forcer la compilation automatique à l'excécution)?
 
Autre piste j'utilise Eclipse et j'ai pu remarquer que même en relançant une seconde fois l'application, elle ne compile toujours pas mes nouveaux fichiers. Il faut auparavant faire un "refresh" physique du projet ou du répertoire pour qu'il relise et découvre les nouveaux fichiers. Il compile alors sans problème après le refresh, mes classes sont bien trouvées. Le problème peut-il alors venir d'Eclipse qui créerait des caches pour éviter le parcours 'live' des répertoires à chaque fois, et dans ce cas y'a-t-il moyen de le forcer à rafraîchir et reparcourir toute l'arborescence?
 
Si quelqu'un a une idée pour me permettre de faire ça, je suis preneur!

mood
Publicité
Posté le 14-04-2005 à 16:24:15  profilanswer
 

n°1047633
phnatomass
Je m'empare de ton esprit !!
Posté le 14-04-2005 à 16:41:27  profilanswer
 

jnoune a écrit :


A ce que j'ai cru comprendre, la JVM recherche dynamiquement dans son classpath les définitions des classes qu'elle ne connaît pas encore. Au démarrage, elle est parfaitement capable de détecter le .java et le compiler à la volée si nécessaire, est-ce aussi le cas en cours d'exécution ou n'est-elle capable de ne retrouver que des classes compilées (et ne peut forcer la compilation automatique à l'excécution)?


 :non:  C'est le compilateur qui peut compiler des fichiers qui ne lui sont pas spécifié en argument.
Par contre la jvm ne fonctionne qu'avec des classes compilé. D'ailleurs une JRE ne contient pas de compilo.
Regarde du coté de javacc pour compiler des classes à partir de ton prog.

n°1047682
jnoune
Posté le 14-04-2005 à 17:07:15  profilanswer
 

Ah oui effectivement je crois que j'avais un peu mélangé les rôles entre compilo et jvm.. :-/
Ca doit être l'effet ide où on voit plus ce qui se passe.
Merci beaucoup de ton éclairage, je vais de ce pas voir du coté de javacc si je peux y trouver mon bonheur!

n°1047835
the real m​oins moins
Posté le 14-04-2005 à 18:33:02  profilanswer
 

euh javacc c'est pas pour generer des parsers ? :heink:
 
et y'a des tas de libs qui generent du bytecode à la volée(cglib entre autres), ainsi qu'une palanquée de langage de scripts basés sur java (groovy, tous les dérivés de beanshell, ...)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1048366
zombinette
Posté le 15-04-2005 à 10:01:53  profilanswer
 

As tu pensé aussi à bien configurer Eclipse en mode Build Automatically? (Oglet Projet/ Option Buld Automatically)
Comme cela, Eclipse "decouvre" les nouveaux fichiers tout seul

n°1048375
sebi
Posté le 15-04-2005 à 10:07:12  profilanswer
 

zombinette a écrit :

As tu pensé aussi à bien configurer Eclipse en mode Build Automatically? (Oglet Projet/ Option Buld Automatically)
Comme cela, Eclipse "decouvre" les nouveaux fichiers tout seul


meme avec le build automatique faudra qu'il refresh son workspace et puis ca regle pas son probleme, il veut compiler pendant l'execution.

n°1048666
benou
Posté le 15-04-2005 à 14:13:06  profilanswer
 

tu peux aussi regarder comment s'est fait du côté de tomcat pour compiler les servlets générée à partir des jsps.
au début ils utilisaient la classe cachée du compilateur (com.sun.tools.javac.Main ou un truc dans le genre), ensuite ils ont utilisé la librairie ant (qui utilisait javac.Main derrière je pense), puis je crois que dans la version 5.5 ils utilisent le compilateur d'eclipse.
 
ca te fait quelques pistes de recherche ;)
 
remarque : que ca soit avec lavac.Main ou ant, un des gros soucis était qu'il fallait se mapper sur la compilation enlign de commande, c'est à dire filer une chaine contenant le classpath (=> impossible de filer simplement un ClassLoader), filer le chemain vers un .java (impossible de filer un InputStream), etc ...
Je ne sais pas si c'est mieux fait dans le compilo d'eclipse


Message édité par benou le 15-04-2005 à 17:42:46

---------------
ma vie, mon oeuvre - HomePlayer
n°1048948
the real m​oins moins
Posté le 15-04-2005 à 17:33:47  profilanswer
 

benou >> tu veux dire "jsps" et pas "jars", dans ta premiere phrase.
 
(et si vous voulez mon avis, je subodore la grosse anguille sous la roche du design foireux)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1048973
benou
Posté le 15-04-2005 à 17:43:17  profilanswer
 

the real moins moins a écrit :

benou >> tu veux dire "jsps" et pas "jars", dans ta premiere phrase.


tout à fait  :jap:


---------------
ma vie, mon oeuvre - HomePlayer
n°1049204
jnoune
Posté le 15-04-2005 à 21:38:03  profilanswer
 

Clair qu'il y a quelques pistes :)
Merci beaucoup pour toutes ces bonnes idées.
Pas eu le temps de trop approfondir mais je suis parti sur javacc et en effet fallait se générer son parseur etc, légèrement fastidieux s'il faut se recoder un compilateur.. :/
 
Par contre CgLib ça l'air pile-poil l'outil qu'il faut pour ce genre de trucs! Seul problème, je n'arrive pas à comprendre comment on peut utiliser cet engin pour faire une simple génération.. Je pensais qu'il fallait passer par le enhancer() mais impossible de trouver comment lui envoyer la source de ma classe. C'est surement simple mais comme je ne suis pas encore super initié au java et que les exemples ne pululent pas trop je suis un peu perdu..
Sinon il ya toujours la soluce du javac.Main, juste l'histoire du classpath un peu génante, mais bon comme ça me semble de loin le plus simple à mettre en place et que ce n'est pas non plus primordial dans le cadre de mon programme, ça me paraît encore le plus abordable..
Si jamais je peux fouiller tomcat je donnerai des retours car cette soluce me plairait bien aussi!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [java] Création dynamique de classes

 

Sujets relatifs
création d'un login pour plusieurs sitesTomcat 5 comment rrecharger mes classes à chaud
parseur de fichier rng en java[JAVA] String et caractères html
java qui crashe / ant[JAVA] Lancer une commande linux à partir d'un prog java
[JAVA] Tester un JTexfieldParsing de XML en java -DOM-SAX-JAXB?
Traitement de video webcam - C++ vs Java[PDF Dynamique] Comment récupérer les infos dans un pdf par du php?
Plus de sujets relatifs à : [java] Création dynamique de classes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR