St�phane PIEL wrote: > Salut la liste, > > J'ai un petit probl�me de communication RMI entre une appli Web > (servlet/jsp, sous Tomcat) et un serveur RMI. > Je n'arrive pas � envoyer, depuis ma servlet, un objet (s�rialisable) > vers mon serveur RMI (en param�tre d'une m�thode). Par contre, je > recois bien ce meme type d'objet depuis le serveur sans probl�me > > Voila ce que j'essaie de faire: > > MonObjetSerialisable monObj = new MonObjetSerialisable(); > // Ce qui suit ne marche pas !!! > monObjetRMI.envoyerObjet( "nomDeLobjet", monObj ); > > Et j'obtiens une SocketException: > java.rmi.MarshalException: error marshalling arguments; nested > exception is: > java.net.SocketException: Connection aborted by peer: socket write error > java.net.SocketException: Connection aborted by peer: socket write error > at java.net.SocketOutputStream.socketWrite(Native Method) > at java.net.SocketOutputStream.write(SocketOutputStream.java:96) > at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:72) > at java.io.BufferedOutputStream.write(BufferedOutputStream.java:116) > at java.io.ObjectOutputStream.drain(ObjectOutputStream.java:1463) > at java.io.ObjectOutputStream.setBlockData(ObjectOutputStream.java:1486) > at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:407) > at sun.rmi.server.UnicastRef.marshalValue(UnicastRef.java:268) > at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:106) > at MonObjetRMI_Stub.envoyerObjet(Unknown Source) > > Par contre, dans le m�me cadre de ma servlet, ce qui suit fonctionne: > > MonObjetSerialisable monObj = monObjetRMI.recupererObjet( > "nomDeLobjet" ); > > Je ne comprends pas ce qui fait que le serveur RMI serait capable de > s�rialiser l'objet vers la servlet, et qu'au contraire, la servlet ne > puisse s�rialiser l'objet vers le serveur RMI.
le serveur RMI pour contacter ta servlet ne fait pas de RMI a proprement parler, (ta servlet n'est pas serveur RMI non?) il fait un simple appel, ouvre une socket et serialise tes donn�es...c'est la serialisation HTTP... il n'y a pas la moin dre notion de distribution de services sur un bus... il y a simplement invocation de service via le reseau.... > > J'ai v�rifi�, j'ai bien les m�me .class des stubs, skels et objet > serialisable dans le classpath de mon appli web que dans celui du > serveur RMI... > > Qui plus est, le m�me code, extrait de la servlet, fonctionne tr�s > bien dans le cadre d'une appli stand-alone !!! mais si tu precises plus ton probleme , tu nous diras que c'est une fois connecte a un serveur RMI que cela fonctionne, apres avoir fait un lookup non? > > Je s�che :-) > > Quelqu'un aurait-il une id�e ? > oui, assez precise m�me... tu essaies d'invoker une methode distribution dans un contexte ou il n'y a pas de m�canique permettant de prendre en charge le marshalling de ta requete sur un bus.... bref ta servlet croit declencher un appel a un objet normal et l� patatra!!!! tu peux toujours bricoler les properties de ton servlet engine, de mani�re a pouvoir faire des lookups JNDI (RMI mais c'est la m�me chose) et de l� faire vraiment du RMI... mais cela me parait etrange comme design.... Jerome
