11
20 de diciembre de 2012 Grupo DADx38 Elena Martín González Miguel Fadrique de Pablo Grupo DADx39 Rubén Sánchez de la Rosa Fco. Javier Vaquero Caballero.

DAD 9 Francisco Javier Vaquero Caballero y Ruben Sanchez de La Rosa

Embed Size (px)

Citation preview

Page 1: DAD 9 Francisco Javier Vaquero Caballero y Ruben Sanchez de La Rosa

20 de diciembre de 2012

Grupo DADx38Elena Martín González

Miguel Fadrique de Pablo

Grupo DADx39Rubén Sánchez de la Rosa

Fco. Javier Vaquero Caballero.

Page 2: DAD 9 Francisco Javier Vaquero Caballero y Ruben Sanchez de La Rosa

Contenido

GRUPO DADx38...........................................................................................................................1

Tarea 1: Documentación.....................................................................................................2

GRUPO DADx39...........................................................................................................................2

Tarea 1: Documentación.....................................................................................................2

AMBOS GRUPOS..........................................................................................................................2

Tarea 2: RMI en un ordenador...........................................................................................2

Tarea 3: RMI ordenador a ordenador...............................................................................3

RmiServer.java (Sin cambios)....................................................................................................3

ReceiveMessageInterface.java (Sin cambios)...........................................................................4

RmiClient.java:..........................................................................................................................4

ReceiveMessageInterface.java (Sin cambios)...........................................................................4

Tarea 4: RMI elevando al cuadrado..................................................................................5

RmiServer.java..........................................................................................................................5

ReceiveMessageInterface.java.................................................................................................6

RmiClient.java:..........................................................................................................................6

ReceiveMessageInterface.java.................................................................................................6

Tarea 5: Servidor computa para cliente.........................................................................7

RmiServer.java..........................................................................................................................7

ReceiveMessageInterface.java.................................................................................................7

RmiClient.java:..........................................................................................................................8

1

Page 3: DAD 9 Francisco Javier Vaquero Caballero y Ruben Sanchez de La Rosa

GRUPO DADx38

Tarea 1: Documentación

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=rmiDe este enlace entendimos un 50%.http://es.wikipedia.org/wiki/Java_Remote_Method_InvocationDe este enlace entendimos un 60%.http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.htmlDe este enlace entendimos un 90%.

GRUPO DADx39

Tarea 1: Documentación

Primeramente usamos Wikipedia para obtener una idea general de rmi:http://es.wikipedia.org/wiki/Java_Remote_Method_InvocationPosteriormente continuamos buscando en los tutoriales habituales de Oracle, ya que siempre cuenta con ejemplos que facilitan en gran medida su aprendizaje.http://docs.oracle.com/javase/tutorial/rmi/index.htmlFinalmente utilizamos el libro “Head First Java 2nd”, que contiene un capítulo entero dedicado exclusivamente a rmi. De este último no llegamos a acabar dicho capítulo aunque los conocimientos adquiridos fueron buenos, se trata de un libro que hace muy ameno el estudio de rmi, incluso cuando utilizamos librerías y métodos desconocidos (propios de rmi) sin embargo nos dan una idea general de cómo funcionan, para facilitar su uso en nuestras aplicaciones. Nuestros conocimientos adquiridos son los suficientemente buenos como para hacer una aplicación cliente y servidor que envíe datos u objetos simples, no hemos podido profundizar lo suficiente como para estudiar como enviar estructuras complejas y que procese varios datos de forma asíncrona y desordenada. Sin embargo para los conocimientos necesarios en esta práctica hemos entendido un 70% o 80%.

AMBOS GRUPOS

Tarea 2: RMI en un ordenador

En esta tarea implementamos y ejecutamos una sencilla aplicación que emplea Invocación a Métodos Remotos.

Una vez mecanografiado el código, y asegurándonos de la ausencia de errores, ejecutamos primeramente el fichero RmiServer. En la consola aparece el siguiente mensaje:

El servidor está corriendo en la dirección L1019/10.0.128.20 y el puerto 3232

Después, ejecutamos el fichero RmiClient. En la consola del cliente aparece el siguiente mensaje:

2

Page 4: DAD 9 Francisco Javier Vaquero Caballero y Ruben Sanchez de La Rosa

Enviando Hola Jaime! a localhost:3232

En la captura siguiente mostramos la consola del servidor una vez recibido el mensaje del cliente. También resaltamos el botón que nos permite acceder a las consolas de los programas que se están ejecutando o que se han ejecutado, es decir, pulsando ese botón podemos permutar entre la consola del cliente y la del servidor.

Tarea 3: RMI ordenador a ordenador

En esta tarea nos asociamos los grupos DADx38 yDADx39. DADx38 actuó como servidor, mientras que DADx39 grupo actuó de cliente.

Por lo tanto el grupo DADx38 (servidor) necesitaba en su máquina los siguientes ficheros:

RmiServer.java (Sin cambios)

import java.net.InetAddress;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;

public class RmiServer extendsjava.rmi.server.UnicastRemoteObject implements ReceiveMessageInterface{String address;Registry registry;

public void receiveMessage(String x) throws RemoteException{System.out.println(x);

} // end receiveMessage()

public RmiServer() throws RemoteException{try{

address = (InetAddress.getLocalHost()).toString();} // end try

catch (Exception e){System.out.println("La clase InetAddress no pudo obtener la dirección

" +"IP.");

}

int port=3232;System.out.println("El servidor está corriendo en la dirección "+address+" y

" +"elpuerto "+port);

try{registry = LocateRegistry.createRegistry(port);registry.rebind("rmiserver", this);

} // end try

3

Page 5: DAD 9 Francisco Javier Vaquero Caballero y Ruben Sanchez de La Rosa

catch (RemoteException e){System.out.println("remote exception"+e);

} // end catch} // end RmiServer

static public void main(String args[]){try{

RmiServerserver = new RmiServer();} // end try

catch(Exception e){e.printStackTrace();System.exit(1);

} // end catch} // endmain()

} // endclass

ReceiveMessageInterface.java (Sin cambios)

import java.rmi.Remote;import java.rmi.RemoteException;

public interface ReceiveMessageInterface extends Remote{void receiveMessage(String x) throws RemoteException;

}

El grupo DADx39 (cliente) necesitaba en su máquina los siguientes ficheros:

RmiClient.java:

import java.rmi.RemoteException;import java.rmi.NotBoundException;import java.rmi.registry.Registry;import java.rmi.registry.LocateRegistry;import java.util.*;

public class RmiClient{static public void main(Stringargs[]){

ReceiveMessageInterface rmiServer;Registry registry;

String serverAddress = new String("10.10.128.20");String serverPort = new String("3232");String text = new String("Hola Jaime!");

System.out.println("Enviando desde el cliente el número " + num + " a " + serverAddress + ":" + serverPort);

try{registry = LocateRegistry.getRegistry

(serverAddress,(new Integer(serverPort)).intValue());rmiServer=(ReceiveMessageInterface)(registry.lookup("rmiServer"));

// calltheremotemethodrmiServer.receiveMessage(text);

} // end try

catch(RemoteException e){e.printStackTrace();

} // end catch

catch(NotBoundException e){System.err.println(e);

} // end catch } // endmain} // endclass

4

Page 6: DAD 9 Francisco Javier Vaquero Caballero y Ruben Sanchez de La Rosa

ReceiveMessageInterface.java (Sin cambios)

import java.rmi.Remote;import java.rmi.RemoteException;

public interface ReceiveMessageInterface extends Remote{void receiveMessage(String x) throws RemoteException;

}

En resumen, el único cambio necesario es la dirección IP en la aplicación cliente.

Tarea 4: RMI elevando al cuadrado

En esta tarea realizamos una modificación con respecto a la aplicación de la tarea anterior de forma que ahora la aplicación cliente solicitará al usuario un número entero, pasará ese número al servidor, y el servidor lo mostrará en pantalla elevado al cuadrado.

Actuando como servidor requerimos los ficheros:

RmiServer.java import java.net.InetAddress;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;

public class RmiServer extendsjava.rmi.server.UnicastRemoteObject implements ReceiveMessageInterface{String address;Registry registry;

public void receiveMessage(int x) throws RemoteException{int y;y = x * x;

System.out.println("El número recibido es "+x+" y su cuadrado es "+y);} // end receiveMessage()

public RmiServer() throws RemoteException{try{

address = (InetAddress.getLocalHost()).toString();} // end try

catch(Exception e){System.out.println("La clase InetAddress no pudo obtener la " +

"dirección IP.");}

int port=3232;System.out.println("El servidor está corriendo en el puerto "+port+

" de la dirección "+address);try{

registry = LocateRegistry.createRegistry(port);registry.rebind("rmiserver", this);

} // end try

catch(RemoteException e){System.out.println("remote exception"+e);

} // end catch} // end RmiServer

static public void main(String args[]){try{

RmiServer server = newRmiServer();

5

Page 7: DAD 9 Francisco Javier Vaquero Caballero y Ruben Sanchez de La Rosa

} // end try

catch(Exception e){e.printStackTrace();System.exit(1);

} // end catch} // end main()

} // end class

ReceiveMessageInterface.java

import java.rmi.Remote;import java.rmi.RemoteException;

public interface ReceiveMessageInterface extends Remote{void receiveMessage(int x) throwsRemoteException;

}

Actuando como cliente requerimos los ficheros:

RmiClient.java:

import java.rmi.RemoteException;import java.rmi.NotBoundException;import java.rmi.registry.Registry;import java.rmi.registry.LocateRegistry;import java.util.*;

public class RmiClient{static public void main(Stringargs[]){

ReceiveMessageInterface rmiServer;Registry registry;

String serverAddress = new String("10.10.128.20");String serverPort = new String("3232");Scanner entrada = new Scanner(System.in);int num;

System.out.println("Introduce un número entero: ");num = entrada.nextInt();

System.out.println("Enviando desde el cliente el número " + num + " a " + serverAddress + ":" + serverPort);

try{registry = LocateRegistry.getRegistry

(serverAddress,(newInteger(serverPort)).intValue());rmiServer = (ReceiveMessageInterface)(registry.lookup("rmiServer"));

// calltheremotemethodrmiServer.receiveMessage(num);

} // end try

catch(RemoteException e){e.printStackTrace();

} // end catch

catch(NotBoundException e){System.err.println(e);

} // end catch } // endmain} // endclass

6

Page 8: DAD 9 Francisco Javier Vaquero Caballero y Ruben Sanchez de La Rosa

ReceiveMessageInterface.java

import java.rmi.Remote;import java.rmi.RemoteException;

public interface ReceiveMessageInterface extends Remote{void receiveMessage(int x) throwsRemoteException;

}

Tarea 5: Servidor computa para cliente

En esta tarea modificamos la anterior de modo que el servidor le transmite al cliente el número que le ha enviado elevado al cuadrado, y así éste podrá sacarlo por pantalla.

RmiServer.java

import java.net.InetAddress;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;

public class RmiServer extendsjava.rmi.server.UnicastRemoteObject implements ReceiveMessageInterface{String address;Registry registry;

public int receiveMessage(int x) throws RemoteException{int y;y = x * x;

System.out.println("El número recibido es "+x+" y su cuadrado es "+y);return y;

} // end receiveMessage()

public RmiServer() throws RemoteException{try{

address = (InetAddress.getLocalHost()).toString();} // end try

catch(Exception e){System.out.println("La clase InetAddress no pudo obtener la dirección

" +"IP.");

}

int port=3232;System.out.println("El servidor está corriendo en el puerto "+port+

" de la dirección "+address);

try{registry = LocateRegistry.createRegistry(port);registry.rebind("rmiserver", this);

} // end try

catch(RemoteException e){System.out.println("remote exception"+e);

} // end catch} // end RmiServer

static public void main(String args[]){try{

RmiServerserver = new RmiServer();} // end try

catch(Exception e){e.printStackTrace();System.exit(1);

7

Page 9: DAD 9 Francisco Javier Vaquero Caballero y Ruben Sanchez de La Rosa

} // end catch} // end main()

} // end class

ReceiveMessageInterface.java

import java.rmi.Remote;import java.rmi.RemoteException;

public interface ReceiveMessageInterface extends Remote{int receiveMessage(int x) throws RemoteException;

}

RmiClient.java:

import java.rmi.RemoteException;import java.rmi.NotBoundException;import java.rmi.registry.Registry;import java.rmi.registry.LocateRegistry;import java.util.*;

public class RmiClient{static public void main(Stringargs[]){

ReceiveMessageInterface rmiServer;Registry registry;

String serverAddress = new String("10.10.128.20");String serverPort = new String("3232");Scanner entrada = new Scanner(System.in);int num;int resultado;

System.out.println("Introduce un número entero: ");num = entrada.nextInt();

System.out.println("Enviando desde el cliente el número " + num + " a " + serverAddress + ":" + serverPort);

try{registry = LocateRegistry.getRegistry

(serverAddress,(newInteger(serverPort)).intValue());rmiServer = (ReceiveMessageInterface)(registry.lookup("rmiServer"));

// calltheremotemethodresultado = rmiServer.receiveMessage(num);System.out.println("El valor COMPUTADO EN EL SERVIDOR para la" +

"entrada es " + resultado);

} // end try

catch(RemoteException e){e.printStackTrace();

} // end catch

catch(NotBoundException e){System.err.println(e);

} // end catch } // endmain} // endclass

8

Page 10: DAD 9 Francisco Javier Vaquero Caballero y Ruben Sanchez de La Rosa

9