Ver Mensaje Individual
  #5 (permalink)  
Antiguo 03/05/2010, 07:21
moisesvs
 
Fecha de Ingreso: junio-2009
Mensajes: 65
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Generar stub para paso por referencia en RMI

Voy a intentar reformular mi problema:

Tengo un objeto Usuario, que es el que quiero enviar como referencia a un objeto RMI, bien, este objeto usuario no puede tener la misma dirección de memoria que otro, entonces la unica forma de pasarlo, es pasandole el STUB.

Bien la pregunta es como genero ese STUB, de la forma que lo he hecho es la siguiente, haciendo el Usuario implemente la interfaz Remote (se genera el STUB) y después, cuando invoco el metodo remoto le meto el usuario (supongo que el stub) como paso por referencia.

¿Estoy en lo cierto?

Os paso el código...


public class Usuario implements Remote{

private String nombre;

public Usuario(String n) throws RemoteException{
this.setNombre(n);
}

public void setNombre(String nombre)throws RemoteException {
this.nombre = nombre;
}

public String getNombre() throws RemoteException{
return nombre;
}
}

De esta forma, cuando llamo a un metodo del objeto RMI, lo que hago es:

Usuario u = new Usuario("Pepe");
objetoRemoto.ponerUsuario(u);
System.out.println("Nombre del usuario"+u.getNombre());

Pero al hacer el poner usuario del objeto remoto, me da un excepción que es la siguiente:

java.rmi.MarshalException: error marshalling arguments; nested exception is:
java.io.NotSerializableException: RMI.Prueba
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:1 38)
at java.rmi.server.RemoteObjectInvocationHandler.invo keRemoteMethod(RemoteObjectInvocationHandler.java: 178)
at java.rmi.server.RemoteObjectInvocationHandler.invo ke(RemoteObjectInvocationHandler.java:132)
at $Proxy0.prueba(Unknown Source)
at RMI.PruebaServ.doGet(PruebaServ.java:25)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:627)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:729)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:873)
at org.apache.coyote.http11.Http11BaseProtocol$Http11 ConnectionHandler.processConnection(Http11BaseProt ocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.process Socket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThr ead.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlR unnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.NotSerializableException: RMI.Prueba
at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1156)
at java.io.ObjectOutputStream.writeObject(ObjectOutpu tStream.java:326)
at sun.rmi.server.UnicastRef.marshalValue(UnicastRef. java:274)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:1 33)
... 20 more

Según parece me da que el error es que no esta serializado, pero la idea es que si el objeto se serializa se pasaría por valor, ¿no?

Haber si alguien me puede ayudar.

Muchas Gracias