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

  FORUM HardWare.fr
  Programmation
  Java

  URLClassLoader et FilePermisson

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

URLClassLoader et FilePermisson

n°231587
bartleby
Posté le 21-10-2002 à 01:06:21  profilanswer
 

Bonjour a tous,
 
Toujours dans mon projet d'agent mobile, je rencontre des problemes pour charger dynamiquement un nouvel agent qui arrive sur la plate-forme.
 
Je pensais proceder comme ca :
 
- Mettre le .jar ou .class dans un repertore c:\X,  puis utiliser la class URLClassLoader pour charger mon agent ( puis deserialisation puis lancement de l'agent par ( .start() ).
 
J'en suis a faire des tests prealables, pour voir si c'est viable comme technique :  
 
Bin ca marche pas :kaola:, ou alors pas aussi simplement   :
 

Citation :

Exception in thread "main" java.lang.IllegalAccessError: class Agent cannot acce
ss its superinterface Testable
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
        at SimpleClassTester.main(SimpleClassTester.java:19)


 
La class Agent est donc dans le repertore c:\X, lors de la compilation le serveur d'acceuil ne possede que l'interface qu'implemente agent ( interface Testable). La classe agent est compile a l'aide du meme interface ( Testable en l'occurence).
 
J'ai essaye de jouer avec les "FilePermission" en read en execute en tout ce que tu veux mais ca n'a pas eu d'effet.
 
Y aurait-il un pro du classloader dans le coin  ;) ?

mood
Publicité
Posté le 21-10-2002 à 01:06:21  profilanswer
 

n°231607
benou
Posté le 21-10-2002 à 08:29:58  profilanswer
 

de quelle façon est ce que tu sérialize ton agent ?  
 
Logiquement, pour faire ce que tu veux, tu soit transmettre le bytecode java de la classe en plus de l'état de l'agent.
 
Il faut ensuite que ton serveur lise ce bytecode, et utilise la méthode defineClass(String name, byte[] b, int off, int len) du ClassLoader pour charger l'objet Class correspondant. Ensuite tu fais un newInstance, tu recharge l'état, tu créés un thread à qui tu balance l'état de l'agent et la classe ou ca roule !
 
maintenant, tu risques d'avor des problème si tu veux pouvoir modifier le code d'implémentation de ton agent côté client et l'envoyer une 2e fois sur ton serveur. Dans ce cas là, je crois qu'il faut que tu gères ton propre ClassLoader et ca je sais pas trop comment ca fonctionne ...

n°231608
benou
Posté le 21-10-2002 à 08:31:48  profilanswer
 

je connaissait pas la class URLClassLoader. intéressant !  
 
tu es sur de ne pas avoir mélangé l'état de l'agent avec sa classe ?

n°231610
benou
Posté le 21-10-2002 à 08:45:11  profilanswer
 

l'exception que tu te manges est assez surprenante : elle est même pas documentée dans la javadoc.
 
Tu pourrais montrer ton code d'encodage de l'agent et de rechargement de l'agent par le serveur ?

n°231958
bartleby
Posté le 21-10-2002 à 18:20:02  profilanswer
 

Hm, en fait toute la partie transfert du jar, serialisation de l'agent n'est pas encore faite.
 
Je suis actuellement en train de tester les differentes possibilites ( enfin plutot moyen de faire ce que je veux).
 
J'ai trouvé l'URLClassLoader dans un bouquin: "Java et Internet" de chez Vuibert et pour eux ca marchait bien....mais il devait surement utiliser une version plus ancienne (j'utilise 1.4...)!
 

Citation :

maintenant, tu risques d'avor des problème si tu veux pouvoir modifier le code d'implémentation de ton agent côté client et l'envoyer une 2e fois sur ton serveur. Dans ce cas là, je crois qu'il faut que tu gères ton propre ClassLoader et ca je sais pas trop comment ca fonctionne ...


 
Je ne pense pas pour le moment modifier le code de mon agent, je me contenterais de la serialisarion pour modifier son comportement.
 

Citation :

Il faut ensuite que ton serveur lise ce bytecode, et utilise la méthode defineClass(String name, byte[] b, int off, int len) du ClassLoader pour charger l'objet Class correspondant


 
Je vais plutot essayer cette methode ( la methode classique en fait) en esperant qu'elle marche)....enfin, URLCLassLoader me semblait quand meme bien pratique :( !
 
Il allait meme m'extraire les .class des .jar et surement resoudre les problemes de dependances....je vais quand meme creuser encore un peu ces histoires de securité c'est trop bete  :cry:  :cry: !!
 


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

  URLClassLoader et FilePermisson

 

Sujets relatifs
Plus de sujets relatifs à : URLClassLoader et FilePermisson


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)