[JAVA] Creation de classes at runtime...

Creation de classes at runtime... [JAVA] - Programmation

Marsh Posté le 14-03-2002 à 17:24:18    

Salut,
 
J'ai une petite question assez pointue... que j'ecris sans grande conviction. :)
 
Tout d'abord la situation : j'ai besoin de creer des classes a la volee at runtime. Ces classes seront des classes d'interposition entre deux objets.
 
En fait, a partir de n'importe quel objet O j'aimerais creer une classe d'interposition Io respectant la meme interface que O (ou O n'a aucune variable publique). Les applications n'obtenant pas de references sur O mais sur Io qui communique avec patati patata [le reste n'est pas important]...
 
Je possede deja la classe I de laquelle toutes les classes Io vont heriter, a present il me faut recupperer les interfaces de la classe O et creer Io at runtime (je veux un array de bytes representant la classe en sortie, pas de fichier .java ni de .class).
 
Pourquoi ne pas creer les classes Io avec une moulinette Offline puis les utiliser dans l'application ? Car le but est d'avoir un espace memoire distribue et regit par des regles de securite tournant en tant que service (sur une plateforme donnee). On ne peut savoir a l'avance quels seront les objets inseres.
 
Ma question est la suivante : quels sont les outils que vous connaissez pour la creation de classes a la volee (pour une JDK 1.1.8) ? L'outils doit etre leger au maximum (creation at runtime sur un site pas forcement puissant, vu que tout site faisant tourner la plateforme peut lancer ce service)...
 
Jusqu'a present j'utilisais SableCC pour ma moulinette offline (autre utilisation), mais cet outil est trop lourd... Idem pour JavaCC... BCEL pourrait etre une solution mais son utilisation n'est pas claire a mon gout.
 
Que connaissez vous d'autre ? Savez vous ou trouver des exemples de ce genre ?
 
A+ et merci

Reply

Marsh Posté le 14-03-2002 à 17:24:18   

Reply

Marsh Posté le 14-03-2002 à 19:36:09    

Une idée jetée comme ça en passant :
 
Tu ne peux pas essayer d'utuliser la réflexion pour créer et compiler la classe dont tu as besoin à la volée ?
 
A++

Reply

Marsh Posté le 14-03-2002 à 20:55:07    

Salut
 
La reflexivite peut etre utilisee pour trouver l'interface oui...  
 
Mais la n'est pas vraiment le probleme : il faut que je cree une classe de toutes pieces et je ne veux pas me retapper la creation d'un constant pool et de bytecode a la main en analysant une classe. Certains outils le font je ne vais pas reinventer la roue (la modifier pour l'alleger eventuellement). Ceci sans dire qu'on desire eviter l'utilisation de la reflexivite.
 
J'ai parle d'une classe d'interposition, mais en realite je dois en creer deux qui donnent quelque chose du genre :
 
service : Service->Ios->O  
client :  Application->Ioc  
lien application-objet : Application~>O
lien reel : Ioc=>Service
 
Ou :
 
-> est une reference forte
~> est une reference faible (c.f. plus bas)
=> est une communication par socket (p.ex.)
 
Le service recoit des messages de Ioc pour l'objet O. Il doit trouver localement la classe d'interposition Ios correspondant a l'objet qui est elle capable de communiquer avec celui-ci.
 
Ioc est la classe d'interposition cote client, elle sait ou trouver (s'il n'a pas migre) le service et communiquer avec lui. Elle ne communique pas directement avec l'objet ni la classe d'interposition Ios, mais envois des messages au service. Les applications communiquent avec cette classe sans savoir ou se trouve le service ni l'objet.
 
Le passage de Ioc a Ios est ce qu'on appelle une reference faible. L'avantage est que cette methode permet un controle des acces sur les objets, ce qui permet d'eviter l'aliasing et le locking d'objets, mais aussi de faire migrer les clients de facon transparente.
 
Eventuellement, un objet dans l'espace memoire partage pourrait migrer vers un autre espace ce qui donnerait apres modification de Ios... :
 
serviceNew : ServiceNew->IosNew->O  
serviceOLD : Service->IosReplaced->IocNew
client :  Application->Ioc  
lien application-objet : Application~>O
lien reel : Ioc=>Service=>ServiceNew
 
La plateforme permettant de simplifier (par envoi d'evenements) le tout si une migration a ete detectee en un truc du genre :
 
serviceNew : ServiceNew->IosNew->O  
client :  Application->Ioc  
lien application-objet : Application~>O
lien reel : Ioc=>ServiceNew
 
Bref meme si ce n'est pas fini c'est deja :crazy:  
 
Alors qqun connait des outils de creation de classes a la volee ? :lol:

Reply

Marsh Posté le 14-03-2002 à 20:56:11    

Ah oui :  
 
comme => est asynchrone, ~> l'est aussi :)

Reply

Marsh Posté le 15-03-2002 à 10:59:32    

up sans grande conviction...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed