Foros del Web » Programación para mayores de 30 ;) » Java »

Generar stub para paso por referencia en RMI

Estas en el tema de Generar stub para paso por referencia en RMI en el foro de Java en Foros del Web. Hola a todos, Mi duda es que quiero generar un paso por referencia a un metodo RMI, es decir, el metodo RMI tendrá la siguiente ...
  #1 (permalink)  
Antiguo 02/05/2010, 16:34
 
Fecha de Ingreso: junio-2009
Mensajes: 65
Antigüedad: 14 años, 10 meses
Puntos: 0
Generar stub para paso por referencia en RMI

Hola a todos,

Mi duda es que quiero generar un paso por referencia a un metodo RMI, es decir, el metodo RMI tendrá la siguiente cabecera:

public void recibirUsuario(Usuario u);

Y recibira un usuario como parametro, a este usuario, le quiero colocar un estado cuando llegue al RMI, de esta forma u.setEstado("Registrado");

Para ello, necesito pasarle un Stub en la llamada, para que la dirección de memoria sea la misma que el llamante...

Pero no se como puedo hacer eso, dado a que la clase Usuario, implementa la Remote, pero me esta dando un excepcion no se crea su Stub.

Como puedo solucionarlo, muchas gracias!
  #2 (permalink)  
Antiguo 02/05/2010, 18:54
Avatar de dackiller  
Fecha de Ingreso: septiembre-2003
Ubicación: The Matrix
Mensajes: 341
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: Generar stub para paso por referencia en RMI

Hola, lo mas probable es que no consiga la implementacion Remote. Con la jre actulizada no necesitas generar los Stub ella las genera automaticamente. Sin embargo, recuerda que debes tener las clases Remote en ambas aplicaciones para que funcione. Estas deben estar en el classpath o deben estar accesibles para ser copiadas por la JVM cuando las requiera. Esto puedes configurarlo con la propiedad en la JVM:

Código Java:
Ver original
  1. System.setProperty("java.rmi.codebase","ubicacion de la implementacion remote");

Saludos...
__________________
--
NOTA: Si haz conseguido la solución a tu problema, por favor edita el titulo del tema colocando el prefijo [SOLUCIONADO], para que otros usuarios puedan encontrar soluciones más rápido.
  #3 (permalink)  
Antiguo 02/05/2010, 18:59
Avatar de dackiller  
Fecha de Ingreso: septiembre-2003
Ubicación: The Matrix
Mensajes: 341
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: Generar stub para paso por referencia en RMI

OJO!

En la implementacion te falta declarar la RemoteException... Jeje tal vez aqui esta tu problema...

Código Java:
Ver original
  1. public void recibirUsuario(Usuario u) throws RemoteException;
__________________
--
NOTA: Si haz conseguido la solución a tu problema, por favor edita el titulo del tema colocando el prefijo [SOLUCIONADO], para que otros usuarios puedan encontrar soluciones más rápido.
  #4 (permalink)  
Antiguo 03/05/2010, 04:54
 
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

La idea es que tengo una clase y esa clase implementa Remote, para crear el Stub, pero cuando la paso por referencia, a un objeto que esta en el registry, registrado, me da error...

No se por que, que debería de hacer para pasar, un objeto por referencia en RMI, que metodos debería de implementar...

He pensado que el objeto debe de implementar Remote, y ya esta creado el stub, despues se mete como parámetro y el objeto remoto recibe el stub, y el puede hacer cosas con el stub.

Pero no se que hay que pasarle, si la interfaz, el objeto, y si el objeto que se debe de mandar tiene que mandarse la interfaz.

La idea es que para mandar un objeto como referencia, habría que hacer ese objeto de esta forma:

public objeto1 implements Remote{
public void metodo1 throws RemoteException
}


¿Se haría de esta forma?
Muchas gracias!
  #5 (permalink)  
Antiguo 03/05/2010, 07:21
 
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
  #6 (permalink)  
Antiguo 03/05/2010, 16:08
 
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

Nadie me puede ayudar con esto.

Muchas gracias!
  #7 (permalink)  
Antiguo 04/05/2010, 20:08
Avatar de dackiller  
Fecha de Ingreso: septiembre-2003
Ubicación: The Matrix
Mensajes: 341
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: Generar stub para paso por referencia en RMI

El error esta en que te falta implementar java.io.Serializable

La forma en que rmi puede transportar objetos a la red, es que estos sean serializables..

Código Java:
Ver original
  1. public class Usuario implements java.io.Serializable{
  2.  
  3. // Aqui tus metodos
  4.  
  5. }

Saludos...
__________________
--
NOTA: Si haz conseguido la solución a tu problema, por favor edita el titulo del tema colocando el prefijo [SOLUCIONADO], para que otros usuarios puedan encontrar soluciones más rápido.
  #8 (permalink)  
Antiguo 04/05/2010, 20:19
Avatar de dackiller  
Fecha de Ingreso: septiembre-2003
Ubicación: The Matrix
Mensajes: 341
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: Generar stub para paso por referencia en RMI

Cuando te refieres a que si el objeto pasa por valor o por referencia, creo que no viene al caso, la serializacion en un mecanismo totalmente distinto a cuando el objeto esta cargado en la memoria.

Si me equivoco por favor no duden en corregirme :P

Asi que la referencia del objeto solo estara presente en la JVM servidor.

Saludos...
__________________
--
NOTA: Si haz conseguido la solución a tu problema, por favor edita el titulo del tema colocando el prefijo [SOLUCIONADO], para que otros usuarios puedan encontrar soluciones más rápido.

Etiquetas: referencia, rmi, stub
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:46.