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



Répondre à