Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos...

28
Java RMI Sistemas distribuidos

Transcript of Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos...

Page 1: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Java RMI

Sistemas distribuidos

Page 2: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 1

Entornos orientados a objetos

• Tendencia actual hacia sistemas compuestos por un conjunto de

objetos que interactúan entre sí.

– Un programa solicita servicios invocando los métodos que

ofrece un objeto.

– La invocación de métodos se ve como un paso de mensajes.

Page 3: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 2

Entornos orientados a objetos

DATOS

Implementación de

métodos

(op1, op2, ..., opN)

op1

op2

opN

Page 4: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 3

Entornos orientados a objetos

• Comunicación entre objetos: Mensajes.

• Encapsulación.

• Identidad del objeto (Identificación).

• Herencia.

• Acciones.

• Clases.

• Instancias.

• Interfaces vs implementaciones.

• Herencia múltiple.

• Enlace dinámico.

• Recolección de basura.

Page 5: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 4

Enlace dinámico

Shape *aShape;

ShapeList *aList;

int n = aList ->numberElements();

for (int i=1; i<=n; i++) {

aShape = aList -> nthELement();

cout << “Perimeter:” << aShape->perimeter() << “\n”;

}

Page 6: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 5

Modelo de objetos

Page 7: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 6

Modelo de objetos en sistemas distribuidos

Máquina A Máquina B Máquina C

Page 8: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 7

Modelo de objetos en sistemas distribuidos

• Sistemas distribuidos.– Aplicaciones inherentemente distribuidas.

– Se caracterizan por su complejidad.

• Sistemas orientados a objetos.– Más cercanos al lenguaje natural.

– Facilitan el diseño y la programación.

Page 9: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 8

Modelo de objetos en sistemas distribuidos

• ANSA (1989-1991) fue el primer proyecto que intentó

desarrollar una tecnología para modelizar sistemas distribuidos

complejos

– Utilizaba un diseño orientado a objetos

• Estándares:

– RMI: invocación de métodos remotos de Java

– CORBA: expande DCE con servicios orientados a objetos

– DCOM: versión CORBA de Microsoft

Page 10: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 9

Modelo de objetos en sistemas distribuidos

• ROID: Remote Object IDentifier.

– Java RMI: ObjID.

• Localización de objetos.

– Servicio de nombres.

• Control de concurrencia.

• Transacciones.

• Protección de objetos.

• Recolección de basura de objetos remotos.

Page 11: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 10

Invocación de métodos remotos (RMI)

• Comunicación cliente/servidor => RPC.

• Sistemas distribuidos basados en objetos => RMI (Remote

method invocation).

• RMI: Acción de invocar un método de un interfaz remoto en un

objeto remoto.

• RMI ofrece:

– Mecanismos para crear servidores y objetos cuyos métodos

se puedan invocar remotamente.

– Mecanismos que permiten a los clientes localizar los objetos

remotos.

Page 12: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 11

Invocación de métodos remotos en Java

• Java RMI

• El soporte para RMI en Java está basado en las interfaces y

clases definidas en los paquetes java.rmi y java.rmi.server

• Características de Java RMI:– No requiere un IDL (Interface Definition Language).

– La transferencia de objetos de tipos de datos complejos se lleva a cabo

mediante mecanismos de serialización.

– Es necesario tratar mayor número de excepciones que en el caso de

invocación de métodos locales.

Page 13: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 12

Invocación de métodos remotos en Java

• Localización de objetos remotos:– Servidor de nombres: java.rmi.Naming

• Ejemplo:

BankAccount acct = new BankAccountImpl();

String url = “rmi://java.Sun.COM/account”;

// enlazamos una url a un objeto remoto

java.rmi.Naming.bind(url, acct);

....

// búsqueda de la cuenta

acct = (BankAccount) java.rmi.Naming.lookup(url);

Page 14: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 13

Arquitectura de Java RMI

Page 15: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 14

Arquitectura de Java RMI

• Nivel de transporte: se encarga de las comunicaciones y de

establecer las conexiones necesarias

• Nivel de gestión de referencias remotas: trata los aspectos

relacionados con el comportamiento esperado de las referencias

remotas (mecanismos de recuperación, etc.)

• Nivel de resguardo/esqueleto (proxy/skeleton) que se encarga

del aplanamiento (serialización) de los parámetros

– proxy: resguardo local. Cuando un cliente realiza una

invocación remota, en realidad hace una invocación de un

método del resguardo local.

– Esqueleto (skeleton): recibe las peticiones de los clientes,

realiza la invocación del método y devuelve los resultados.

Page 16: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 15

¿Cómo escribir aplicaciones con Java RMI?

Definición de la interfaz remota

javac

(.java)

1

2

3

4

10

9

5

6

7

8

(.java)

usaCliente

EjectuarCliente

(.class)

CLIENTE SERVIDOR

(.class)

Esqueleto(.class)

Implementación de la interfaz remota

Esqueleto(.class)

Servidor (.class)

Arrancar RMIRegistry

Crear los objetos

Registrar los objetos

javac

rmic

Page 17: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 16

Ejemplo

Page 18: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 17

Modelización de la interfaz remota (Sumador)

public interface Sumador extends java.rmi.Remote

{

public int sumar(int a, int b)

throws java.rmi.RemoteException;

}

Page 19: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 18

Clase que implementa la interfaz (SumadorImpl)

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject;

public class SumadorImpl extends UnicastRemoteObject implements

Sumador {

public SumadorImpl(String name) throws RemoteException {

super();

try {

System.out.println("Rebind Object " + name);

Naming.rebind(name, this);

} catch (Exception e){

System.out.println("Exception: " + e.getMessage());

e.printStackTrace();

}

}

public int sumar (int a, int b) throws RemoteException {

return a + b;

}

}

Page 20: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 19

Código del servidor (SumadorServer)

import java.rmi.*;

import java.rmi.server.*;

public class SumadorServer {

public static void main (String args[]) {

try {

SumadorImpl misuma = new

SumadorImpl("MiSumador");

} catch(Exception e) {

System.err.println("System exception" + e);

}

}

}

Page 21: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 20

Registro del servicio

• Antes de arrancar el cliente y el servidor, se debe arrancar el

programa rmiregistry en el servidor para el servicio de nombres.

El puerto que utiliza el rmiregistry por defecto es el 1099.– rmiregistry [port_number]

• El método rebind es utilizado normalmente en lugar del método

bind, porque garantiza que si un objeto rémoto se registró

previamente con dicho nombre, el nuevo objeto reemplazará al

antiguo.

Page 22: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 21

Código en el cliente (SumadorClient)

import java.rmi.registry.*;

import java.rmi.server.*;

public class SumadorClient {

public static void main(String args[]){

int res = 0;

try {

System.out.println("Buscando Objeto ");

Sumador misuma = (Sumador)Naming.lookup("rmi://" + args[0] +

"/" +"MiSumador");

res = misuma.sumar(5, 2);

System.out.println("5 + 2 = " + res);

}

catch(Exception e){

System.err.println(" System exception"); }

System.exit(0);

}

}

Page 23: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 22

Búsqueda

• Cualquier programa que quiera instanciar un objeto remoto debe

realizar una búsqueda de la siguiente forma:

Sumador misuma = (Sumador)Naming.lookup("rmi://" + args[0] + "/"

+"MiSumador");

• El método lookup devuelve una referencia remota a un objeto

que implementa la interfaz remota.

• El método lookup interactúa con rmiregistry.

Page 24: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 23

Pasos

• Java RMI:– Enlace a un nombre: bind(), rebind()

– Encontrar un objeto y obtener su referencia: lookup()

– refObj.nombre_met()

Page 25: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 24

Cuadro general

Cliente Servidor

Stub Skeleton

Red

op1

op2

opN

Page 26: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 25

¿Cómo se ejecuta?

• Compilación

javac Sumador.java

javac SumadorImpl.java

javac SumadorClient.java

javac SumadorServer.java

• Generación de los esqueletos

rmic SumadorImpl

• Ejecución del programa de registro de RMI

rmiregistry

• Ejecución del servidor

java SumadorServer

• Ejecución del cliente

java SumadorCliente <host-del-servidor>

Page 27: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 26

Java RMI vs CORBA

• Java RMI es más sencillo:

– Trata sólo con objetos Java.

• Java RMI permite pasar por valor cualquier objeto que se pueda

“serializar”.

• CORBA es más flexible:

– Proporciona soporte RMI de objetos implementados en

diversos lenguajes y clientes escritos también en distintos

lenguajes.

• CORBA añade bastante complejidad.

Page 28: Java RMI - Hosting Miarrobaemiso.webcindario.com/SD/javaRMI.pdf · Entornos orientados a objetos • Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan

Sistemas Distribuidos 27

Referencias bibliográficas

• Distributed Systems. Concepts and Design. 2º edición

G. Coulouris, J. Dollimore, T. Kindberg.

Addison-Wesley, 1994

http://www.dcs.qmw.ac.uk/research/distrib/book.html

• Información on-line de Sun (Remote Method Invocation Specification):http://java.sun.com/products/jdk/1.1/docs/guide/rmi/spec/rmiT

OC.doc.html

• Distributed Operating SystemsA. S. TanenbaumPrentice-Hall, 1995