P. 1
RMI

RMI

|Views: 97|Likes:
Publicado porkaleljc

More info:

Published by: kaleljc on Mar 14, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PPT, PDF, TXT or read online from Scribd
See more
See less

02/04/2013

pdf

text

original

PROGRAMACIÓN DISTRIBUIDA

RMI

Francisco José Moya Angulo

Índice

Introducción. Arquitectura RMI. Crear aplicaciones distribuidas con RMI. Crear un servidor RMI. Crear un cliente RMI.

Introducción RMI (Remote Method Invocation) es un mecanismo que permite realizar llamadas a métodos de objetos remotos situados en distintas (o la misma) máquinas virtuales de Java. compartiendo así recursos y carga de procesamiento a través de varios sistemas. .

Arquitectura RMI .

‡ De forma implícita: si el objeto hereda de la clase UnicastRemoteObject (paquete java. ± Llamadas a alto nivel para acceder y exportar objetos remotos.rmi. ± Se declaran métodos en una interfaz que herede de java.rmi. . el objeto debe ser exportado.Remote.Arquitectura RMI Capa de Aplicación: ± Implementación real de las aplicaciones cliente y servidor.server) ‡ De forma explícita: con una llamada al método exportObject () del mismo paquete. ± Una vez que los métodos han sido implementados.

± Esta capa es la que interactúa directamente con la capa de aplicación.Arquitectura RMI Capa proxy. o capa Stub ± Skeleton: proxy. . Todas las llamadas a objetos remotos y acciones junto con sus parámetros y retorno de objetos tienen lugar en esta capa.

También es responsable de la gestión de la replicación de objetos y realización de tareas específicas de la implementación con los objetos remotos.Arquitectura RMI Capa de referencia remota: ± Responsable del manejo de la parte semántica de las invocaciones remotas. . como el establecimiento de las persistencias semánticas y estrategias adecuadas para la recuperación de conexiones perdidas.

El protocolo de transporte subyacente para RMI es JRMP (Java Remote Method Protocol).Arquitectura RMI Capa de transporte: ± Es la responsable de realizar las conexiones necesarias y manejo del transporte de los datos de una máquina a otra. que solamente es ³comprendido´ por programas Java. .

crea referencias para hacerlos accesibles. y los invoca. ± Un cliente. que obtiene una referencia a objetos remotos en el servidor.Arquitectura RMI Toda aplicación RMI normalmente se descompone en 2 partes: ± Un servidor. . y espera a que el cliente los invoque. que crea algunos objetos remotos.

± Hacer las clases accesibles a la red. ± Compilar los fuentes y generar Stubs. ± Arrancar la aplicación.Crear aplicaciones distribuidas con RMI Se deben seguir los siguientes pasos: ± Diseñar e implementar los componentes de la aplicación distribuida. .

Crear aplicaciones distribuidas con RMI Diseñar e implementar los componentes de la aplicación distribuida. Este paso incluye. ‡ Implementar los objetos remotos. ‡ Definir las interfaces remotas. . ± Se decide la arquitectura de la aplicación y se determina qué componentes son objetos locales y cuales deberían ser accesibles remotamente. ‡ Implementar los clientes.

± Se utiliza el compilador rmic para crear los Stubs de los objetos remotos. RMI utiliza una clase Stub del objeto remoto como un proxy en el cliente para que los clientes puedan comunicarse con un objeto remoto particular.Crear aplicaciones distribuidas con RMI Compilar los fuentes y Generar Stubs. . las clases del servidor y del cliente. ± Se utiliza el compilador javac para compilar los ficheros fuentes de Java que contienen las implementaciones de las interfaces remotas.

Crear aplicaciones distribuidas con RMI Hacer accesibles las clases en la red. . se tiene que hacer que todo (los ficheros de clases Java asociados con las interfaces remotas. ± En este paso. los Stubs y otras clases que se necesiten descargar en los clientes) sean accesibles a través de un servidor web.

± Arrancar la aplicación incluye ejecutar el registro de objetos remotos de RMI. el servidor y el cliente.Crear aplicaciones distribuidas con RMI Arrancar la aplicación. .

rmi. ± Cada método remoto debe lanzar la excepción java. ± Debe heredar de la interfaz java.rmi. para indicar que puede llamarse desde cualquier Máquina Virtual Java.Remote. además de las excepciones que pueda manejar.Crear un servidor RMI Definir la interfaz remota.RemoteException. ± La interfaz debe ser pública. .

public void metodo2 () throws java.rmi.Remote { public void metodo1 () throws java.RemoteException. } .rmi.RemoteException.Crear un servidor RMI Un ejemplo de interfaz remoto: public interface InterfazRemota extends java.rmi.

RemoteException { } public void metodo1 () throws java. } catch (Exception e) { } } } .RemoteException { System.Naming.getHostAddress() + ³:" + args[0] + "/rmi".out.´). public class ClaseRemota extends java.´).rmi.println (³Este es el método 1.Crear un servidor RMI Implementar la interfaz remota. } public void metodo3 () { System.rmi.out.println (³Este método no puede llamarse remotamente.server. java.out.InetAddress.´).getLocalHost().rebind("//" +java.println (³Este es el método 2. } public static void main(String[] args) { try { InterfazRemota ir = new ClaseRemota().rmi.RemoteException { System.UnicastRemoteObject implements InterfazRemota { public ClaseRemota () throws java.net. ir).rmi. } public void metodo2 () throws java.rmi.

.Crear un servidor RMI Compilar y ejecutar el servidor.

Crear un servidor RMI Compilar y ejecutar el servidor. .

ir.lookup("//" + args[0] + ³ :" + args[1] + "/rmi").printStackTrace().metodo1(). public class ClienteRMI { public static void main(String[] args) { try { InterfazRemota ir = (InterfazRemota) java. } catch (Exception e) { e.Naming. //Se invoca al método 1 y al método 2) ir. } } } .rmi.metodo2 ().Crear un cliente RMI Definir la clase para obtener los objetos remotos necesarios.

.Crear un cliente RMI Compilar y ejecutar el cliente.

Crear un cliente RMI Compilar y ejecutar el cliente. .

.Arquitectura RMI Compilar y ejecutar el cliente.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->