Arquitectura física en 3 niveles
  1. Objetivos

  1. Tareas a realizar

Atención!! Como estamos usando Java 1.6, no tenemos que usar la aplicación rmic para crear las clases stub y eskeleton.

Este laboratorio es una continuación del anterior. Vamos a probar una aplicación que ya está implementada. Los archivos fuente de dicha aplicación están en el archivo comprimido codigoFuente.zip

1.- Descargar y descomprimir el archivo codigoFuente.zip.

2.- Abrir Eclipse utilizando el workspace que hemos descomprimido con el archivo anterior.

3.- Comprobar que el proyecto lab4 tiene 4 clases:

LanzadorRemotoFrame.java

Asigna la lógica de negocio remota al nivel de presentacion (cliente RMI) mediante lookup

PresentacionRemota.java

Cliente RMI que utiliza la lógica de negocio remota

InterfazRemotaLogicaNegocio.java

Interfaz remota RMI

AccesoSistemaRemotoDB.java

Servidor remoto RMI

4.- Realizar los cambios necesarios para que la aplicación compile sin errores.

4.1 No utilizaremos una base de datos Access, si no una base de datos MySQL en un servidor remoto. Por lo tanto, realizad los cambios necesarios.

4.2 Recordad que para utilizar una base de datos MySQL en Java, necesitamos importar el driver MySQL JDBC Connector.

4.3 Utilizaremos la misma base de datos que en el laboratorio 3, que se encuentra en el servidor "jipla0.gi.ehu.es". El nombre de la base de datos es "cuentas". Para conectarnos, utilizaremos el usuario "ISO" cuyo password también es "ISO".

4.4 A la clase LanzadorRemotoFrame le tenemos que añadir un método "main".

4.5 En la clase PresentacionRemota, el método "hacerLogin" utiliza jPasswordField1.getText(). El método getText() de la clase JpasswordField está obsoleto y Java recomienda cambiarlo. Realizad los cambios necesarios.

5.- Comprobad los nombres de usuario y passwords que están registrados en la base de datos.

6.- No es necesario ejecutar el servicio RMIREGISTRY, (mediante start rmiregistry o rmiregistry), ya que en la clase AccesoSistemaRemotoDB se lanza el servicio en el puerto predeterminado (1099):

java.rmi.registry.LocateRegistry.createRegistry(1099);

7.- Lanzar el servicio RMI desde Eclipse de la siguiente manera:

run : Run as... Java Application : AccesoSistemaRemotoDB

8.- Ejecutar el lanzador remoto desde Eclipse de la siguiente forma:

run : Run as.. Java Application : LanzadorRemotoFrame

9.- Asignar la lógica de negocio utilizando el botón "Asignar lógica de negocio". Como todas las clases están en la misma máquina, tenemos que escribir localhost.




En el archivo solucionLab4.zip encontraréis una solución a este laboratorio.

10.- Finalmente, tenemos que distribuir la aplicación en 3 niveles físicos. A continuación se describen los pasos a seguir:

10.1. En un ordenador que se encuentre accesible por red (por ejemplo, servidorServicioRemoto), debemos hacer lo siguiente

a) La clase RMI en el servidor que lanza el servicio RMIREGISTRY tenemos que ejecutar la clase AccesoSistemaRemotoDB.

b) También necesitamos la dirección IP de la máquina que hace de servidor de datos(que almacena la base de datos MySQL) y, en consecuencia, tenemos que cambiar los parámetros de la sentencia DriverManager.getConnection().


10.2. En la máquina cliente, tenemos que lanzar la clase LanzadorRemotoFrame y asignarle la lógica de negocio indicando el nombre de host de la máquina servidorServicioRemoto.

Para que la aplicación funcione, tenemos que definir un ficher de permisos de nombre java.policy. Por ejemplo, el contenido de este fichero puede ser

grant { permission java.security.AllPermision;};

para permitir todas las operaciones. Además, debemos editar la propiedad "java.security.policy" de la siguiente forma:

    System.setProperty("java.security.policy","HOME/java.policy");

donde HOME es el directorio raíz del proyecto en el que guardaremos el fichero java.policy.

Además, la clase que encargada de instanciar y registrar el objeto remoto (AccesoSistemaRemotoDB) debe indicar el path donde se encuentra el objeto remoto de la siguiente forma:

   System.setProperty("java.rmi.server.codebase","file://localhost/servidor");

NOTA: en los pasos anteriores, no ha sido necesario editar la política de seguridad ya que el servicio remoto se ejecutaba en la misma máquina que el cliente.

Eliminar todos los archivos creados durante el laboratorio.