Bonjour,
Je développer une application en RMI et mon client me dit qu'il ne trouve pas mon Stub.
Mon stub ce trouve dans un serveur http dans un jar. Il n'est n'y avec le client, ni avec le serveur. Comment faire?
Version imprimable
Bonjour,
Je développer une application en RMI et mon client me dit qu'il ne trouve pas mon Stub.
Mon stub ce trouve dans un serveur http dans un jar. Il n'est n'y avec le client, ni avec le serveur. Comment faire?
Tu dois trouver le moyen de charger ton interface qui hérite de Remote dans le classpath du client. Pour cela tu as la classe RMIClassLoader, pense à initialiser le paramètre java.rmi.server.codebase avec le chemin du jar (ps : lien HTTP vers le serveur) contenant l'interface dont je t'ai cité.
J'ai commencé à faire sa pour le client mais ensuite je bloque
Code:
1
2
3
4
5
6 Properties p = System.getProperties(); String url=p.getProperty("java.rmi.server.codebase", "http://127.0.0.1:80/rmi.jar"); Class ClasseClient = RMIClassLoader.loadClass(url, "MonInterface"); //lancer le client Constructor [] C = ClasseClient.getConstructors();
J'ai regarder ce tuto là mais c'est au niveau du client que je bloque.
http://cedric.cnam.fr/~bouzefra/cours/cours_RMI_SAR.pdf
Car mon interface n'est pas dans le client mais ailleurs
Non mais totot je sais très bien ce que tu es en train de faire, je te rappelle que je suis passé par là moi aussi ;)
Le problème c'est que tu as oublié une étape lorsqu'on charge du code ne faisant pas parti du classpath initial. La chose dont je te parle est indiqué dans le lien que tu montres. A mon avis tu l'as omis car tu n'as pas compris à quoi ça servait... Est-ce que tu vois de quoi je parle ?
Si c'est le sécurité Manager, je l'ai utiliser:
Je l'ai mi dans le client et dans le serveurCode:
1
2
3 if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); }
Il faut le mettre dans le client uniquement, pas le serveur (sauf si tu es dans un cas où le serveur charge lui aussi du code, mais je ne pense pas que ce soit le cas). Il me semble que c'est un RMISecurityManager que tu dois utiliser. Bon et bien il ne te reste plus qu'à accorder les droits.