|
|
|
|
[JAVA]Cast de Remote avec RMI
Dernière réponse le 1 jui 2007 à 10:10:44 yozine, le 28 jun 2007 à 10:34:39Salut, je galère un peu pour faire tourner RMI avec Eclipse. Un peu d'aide serait grandement appréciée !
J'ai créé deux packages, qui correspondent au client et au serveur de l'appli que je veux distribuer :
STEU_client
STEU_server
le serveur contient:
- InterfaceEau.java (interface distante)
- EauImp.java (etend UnicastRemoteObject)
- StartEau.java (lance le registre et enregistre le service de EauImpl)
- EauImp_stub.java (est généré par rmic)
+ d'autres classes pas utiles ici
Client contient:
- InterfaceEau.java (interface distante)
- TestRMI.java (client qui appelle la souche RMI)
+ ...
Je génère le stub côté serveur (visiblement avec JRMP 1.2 il n'y a plus de skel côté client)
Je met en place un security manager RMI cote client et serveur.
Je lance mon registre RMI sur le port 'localhost:1099', et j'enregistre le service distant avec 'bind'. Jusque là, pas de soucis.
Puis j'appelle le service enregistré, avec un client par 'lookup'.
Je caste l'objet Remote renvoyé par le nom de mon interface distante.
Et là j'ai ..
.. l'erreur en question :"... java.lang.ClassCastException: rmi.steu.server.EauImpl_Stub cannot be cast to rmi.steu.client.InterfaceEau ..."
Quelqu'un a une idée ?
Configuration: Windows XP Firefox 1.0.4
Salut, je galère un peu pour faire tourner RMI avec Eclipse. Un peu d'aide serait grandement appréciée !
|
Allez un peu de code pour illustrer:
package rmi.steu.client;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RMISecurityManager;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class TestRMI extends UnicastRemoteObject {
private InterfaceEau init;
private String retourRMI;
public TestRMI() throws RemoteException {
try {
System.setSecurityManager(new RMISecurityManager());
init = (InterfaceEau) Naming.lookup("rmi://localhost:1099/communique_etat");
retourRMI = init.getBonjour();
System.out.print(retourRMI);
} catch ... |
Ouep voila pour le binding, tout ca c'est dans StartEau, je binde un objet EauImpl :
try {
java.rmi.registry.LocateRegistry.createRegistry(1099);
//System.out.println("Mise en place du Security Manager ...");
System.setSecurityManager(new java.rmi.RMISecurityManager());
} catch(Exception e) {
System.out.print("Un registre RMI est déjà existant.\n\n");
}
try { // enregistre le service
Naming.bind("communique_etat", new EauImpl());
} catch |
Ca y est, j'ai trouvé le problème.
|
Effectivement c'est au niveau du classloader que tu va devoir tout paramétré.
|
En fait pour le classloader ca a pas l'air trop complique il y a juste une fonction a appeler je crois, mais faut mettre les classes dans un jar, je crois, ca je sais pas faire, mais bon c pas trop grave.. Je voulais juste savoir comment marche L'appel par RMI, et le faire tourner.
|

