[JAVA] Charger dynamiquement des JAR dans une applet

Charger dynamiquement des JAR dans une applet [JAVA] - Java - Programmation

Marsh Posté le 07-07-2004 à 14:23:47    

Je développe une applet MonProg qui interagit avec 2 plugins (pour simplifier) nommés plugin1 et plugin2
Ces plugins ne sont pas utilisés par la majorité des utilisateurs, c'est pourquoi je ne souhaiterai les charger que nécessaire.
 
Le fichier HTML décrivant mon applet ressemble à ça :
 

Code :
  1. <html>
  2. <body>
  3.    <applet
  4.       codebase="/java"
  5.       archive=MonProg.jar
  6.       code=com.noldor.MonProg width=500 height=300>
  7.    </applet>
  8. </body>
  9. </html>


 
J'ai trouvé une solution qui marche à moitié :
 
dans le fichier manifest, je fais pas référence à plugin1 et plugin2 dans le Class-path:
 

Code :
  1. Main-Class: com.noldor.MonProg
  2. Class-path: plugin1.jar plugin2.jar


 
Lorsque l'utilisateur veut utiliser le plugin2, je charge "paresseusement" la classe :
 

Code :
  1. Class x = Class.forName("com.plugins.Plugin2" );
  2. Constructor[] cons = x.getConstructors();
  3. cons[0].newInstance(null);


 
cela fonctionne bien à une nuance près : le classloader de l'applet va chercher dans l'ordre des archives du classpath donné dans le fichier manifest. Résultat, lorsque j'instancie Plugin2, il me charge plugin1.jar puis plugin2.jar
J'aimerais biensur qu'il ne me charge que plugin2.jar
Est-ce faisable ?
 
J'ai pensé à utiliser une URLClassLoader, mais c'est impossible d'instancier un nouveau CLassLoader dans une applet sans signer son applet (ce que j'aimerais éviter).  


---------------
http://runnerstats.net
Reply

Marsh Posté le 07-07-2004 à 14:23:47   

Reply

Marsh Posté le 07-07-2004 à 21:47:44    

pas de succès avec ce topic :(
je tente un up

Reply

Marsh Posté le 08-07-2004 à 01:02:08    

pas sur mais:
http://java.sun.com/docs/books/tut [...] nload.html
 

Citation :

More about the Class-Path Header
 
    If an applet or application uses more than one extension, you can list multiple URLs in a manifest. For example, the following is a valid header:
 
Class-Path: area.jar servlet.jar images/
 
    In the Class-Path header any URLs listed that don't end with '/' are assumed to be JAR files. URLs ending in '/' indicate directories. In the preceding example, images/ might be a directory containing resources needed by the applet or the application.
 
    You can also specify multiple extension URLs by using more than one Class-Path header in the manifest. For example:
 
Class-Path: area.jar
Class-Path: servlet.jar
 
    Download extensions can be "daisy chained", meaning that the manifest of one download extension can have a Class-Path header that refers to a second extension, which can refer to a third extension, and so on.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-07-2004 à 01:03:48    

déjà comment ça se passe pour ce d/l ? ton applet vois qu'il lui manque une classe donc elle essaie de chopper ce qu'il y a sur le Class-Path de ton meta inf? Ou c'est plus subtil?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-07-2004 à 09:09:21    

the real moins moins a écrit :

déjà comment ça se passe pour ce d/l ? ton applet vois qu'il lui manque une classe donc elle essaie de chopper ce qu'il y a sur le Class-Path de ton meta inf? Ou c'est plus subtil?


pour simplifier (en virant le cas de la JVM Microsoft), c'est ça : quand j'appelle Class x = Class.forName("com.plugins.Plugin2" ); l'applet se rend compte qu'elle ne l'a pas, et va la chercher sur le Class-Path du meta-inf


---------------
http://runnerstats.net
Reply

Marsh Posté le 08-07-2004 à 10:58:30    

ouais donc forcément aucun moyen de savoir de quel jar ça vient. j'vois pas pourquoi j'ai vaguement cru que les mettre sur deux lignes changerait quoi que ce soit [:kiki]
 
 
.. et utiliser le CL de l'applet (plutot que d'en instancier un nouveau) ça aiderait pas? http://java.sun.com/sfaq/#appletCL


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-07-2004 à 11:17:24    

the real moins moins a écrit :

ouais donc forcément aucun moyen de savoir de quel jar ça vient. j'vois pas pourquoi j'ai vaguement cru que les mettre sur deux lignes changerait quoi que ce soit [:kiki]
 
 
.. et utiliser le CL de l'applet (plutot que d'en instancier un nouveau) ça aiderait pas? http://java.sun.com/sfaq/#appletCL


non, en effet, l'applet peut pas savoir dans quel jar chercher
 
Utiliser le ClassLoader de l'applet ? je vois pas comment faire, y a pas de moyen de spécifier une URL malheureusement :/


---------------
http://runnerstats.net
Reply

Sujets relatifs:

Leave a Replay

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