Sunteți pe pagina 1din 19

Aplicaciones Telematicas

Programacin de Objetos Distribuidos en Java

Aplicaciones Telemticas - RMI

Programacin de Objetos Distribuidos


Normalmente Arquitectura Cliente-Servidor. El servidor ofrece objetos remotos:
1. 2. 3. Crea un conjunto de Objetos Publica referencias a esos Objetos Espera a que un cliente invoque algn mtodo de alguno de esos objetos

Un cliente utiliza mtodos ofertados por un servidor:


1. 2. Obtiene una referencia a los objetos remotos ofrecidos por un servidor Invoca Mtodos en esos objetos

Aplicaciones Telemticas - RMI

Programacin de Objetos Distribuidos


Las aplicaciones de objetos distribuidos necesitan mecanismos para:
1. 2. Localizar objetos remotos: Normalmente utilizando servicios de registro Comunicarse con los objetos remotos: Los detalles de comunicacin suelen incorporarse en las distintas tecnologas disponibles, haciendo transparente este proceso a los programadores

Aplicaciones Telemticas - RMI

RMI
RMI o Remote Method Invocation es la solucin disponible en Java para desarrollar sistemas de objetos distribuidos. El funcionamiento de esta tecnologa se resume en el siguiente grfico:
Bsqueda

Registro

Cliente
Invocacin Publicacin

Servidor
Aplicaciones Telemticas - RMI 4

RMI
Para que Servidor y Cliente se comuniquen, RMI proporciona un conjunto de mecanismos que facilitan las tareas del programador. Desde el Modelo TCP/IP:
Cliente Stub Remote Reference Transporte Internet Acceso Fsica Servidor Stub Remote Reference Transporte Internet Acceso Fsica
5

Aplicaciones Telemticas - RMI

RMI: el stub
Permite a los clientes invocar mtodos de objetos remotos y recibir peticiones remotamente. Es una implementacin parcial de los objetos remotos que permite:
1. 2. Compilar los clientes sin disponer del cdigo de los objetos remotos. Abstraer al programador de los detalles de comunicacin.

Cuando la aplicacin cliente invoca un objeto definido en el stub, el stub se encarga de hacer llegar la invocacin a su destino.
Aplicaciones Telemticas - RMI 6

RMI: La capa de referencia remota


Se encarga de implementar un protocolo especfico para la gestin de referencias remotas. Es totalmente independiente del stub Debe encargarse de:
1. 2. 3. 4. Saber a qu corresponde una referencia determinada. En el Cliente: Convertir las referencias locales empleadas por el stub en referencias remotas. En el Servidor: Convertir las referencias remotas recibidas en el stub en referencias locales. Comunicarse con la capa de transporte subyacente.

Aplicaciones Telemticas - RMI

RMI: Implementacin
Es necesario utilizar clases de tres paquetes diferentes:
Java.rmi.*: Proporciona funcionalidad para la construccin de aplicaciones Cliente. Java.rmi.server.*: Proporciona funcionalidad para la construccin de aplicaciones Servidores. Java.rmi.registry.*: Proporciona funcionalidad para publicar y localizar un objeto remoto.

Todos estos paquetes pertenecen desarrollo estndar de Java.

al

kit

de

Aplicaciones Telemticas - RMI

Paso 1: Qu quiero publicar?


El objeto que se publica tiene que definirse en una interfaz de java. La interfaz contiene la declaracin de los mtodos del objeto remoto que pueden ser invocados desde el cliente:
La interfaz debe extender la interfaz estndar java.rmi.Remote. Todos los mtodos declarados tienen que lanzar la excepcin RemoteException. En la interfaz no se proporcionan detalles sobre la implementacin, solamente se declaran un conjunto de mtodos con unas caractersticas determinadas.
Aplicaciones Telemticas - RMI 9

Paso 1: Desarrollo de la Interfaz


Ejemplo: HolaMundo.java
import java.rmi.*; public interface HolaMundo extends Remote { public String dameMensaje () throws RemoteException; public void cambiaMensaje ( String mensaje ) throws RemoteException; }

Aplicaciones Telemticas - RMI

10

Paso 2: Implementacin de la Interfaz


Debe definirse una clase en la que se implementen los mtodos declarados en la Interfaz:
Esta clase debe implementar la interfaz definida previamente. Esta clase tiene que tener un constructor que ejecute la sentencia: UnicastRemoteObject.exportObject(this). Todos los mtodos definidos tienen que lanzar la excepcin RemoteException (Incluido el constructor)
Aplicaciones Telemticas - RMI 11

Paso 2: Implementacin de la Interfaz


Ejemplo: HolaMundoImplementacion.java
import java.rmi.*; import java.rmi.server.*; public class HolaMundoImplementacion implements HolaMundo { private String mensaje; public HolaMundoImplementacion () throws RemoteException { this.mensaje="Hola Mundo"; UnicastRemoteObject.exportObject (this); } public String dameMensaje () throws RemoteException { return this.mensaje; } public void cambiaMensaje (String nuevomensaje) throws RemoteException { this.mensaje=nuevomensaje; } Aplicaciones Telemticas - RMI }

12

Paso 3: Implementacin del Servidor


El servidor har el objeto remoto HolaMundo disponible para los clientes que lo deseen ejecutar:
Necesita un nico mtodo main. Debe crear un nuevo objeto de la clase que implementaba el interfaz HolaMundoImplementacion Asigna a este objeto un nombre que ser utilizado por los clientes en sus invocaciones utilizando la clase Naming. Esta clase lanza el registro local y registra el objeto creado con un nombre. Hay que capturar las excepciones RemoteException y MalformedURLException.

Aplicaciones Telemticas - RMI

13

Paso 3: Implementacin del Servidor


Ejemplo: HolaMundoServer.java
import import import import java.net.*; java.rmi.*; java.rmi.server.*; java.rmi.registry.*;

public class HolaMundoServer { public static void main (String args [] ) { try { // Lanzamos el registro en el puerto 6789 LocateRegistry.createRegistry(6789); Registry registry = LocateRegistry.getRegistry(6789); //Creamos el objeto que queremos publicar (tiene que ser del tipo de la clase que implementa la interfaz HolaMundoImplementacion h = new HolaMundoImplementacion(); // Publicamos nuestro objeto en el registro Naming.rebind("//localhost:6789/MiNombre",h); // Mostramos que el servidor esta vivo System.out.println("Servidor Hola Mundo Furrulando"); }catch (RemoteException re) { System.out.println("Excepcion en Hola Mundo: " + re); }catch (MalformedURLException me) { System.out.println("Excepcion en Hola Mundo: " + me); } } }

Aplicaciones Telemticas - RMI

14

Paso 6: Implementar el Cliente


El Cliente deber obtener una referencia al objeto remoto que se est ejecutando en el servidor:
Pregunta al registro por el objeto remoto usando Naming.lookup La clase Naming devuelve un objeto de tipo genrico, con lo que es necesario hacer la operacin de casting correspondiente.

Una vez que obtiene la referencia, utiliza el objeto como si fuese local.

Aplicaciones Telemticas - RMI

15

Paso 6: Implementar el Cliente


Ejemplo: HolaMundoClient.java
import java.net.*; import java.rmi.*; public class HolaMundoClient { public static void main (String args [] ) { try { HolaMundo h = (HolaMundo) Naming.lookup("rmi://localhost:6789/MiNombre"); String valoractual= h.dameMensaje(); System.out.println ("Resultado: " +valoractual); h.cambiaMensaje ("Adios Mundo"); valoractual=h.dameMensaje(); System.out.println ("Resultado: " + valoractual); } catch (RemoteException re) {System.out.println("Excepcion en Cliente: " + re); } catch (MalformedURLException me) {System.out.println("Excepcion en Cliente: " + me); } catch (NotBoundException be) {System.out.println("Excepcion en Cliente: " + be); }}} Aplicaciones Telemticas - RMI

16

Paso 4: Compilar y generar los stubs y los skeleton


Deben compilarse todos los archivos generados:
Javac classpath .\ *.java

A continuacin se generan el stub y el skeleton a partir de la clase Implementadora utilizando el programa rmic:
rmic classpath .\ HolaMundoImplementacion

Se genera el fichero stub:


HolaMundoImplementacion_Stub.class
Aplicaciones Telemticas - RMI 17

Paso 5: Ejecutar el servidor


El Stub se copia donde estn el servidor y el cliente A continuacin se ejecuta el Servidor:
java classpath .\ HolaMundoServer

Luego se ejecuta el Cliente:


java classpath .\ HolaMundoClient

Aplicaciones Telemticas - RMI

18

Ejercicios
1. 2. Crea un nuevo mtodo en la clase que pase el mensaje interno del servidor a maysculas. Prubalo con el cliente. Desarrolle una aplicacin cliente/servidor utilizando RMI en la que se utilice un objeto remoto Calculadora que provea los siguientes mtodos: int suma (int op1, int op2): Devuelve op1+op2 int resta (int op1, int op2): Devuelve op1-op2 int divide (int op1, int op2): Devuelve op1/op2 int multiplica (int op1, int op2): Devuelve op1*op2

Aplicaciones Telemticas - RMI

19

S-ar putea să vă placă și