U-Cursos

CC51S-1 Sistemas Distribuidos 2007, Otoño

Foro

Todos los Mensajes (11)

Fecha de Entrega

(4 respuestas, 5 lecturas)
Felipe Sologuren G. 08/06/07 a las 10:43 hrs.
Es posible cambiar la fecha de entrega? sencillamente me es imposible entregar el miércoles, tengo copado mi tiempo con otros 2 proyectos hasta el martes 19 y por las notas (que espero estén buenas) esta tarea no es prioridad. Sin embargo me interesa hacerla.

Saludos a todos,
Felipe
Pablo Burgos 09/06/07 a las 08:20 hrs.
Tambien solicito aplazar la fecha de entrega.
No alcanzaré a tenerla lista este miércoles
Saludos,

Pablo Burgos
Yerko Covacevich V. 09/06/07 a las 12:17 hrs.
Cierto, ojala pudiereas correr la fecha una semana mas, total nadie te acusaria por hacer un ctrl la semana sin ctrls

pero tendremos que esperar hasta el lunes por una respuesta, pq Javier no lee el foro el fin de semana...
Javier Bustos Jiménez 11/06/07 a las 11:17 hrs.
detalles via skype (nombre usuario javierbustos )
Yerko Covacevich V. 12/06/07 a las 11:41 hrs.
no tengo skype
me envias la resolucion por mail?
Saludos...

otra duda...

(9 respuestas, 8 lecturas)
Yerko Covacevich V. 01/06/07 a las 07:42 hrs.
Que pasa si se cae el cliente que tiene el servidor??

Deberia hacerse alguna cosa?
Por defecto no hago nada, es lo mas simple
Felipe Sologuren G. 01/06/07 a las 11:25 hrs.
ni tan simple, porque al parecer no es posible mantener la instancia del servidor migrado cuando el main del client muere; Yo no he podido lograr que la instancia persista más allá del cliente aun cuándo no hay ninguna variable en el cliente que lo referencie salvo el stub y aunque existan otros clientes que lo referencien además.
Por lo tanto (supongo que) existen las siguientes alternativas:
- el servidor "apreta cachete" si el cliente va a morir ;-) (no me gusta la solución pero parece ser la más razonable)
- ponemos un registry en cada cliente y lo "bindeamos" cuando migra para que la instancia persista (esto lo supongo no lo he probado)
- suponemos que el cliente no va a morir y dejamos el nug
Felipe Sologuren G. 01/06/07 a las 11:34 hrs.
quise decir bug ------------------------------------------^
- ejecutamos un Server.main() desde el cliente para que la JVM persista, lo estoy probando...
Felipe Sologuren G. 01/06/07 a las 12:27 hrs.
tampoco funca :-(

Veamos si el profe se pronuncia,... debe estar estresado con la pega que le tenemos los 3 alumnos del ramo ;-)
Yerko Covacevich V. 01/06/07 a las 15:08 hrs.
Hay otra cosa que se puede hacer y es que como cada cliente esta enviando mensajes globales, el que se da cuenta que no hay servidor inicia un proceso de votacion para quedarse con el servidor y regenerarlo como pueda.
Eso si, para lograr eso, cada cliente tiene que tener los stub de todos los otros clientes conectados, asi puede rehacer el servidor sin mayor problema.
Asi nos salvamos de tener que adivinar si el cliente va a morir para saltar, ademas es posible que el servidor este justo sobre el ultimo cliente conectado y que va a pasar cuando el cliente muera? Igual nos quedamos sin servidor, por que no tenemos a quien chutearlo
Felipe Sologuren G. 01/06/07 a las 15:41 hrs.
al final implementé que se devuelve a la ubicación original cuando va a morir el cliente,... ya que la única manera de hacer bind es estando en la misma máquina igual era necesario tener un objeto reregistrando el nuevo server, entonces ese mismo objeto "recibe" al server que vuelve.

Y como aquí no hay más feedback que nosotros...
Yerko Covacevich V. 01/06/07 a las 21:15 hrs.
Pero que pasa si la ubicacion original ya no esta disponible? Se podria haber caido esa maquina

Mejor lo dejamos asi no mas, total el enunciado no decia nada al respecto... o si?
(esa podria ser una T4, hacer esto mas robusto implementando algun truco de estos)
Felipe Sologuren G. 01/06/07 a las 23:43 hrs.
si la máquina original se cayó ya no puede haber chat de ninguna forma porque ahi se hace el bind (suponiendo que partes el server en la misma máquina donde haces bind)
Yerko Covacevich V. 02/06/07 a las 11:23 hrs.
Toda la razon
Javier Bustos Jiménez 04/06/07 a las 12:36 hrs.
no, la tolerancia a fallas no es para esta tarea (si lo hacen está bien), porque eso se soluciona mediante (por ejemplo) checkpointing. En este caso no improtaba que el destino se muriese

servicio de nombre para el servidor

(2 respuestas, 8 lecturas)
Felipe Sologuren G. 31/05/07 a las 10:05 hrs.
es necesario que rmiregistry esté funcionando en todos los clientes para la migración completa del servidor? o sólo se migra el servidor y su localización se sigue haciendo desde una sola máquina que redirige hacia donde se haya movido?
Yerko Covacevich V. 01/06/07 a las 07:43 hrs.
Espero que no sea necesario que todos tengan un propio registry, pq seria mas dificil probarlo
Javier Bustos Jiménez 04/06/07 a las 12:34 hrs.
De ustedes dependía la solución pues, parte del problema era el forwarding.

Lectura 2

(3 respuestas, 4 lecturas)
Yerko Covacevich V. 14/05/07 a las 11:18 hrs.
Para cuando quedo la fecha del CL 2?

Yerko
Yerko Covacevich V. 15/05/07 a las 21:52 hrs.
como que no me pescaron mucho con la consulta...



o sera que es sin evaluacion y la estoy ca***do?
Javier Bustos Jiménez 28/05/07 a las 11:16 hrs.
Para el lunes 4 de Junio
Yerko Covacevich V. 28/05/07 a las 17:59 hrs.
Gracias

Problemas con RMI

(7 respuestas, 12 lecturas)
Daniel Hernández 12/04/07 a las 17:59 hrs.
Hola hace rato que estoy intentando hacer funcionar el ejemplo en java.sun.com/ ... llo/hello-world.html pero no me funciona. Lo que hago es:

$ mkdir classDir
$ javac -d classDir *.java
$ rmiregistry &
[1] 29986
$ java -classpath classDir example.hello.Server
Server exception: java.rmi.StubNotFoundException: Stub class not found: example.hello.Server_Stub; nested exception is:
java.lang.ClassNotFoundException: example.hello.Server_Stub
java.rmi.StubNotFoundException: Stub class not found: example.hello.Server_Stub; nested exception is:
java.lang.ClassNotFoundException: example.hello.Server_Stub
at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:98)
at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:55)
at sun.rmi.server.UnicastServerRef.setSkeleton(UnicastServerRef.java:179)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:142)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:129)
at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:275)
at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:178)
at example.hello.Server.main(Server.java:57)
Caused by: java.lang.ClassNotFoundException: example.hello.Server_Stub
at java.net.URLClassLoader$1.run(URLClassLoader.java:199)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at sun.rmi.server.RemoteProxy.loadClassFromClass(RemoteProxy.java:191)
at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:93)
... 7 more

Luego hice lo mismo en con la otra versión (1.5.0) y el error fue el siguiente:

$ /opt/sun-jdk-1.5.0.10/bin/java -classpath classDir example.hello.Server
Server exception: java.rmi.ConnectException: Connection refused to host: 192.80.24.6; nested exception is:
java.net.ConnectException: Connection refused
java.rmi.ConnectException: Connection refused to host: 192.80.24.6; nested exception is:
java.net.ConnectException: Connection refused
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:306)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at example.hello.Server.main(Server.java:61)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:179)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569)
... 5 more
Yerko Covacevich V. 12/04/07 a las 18:15 hrs.
El problema es que el rmiregistry tambien usa un classpath, entonces lo que se hace es algo asi como setear el classpath a nada y despues ejecutar desde ahi.

no recuerdo muy bien como lo hice, pero era algo asi:
Windows:
c:\> set CLASSPATH=
c:\> start rmiregistry
c:\> start java -cp . Servidor

no estoy seguro si este era el codigo, pero de ese estilo

Saludos,
Yerko
Daniel Hernández 12/04/07 a las 18:49 hrs.
$ set CLASSPATH=classDir
$ echo $CLASSPATH
classDir
$ rmiregistry &
[1] 22705
$ /opt/sun-jdk-1.5.0.10/bin/java -classpath classpath classDir example.hello.Server
Server exception: java.rmi.ConnectException: Connection refused to host: 192.80.
24.6; nested exception is:
java.net.ConnectException: Connection refused
java.rmi.ConnectException: Connection refused to host: 192.80.24.6; nested excep
tion is:
java.net.ConnectException: Connection refused
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185
)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:306)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at example.hello.Server.main(Server.java:61)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:179)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirect
SocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMaster
SocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569)
... 5 more

Saludos,
Daniel.
Felipe Sologuren G. 12/04/07 a las 19:37 hrs.
probaste con localhost ?
firewall?
Daniel Hernández 13/04/07 a las 09:43 hrs.
No entiendo como se prueba con localhost y firewall. Lo que he hecho es intentar en mi notebook y en anakena, con varias combinaciones y varias versiones de java.

Saludos,
Daniel.
Felipe Sologuren G. 12/04/07 a las 18:22 hrs.
Al parecer (no estoy seguro porque no se deduce completamente de tus logs) que no tienes bien construida la jerarquía del paquete example.hello . Esto quiere decir que los archivos *.class deben quedar en las carpetas ./classDir/example/hello/ no en ./classDir .
Es la forma como java interpreta los paquetes al ejecutar, por eso no encontraría las clases.

Saludos,
Felipe
Daniel Hernández 12/04/07 a las 18:51 hrs.
$ ls classDir/example/hello/
Client.class Hello.class Server.class

Saludos,
Daniel.
Javier Bustos Jiménez 13/04/07 a las 13:34 hrs.
El primero es claro error de RMI de java < 1.5 porque además las clases deben ser compiladas con rmic para crear los stubs, en 1.5 los stubs son automáticos y al parecer es un error de conexión en anakena (puertos cerrados?)

otra duda...

(1 respuesta, 10 lecturas)
Yerko Covacevich V. 12/04/07 a las 13:35 hrs.
como no dice nada al respecto, pregunto:

hay que agregar un readme?
Javier Bustos Jiménez 13/04/07 a las 13:33 hrs.
sólo si no funciona al hacer java tarea ;-)

Varias dudas

(2 respuestas, 12 lecturas)
Felipe Sologuren G. 12/04/07 a las 16:51 hrs.
1.- Estoy implementando con java 5.0 y la visualización de la lista de usuarios queda incorrecta (de hecho no se ve); hay forma de arreglarlo o vuelvo a 1.4 (no es tán difícil en mi código)

2.- Estoy tratando de borrar el texto del JtextArea 'write' con setText(null) después que envío un comando para al comando siguiente no mandar los comandos anteriores, pero me queda siempre un '\n' al ppio que me hecha a perder el cuento. Al parecer tiene que ver con que la impresión del ENTER que llama a command se imprime dp de command. Hay alguna forma de arreglar esto (evitando la impresión del enter p.e.), o bien me dedico a no borrar los comandos y los separo por selección del texto. Esto último no me gusta mucho porque se pierde un poco la linea que se está escribiendo.

Pido ayuda con awt porque no soy ningún experto (esta es mi primera incursión de hecho).

Y pal profe:

3.- La implementación debe ser "inteligente"? es decir, debe incorporar algoritmos para fallas? (keep alive, condiciones de carrera, no uso de busy waits en la red, eventualmente deadlocks) yo supongo que sí pero me gustaría más saber del alcance, pues se puede sofisticar bastante.
Yerko Covacevich V. 12/04/07 a las 18:11 hrs.
1.- Puedes mejorar la implementacion del JList usando un Model, entonces haces algo asi:
JList lista=new JList();
lista.setModel(new MiModel());

y en el model implementas lo que te falta

2.- cuando atrapas el texto haces e.consume() para que no pesque el enter, el problema es que es enter se muere completamente entonces al otro lado tienes que agregar el '\n'

3.- Asumo por una pregunta que hice antes que no hay que agregar inteligencias extras, ya que en el curso lo importante es el RMI y no la complejidad de la comunicacion segura y eficiente

Saludos,
Yerko.
Javier Bustos Jiménez 13/04/07 a las 13:32 hrs.
R: para esta tarea la idea es que practiquen RMI, en la siguiente la idea será agregar inteligencia.

Fechas

(1 respuesta, 10 lecturas)
Daniel Hernández 07/04/07 a las 17:46 hrs.
No anoté las fechas de los controles, de la tarea y de la lectura.
¿Cuando son?
Javier Bustos Jiménez 09/04/07 a las 12:15 hrs.
Las puse en u-cursos

Tarea 1

(4 respuestas, 11 lecturas)
Javier Bustos Jiménez 27/03/07 a las 10:50 hrs.
En esta Tarea ustedes deben crear un servidor de chat al cual se conecten múltiples clientes y cada mensaje enviado por un cliente debe ser leido por el resto de los clientes conectados al servidor.

En la sección material docente se encuentra un archivo que contiene la interfaz gráfica ya implementada y un pequeño manual de su utilización y de lo pedido. La tarea debe ser hecha completamente en Java RMI.

No se aceptarán tareas atrasadas

Fecha de entrega: Lunes 9 de Abril 2007
Yerko Covacevich V. 08/04/07 a las 02:34 hrs.
Varias dudas...

-como se conecta el usuario al servidor?, suponiendo que lo haga usando un nick, como se resuelve que el nick ya este siendo usado?

-Una vez que se conecta, la comunicacion entre clientes es monopolizada por el servidor o debe hacerse p2p?

-Las desconexiones deben tolerar fallas o solo se maneja una salida normal del sistema?

Eso por ahora, saludos,
Yerko
Javier Bustos Jiménez 09/04/07 a las 11:54 hrs.
1.- consulta si te puedes conectar con ese nick, si ya es usado entonces no puede.

2.- si puedes hacer un broadcast p2p, eres bienvenido

3.- salida normal del sistema, piensalo sin fallas, sólo usan algún mensaje al desconectarse y se desconectan.
Felipe Sologuren G. 08/04/07 a las 12:29 hrs.
Un par de cosas, una de ellas un tanto desesperada , recuerdo haber leído este mail y haber computado la fecha de entrega de la tarea, sin embargo, en mi agenda la tengo calendarizada para el viernes 13, cuál es la fecha final de entrega? con todos los cambios que hicimos en clase ya no estoy seguro de nada.
Y por otro lado, se va a habilitar la entrega por u-cursos o hay que mandarla por e-mail?

Saludos a todos,
Felipe
Javier Bustos Jiménez 09/04/07 a las 11:54 hrs.
1.- viernes 13

2.- u-cursos

Lectura 1

(0 respuestas, 12 lecturas)