-
JAVA RMI dans un servlet
Bonjour :lol: quelqu'un peut m'aider svp?????????????????????
J'ai ce probleme en RMI et je suis bloqué dessus depuis 3 jours
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: org.nose.impl.rmiServer.ServerConnection
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
c'est une execption coté client ;Ce qui est bizare c'est qu'il me dit qu'il trouve pas l'interface ServerConnection que j'ai definie coté serveur ,car normalement le client est sensé avoir juste le stub non???
-
Non: en plus du stub, le client doit aussi connaître toutes les classes qui sont utilisées dans le message transferé par RMI (ainsi que les classes des objets agrégés qui y sont agrégés), afin de pouvoir désérialiser les messages qu'il reçoit.
-
Merci pour votre reponse mais je vais m'expliquer mieux :
J'ai vraiment besoin d'aide surtout avec des exemples de code ou je peux voir comment on peut appeler un serveur RMI depuis une servlet
Je bloque sur cette execption depuis 3 jours :
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: org.nose.impl.rmiServer.ServerConnection
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ça bloque lorssqu'il arrive sur cette ligne :
h = (ServerConnection)Naming.lookup("o1");
en sachant que je suis dans une servlet qui s'execute sur TOMCAT ;je sais pas si ça peut poser un probleme de JVM......
Merci à vous mes amis
-
Ça ressemble à un problème de serialVersionUID.
Tes classes Serializable possèdent ce champ ?
(le plus simple est de rajouter private static final long serialVersionUID = 1; à toutes ces classes)
-
merci pour votre aide,je vais essayer de faire et voir ce que ça va donner
-
j'ajoute ça dans dans la classe de l'objet serveur que je veux rendre remote ???
-
Toutes les classes implémentant Serializable.
Ça n'est pas une obligation, si tu mets ces classes à part dans un jar et que tu partages ce jar entre le client et le serveur, tu peux te contenter de la génération de ce numéro, mais personnellement, je trouve ça plus propre et plus ouvert...
Ceci dit, ton problème peut également venir du fait qu'il ne trouve tout simplement pas la classe demandée (un jar hors du périmètre, etc...)
-
merci à vous,
en fait toutes ces solutions (creer le jar des .class) et le mettre dans le projet client,.....) j'ai testé et ça marche pas
Donc je pense que c'est plutot le serveur TOMCAT qui plante car : ecoutez bien svp :D :
J'ai définis le un objet client RMI dans le projet web et il se CONNECTE vers le serveur RMI et tou....sans probleme
MAIS : j'ai pris le meme code de ce client et je l'ai integré dans la servlet
de ce projet web (CAR JE VEUX Q C LA SERVLET QUI VA SE CONNECTER VERS LE SERVEURS RMI) et la à ma grande surprise voila l'exception qui vient :
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Client RMI servlet : le nombre d'objets enregistré dans le sdn est :2
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: org.nose.impl.rmiServer.ServerConnection
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
en sachant que "ServerConnection" c'est mon interface serveur.
:oops: VOUS REMARQUEZ QUIL TROUVE BIEN LE NOMBRE DOBJETS QUI SONT ENREGISTRES DANS RMI :oops: et quand il passe o lookup() la ça plante.
Voila svp si quelqu'un a deja reussi à faire communiquer une SERVLET avc un SERVEUR RMI ,merci d'avance pour votre aide
je Galére vraiment
-
Bon merci à vous .
Voila la solution :
creer un jar du repertoire "bin" de vos classes RMI (coté serveur) et le copier dans le projet web (ou se trouve la servlet) dans le repertoire webContent/WEB_INF/lib dans le cas d'un client web ou directement dans le repertoire "bin" dans le client RMI ,et rechargez eclipse ,et ça marche