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

Servidor Rmi

Estas en el tema de Servidor Rmi en el foro de Java en Foros del Web. hola a todos, estoy implementando un servidor Rmi, pero no tengo claro si los objetos que se generan, son compartidos por todos los clientes o ...
  #1 (permalink)  
Antiguo 31/03/2008, 09:46
 
Fecha de Ingreso: noviembre-2007
Mensajes: 7
Antigüedad: 16 años, 5 meses
Puntos: 0
Servidor Rmi

hola a todos,



estoy implementando un servidor Rmi, pero no tengo claro si los objetos que se generan, son compartidos por todos los clientes o cada cliente tiene una copia de cada objeto que solicite del servidor.

Basicamente me interesa para saber si la variables (globales) van a mantener el valor entre diferentes llamadas, o van a ser sobreescritas.



Gracias
  #2 (permalink)  
Antiguo 31/03/2008, 11:14
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Servidor Rmi

En el servidor, los objetos son los mismos. En el cliente, hay dos tipos de objetos, los que se copian "por valor" y los "objetos referenciados". De los primeros, cada cliente tiene su copia, los segundos residen en el servidor y cada cliente unicamente tiene una interfaz para acceder remotamente a ellos.

De todas formas, las variables globales (si por ello entendemos los miembros estaticos de las clases) son por-JVM, asi que cada cliente, y el servidor, tendran las suyas propias.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 31/03/2008, 11:36
 
Fecha de Ingreso: noviembre-2007
Mensajes: 7
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Servidor Rmi

Cita:
Iniciado por GreenEyed Ver Mensaje
En el servidor, los objetos son los mismos. En el cliente, hay dos tipos de objetos, los que se copian "por valor" y los "objetos referenciados". De los primeros, cada cliente tiene su copia, los segundos residen en el servidor y cada cliente unicamente tiene una interfaz para acceder remotamente a ellos.

De todas formas, las variables globales (si por ello entendemos los miembros estaticos de las clases) son por-JVM, asi que cada cliente, y el servidor, tendran las suyas propias.

S!
Gracias por la respuesta, tengo una duda.

mi servidor rmi, tiene la funcion de actualizar un soft del qual se dispone de varias versiones. en el servidor tengo definido un BufferedInputStream, para ir leyendo el ejecutable, pero como es muy pesado, voy leyendo del buffer, pero cada cierto tiempo hago un Thread.sleep(1), para permitir, si es el caso, el acceso a otros possibles clientes, que a su vez quiza no requieran la misma version que hay en este momento en el buffer, con lo qual, esa variable buffer, va a ser machacada?

espero que me hayas entendido.

Mil gracias por compartir.
  #4 (permalink)  
Antiguo 31/03/2008, 13:55
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Servidor Rmi

Teoricamente no haria falta el Thread.sleep, a no ser que estes en un S.O. que no permita interrumpir el thread en marcha (en ese caso creo que bastaria con Thread.yield()) ya que cada cliente tendra su socket de comunicacion con el servidor, una vez conectado.

En los sistemas modernos, a no ser que vayas leyendo byte a byte y machaques la CPU, la simple pausa de leer del socket deberia ser suficiente para permitir que otros programas se conectaran.

Pero volviendo a la pregunta, para saber si una variable va a "ser machacada", tecnicamente: que se de una "race condition"*, depende de dónde este declarada la variable, con que ambito y quien puede acceder a ella concurrentemente... Así que sin saber eso no te puedo dar una respuesta categorica, pero si, como es probable, la variable buffer esta declarada en el ambito local de un metodo del servidor, pues no, no la puede machacar otro thread. Si no es una variable local a nivel de metodo, pues "depende".

De todas formas, por lo que describes no acabo de ver como podrias tener dos threads accediendo simultaneamente a esa variable, ya que proceso de actualizacion de software en el servidor solo hay uno, no?

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 01/04/2008, 08:15
 
Fecha de Ingreso: noviembre-2007
Mensajes: 7
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Servidor Rmi

hola,

la variable en question (BufferedInputStream bis), es de tipo global para la clase rmiServidor y va a ser accedida desde un metodo de esa misma clase para leer un numero determinado de kb.

La actualizacion de software que te comentaba se producira en las maquinas cliente, es decir se trata de bajarse un installer que tengo en el servidor.

Se da el caso que tengo diferentes versiones del software, asi es que de manera concurrente un cliente puede solicitar la version 'x' y otro la version 'y'. Cuando llegue la peticion 'x' abrira el stream perteneciente al installer 'x' y guardara este stream en la variable 'BufferedInputStream bis', pero si al mismo tiempo tenemos un peticion de version 'y', no se sobrescribira a el stream anterior para abrir el nuevo? o cada cliente tiene un copia del objeto rmiServidor?

Gracias.

Por cierto, utilizo windows XP.
  #6 (permalink)  
Antiguo 01/04/2008, 08:42
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Servidor Rmi

Aha, en ese caso si tienes un problema, por que servidor y buffer, solo hay uno ya que tienes declarada la variable como global.

Las variables globales son algo a evitar y solo estan justificadas en casos muy excepcionales.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #7 (permalink)  
Antiguo 01/04/2008, 09:20
 
Fecha de Ingreso: noviembre-2007
Mensajes: 7
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Servidor Rmi

gracias,

voy a ver como resuelvo el problema....ufff, yo que creia estar finalizando la aplicacion...
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 17:27.