peut-on modifier un archive jar (compilé) sans avoir le projet original ?
bonsoir; dans le cadre dans mon PFE, j'ai développé une plateforme multi-agents où le développeur n'as besoin que le JAR de cette plate-forme pour construire ses applications(SMA : Système Multi-Agents). Je suis entrain de développer quelques exemples pour tester et valider cette plate-forme. Dans un exemple je construit une classe AgentVendeur qui hérite de classe AgentAtomique(qui se trouve dans le JAR). je l'ai instancie et ça marche; mais quand j'utilise des méthodes qui manipule le type AgentAtomique dans le classe de ce JAR et je fais le cast à AgentVendeur; une exception se produit. J'ai pu régler cette exception de telle sorte que la classe AgentVendeur doit se trouve dans le jar de la plate-forme. Mais je ne comprend pas pourquoi la classe AgentVendeur doit se trouver dans le JAR de la plateforme???? et C'est pourquoi je me demande si on peut modifier un archive jar (compilé) sans avoir le projet original ? parce que le développeur n'aura pas le code source de l'application; il travaillera qu'avec son JAR. ET est ce que se trouve un autre moyen pour régler ce problème sans ajouter cette classe au JAR. merci
5 pièce(s) jointe(s)
voici un aperçu sur mon code
bonsoir,
Tous les agents doivent hériter de la classe mère AgentAtomique Pièce jointe 52724.
La méthode ajouterCompétence permet à l'agent d'acquérir dynamiquement des compétences.
la classe Interface présente l'environnement graphique de la plateforme. Le bouton ajouterMain permet d'ajouter une classe qui hérite de la classe Main Pièce jointe 52726. et le bouton exécuterMain permet d'exécuter cette classe.
le code du bouton ajouterMain est le suivant :
Citation:
try {
URL chemins[] = { new URL(MonFiltre.chemin(file.getPath())) };
URLClassLoader loader = new URLClassLoader(chemins);
String chaine = file.getName();
String nom = MonFiltre.nomClass(chaine);
Class cl = loader.loadClass(nom);
Class c = cl.getSuperclass();
if (c.getName().equals("dz.esi.edma.interfacegraphique.Main")) {
main.put(nom, MonFiltre.chemin(file.getPath()));
ListMain.addElement(nom);
....}
}
le code du bouton exécuterMain est le suivant :
Citation:
Object[] tab = jListMain.getSelectedValues();
String classe = tab[0].toString();
String chemin = main.get(classe);
try {
URL chemins[] = { new URL(chemin) };
URLClassLoader loader = new URLClassLoader(chemins);
Class cl = loader.loadClass(classe);
Object o = cl.newInstance();
Class[] type = new Class[] { String[].class };
Method m = o.getClass().getMethod("LeMain", type);
Object arg1 = null;
m.invoke(o, arg1);
........
Dans mon exemple j'ai définit un agent vendeur qui possède un catalogue
Citation:
public class AgentVendeur extends AgentAtomique {
public HashMap<String,Integer> catalogue = null;
.....}
Et j'ai ajouté et exécuté la classe M Pièce jointe 52727qui hérite de Main.
Tout marche. mais quand j'ajoute la compétence UpdateCatalogue à "l'agent V" l'exception se produit au niveau de l'instruction
Citation:
((AgentVendeur)getAgent()).catalogue.put(titre, prix);
La méthode getAgent() retourne l'agent possédant cette compétence (retourne le type AgentAtomique).
La classe UpdateCompétence hérite de la classe CompétenceAction Pièce jointe 52731 Pièce jointe 52730.
A l'ajout de cette compétence, la méthode Action sera ajoutée à la file des tâche de l'agent qui l'exécute par la méthode exécuter du cycle de vie actif (voir la classe AgentAtomique).
si vous avez d'autre questions vous n'avez qu'à demander. merci d'avance tchiz