Anda di halaman 1dari 23

PROGRAMACIN

DISTRIBUIDA
RMI

Francisco Jos Moya Angulo

ndice

Introduccin.
Arquitectura RMI.
Crear aplicaciones distribuidas con RMI.
Crear un servidor RMI.
Crear un cliente RMI.

Introduccin
RMI (Remote Method Invocation) es un

mecanismo que permite realizar llamadas a


mtodos de objetos remotos situados en
distintas (o la misma) mquinas virtuales
de Java, compartiendo as recursos y carga
de procesamiento a travs de varios
sistemas.

Arquitectura RMI

Arquitectura RMI
Capa de Aplicacin:
Implementacin real de las aplicaciones cliente y servidor.
Llamadas a alto nivel para acceder y exportar objetos
remotos.
Se declaran mtodos en una interfaz que herede de
java.rmi.Remote.
Una vez que los mtodos han sido implementados, el
objeto debe ser exportado.
De forma implcita: si el objeto hereda de la clase
UnicastRemoteObject (paquete java.rmi.server)
De forma explcita: con una llamada al mtodo exportObject
() del mismo paquete.

Arquitectura RMI

Capa proxy, o capa Stub Skeleton:


Esta capa es la que interacta directamente con
la capa de aplicacin. Todas las llamadas a
objetos remotos y acciones junto con sus
parmetros y retorno de objetos tienen lugar
en esta capa.

Arquitectura RMI
Capa de referencia remota:
Responsable del manejo de la parte semntica
de las invocaciones remotas. Tambin es
responsable de la gestin de la replicacin de
objetos y realizacin de tareas especficas de la
implementacin con los objetos remotos,
como el establecimiento de las persistencias
semnticas y estrategias adecuadas para la
recuperacin de conexiones perdidas.

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

Arquitectura RMI
Toda aplicacin RMI normalmente se

descompone en 2 partes:
Un servidor, que crea algunos objetos
remotos, crea referencias para hacerlos
accesibles, y espera a que el cliente los
invoque.
Un cliente, que obtiene una referencia a
objetos remotos en el servidor, y los invoca.

Crear aplicaciones distribuidas


con RMI
Se deben seguir los siguientes pasos:
Disear e implementar los componentes de la
aplicacin distribuida.
Compilar los fuentes y generar Stubs.
Hacer las clases accesibles a la red.
Arrancar la aplicacin.

Crear aplicaciones distribuidas


con RMI
Disear e implementar los componentes

de la aplicacin distribuida.

Se decide la arquitectura de la aplicacin y se


determina qu componentes son objetos
locales y cuales deberan ser accesibles
remotamente. Este paso incluye.
Definir las interfaces remotas.
Implementar los objetos remotos.
Implementar los clientes.

Crear aplicaciones distribuidas


con RMI
Compilar los fuentes y Generar Stubs.
Se utiliza el compilador javac para compilar los
ficheros fuentes de Java que contienen las
implementaciones de las interfaces remotas, las clases
del servidor y del cliente.
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
Hacer accesibles las clases en la red.
En este paso, se tiene que hacer que todo (los
ficheros de clases Java asociados con las
interfaces remotas, los Stubs y otras clases que
se necesiten descargar en los clientes) sean
accesibles a travs de un servidor web.

Crear aplicaciones distribuidas


con RMI

Arrancar la aplicacin.
Arrancar la aplicacin incluye ejecutar el
registro de objetos remotos de RMI, el
servidor y el cliente.

Crear un servidor RMI


Definir la interfaz remota.
La interfaz debe ser pblica.
Debe heredar de la interfaz java.rmi.Remote,
para indicar que puede llamarse desde
cualquier Mquina Virtual Java.
Cada mtodo remoto debe lanzar la excepcin
java.rmi.RemoteException, adems de las
excepciones que pueda manejar.

Crear un servidor RMI


Un ejemplo de interfaz remoto:
public interface InterfazRemota extends java.rmi.Remote {
public void metodo1 () throws java.rmi.RemoteException;
public void metodo2 () throws java.rmi.RemoteException;

Crear un servidor RMI


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

Crear un servidor RMI


Compilar y ejecutar el servidor.

Crear un servidor RMI


Compilar y ejecutar el servidor.

Crear un cliente RMI


Definir la clase para obtener los objetos

remotos necesarios.

public class ClienteRMI {


public static void main(String[] args) {
try {
InterfazRemota ir = (InterfazRemota) java.rmi.Naming.lookup("//" +
args[0] + :" + args[1] + "/rmi");
//Se invoca al mtodo 1 y al mtodo 2)
ir.metodo1();
ir.metodo2 ();
}
catch (Exception e) {
e.printStackTrace();
}
}
}

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.