Objetos Distribuidos

 

1. En el directorio servidor1 tenemos un servidor RMI ServidorPrimos que está continuamente calculando números primos. Implementa la interfaz remota InterfazServidorNumeros:

public interface InterfazServidorNumeros extends java.rmi.Remote
{
  public int ultimoNumero() throws java.rmi.RemoteException;
}

donde el método ultimoNumero() devuelve el último número encontrado. El interfaz remoto ya está compilado y metido en el fichero JAR interfaz.jar.

En el directorio cliente1 tenemos el esqueleto de un cliente ClienteNumeros que queremos que se conecte a dicho servidor. El directorio también tiene el fichero interfaz.jar con la interfaz remota, y el fichero java.policy con la política de seguridad. 

Se pide:

Completar el código del cliente para que obtenga un objeto remoto y llame a su método ultimoNumero(). Para ello, seguir los pasos:

if (System.getSecurityManager() == null)
   	System.setSecurityManager(
	   new java.rmi.RMISecurityManager());
//direccion_IP:puerto/ServidorNumeros

La dirección IP y el puerto es recomendable pasarlos como parámetro al main() para que puedan modificarse sin problema. Podéis ver el código del cliente visto en teoría para ayudaros.

Para probar el programa:

compilar
ejecutar 1200

(Windows)
. ./compilar.sh
. ./ejecutar.sh 1200

(Linux)
javac ClienteNumeros.java

Podéis utilizar los scripts para compilar y ejecutar el cliente visto en teoría, cambiando lo que sea necesario. Ejecutando el cliente varias veces podréis comprobar cómo el servidor va descubriendo nuevos números.

 

2. En el directorio servidor2 queremos tener otro servidor RMI ServidorVeces que implemente la misma interfaz remota InterfazServidorNumeros vista antes, pero que la llamada al método ultimoNumero() en este caso devuelva el número de veces que se ha solicitado ese método (en lugar del último primo calculado). Se tiene la interfaz remota en el fichero interfaz.jar de la carpeta del servidor.

Se pide:

a) Implementar el servidor (completar el esqueleto que se da) para que realice la función indicada. Para ello podéis valeros del servidor anterior como ayuda, siguiendo los pasos:

b) ¿Qué cambios habría que hacer en el cliente ClienteNumeros del primer ejercicio para conectar con este otro servidor? Indicad en el fichero respuestas.txt los cambios que se realizarían.

 

3.  Supongamos que tenemos que crear un cliente RMI que se conecta a una máquina remota para acceder a un objeto remoto llamado MiObjetoDesconocido, cuyo código fuente desconocemos. Se nos proporciona en un fichero JAR llamado compartido.jar la interfaz que implementa el servidor (llamada MiInterfazDesconocida), y una clase Serializable que utiliza (llamada Datos). 

Se pide:

Completar en la carpeta cliente3 el cliente Ej3 que acceda a un objeto remoto de este tipo, valiéndonos únicamente del fichero compartido.jar con la interfaz remota y la clase serializable. 

Podéis valeros del cliente visto en teoría o el del primer ejercicio como ayuda.

Los pasos que se piden en el cliente son:

MiInterfazDesconocida mid = ... 
// Codigo para acceder al objeto remoto

El nombre con que se ha publicado en el registro RMI es "Desconocido", es decir: 

//direccion_IP:puerto/Desconocido
Datos d = mid.datos();
System.out.println (d.cadena());

 

Para entregar: Debéis entregar un ZIP e7.zip con: