Comunicacion con RMI

chnovam
27 de Septiembre del 2004
Hola a todos, espero alguien pueda ayudarme un poco.

Estoy desarrollando una aplicacion clientes-servidor, parecida al paint de netmeeting pero con la posibilidad de que todos los clientes puedan hacer cambios a la pizarra (los que han usado netmeeting, entienden).

La cuestion es que quiero aplicar el patron Observer a la comunicacion entre clientes y servidor ya que si algo cambia en la aplicacion el servidor debe informar a los clientes y si los clientes cambian algo de la aplicacion deben informarle al servidor de tal cambio.

El problema real radica en que mi cliente puede implementar la interface Observer para observar el servidor y el servidor debe heredar de Observable, pero la especificacion RMI dice que el servidor debe heredar de UnicastRemoteObject y ya entenderan el problema.

Agradezco su objetiva respuesta a [email protected], gracias.

Buffy
27 de Septiembre del 2004
Hola,
Yo trabajo también con RMI y tengo también una clase que debe heredar de de otra y además al utilizar RMI debería heredar también de UnicastRemoteObject.
La solución serñia que tu servidor herede de Observable y en el constructor del servidor pongas la línea:
UnicastRemoteObject.exportObject(this);

En mi caso me funciona, espero que a tí también.

Salu2.

Julio
27 de Septiembre del 2004
Es cierto que para que un objeto pueda ser invocado remótamente tiene que heredar la clase UnicastRemoteObject y para que pueda ser obervable tiene que heredar de Observable. Ya se sabe que en java no hay herencia multiple asi que lo que puedes hacer es heredar de UnicastRemoteObject y hacer una clase aparte que herede de Observable. En la clase que heredes de UnicastRemoteObject creas un atributo de la clase que herede de Observable para que pueda comportarse como una clase observable. Espero que te sirva la explicación.

chuidiang
27 de Septiembre del 2004
Otra opción es que te hagas tu una interface MiObservable un poco a tu medida (basta con que tenga un metodo para añadir observadores, otro para borrarlos y otro para decir que avise a los observadores de un cambio).
Luego es sencillo heredar del Unicast... y a la vez implementar dicha interface.
Una posible ventaja de esto es que puedes hacer a su vez que la interface sea Serializable o Remote o lo que quieras, asi los clientes pueden ver solo dicha interface.

Se bueno.