comunicación entre procesoscs.uns.edu.ar/~sd/data/papers/sobre_rmi-2008.pdf4/22/2008 1...

12
4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos z Estado: encapsula los datos z Métodos: operaciones sobre los datos It f tili l Objetos Distribuidos z Interface: se utiliza para la disponibilidad de los métodos

Upload: others

Post on 18-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

1

Comunicación entre Procesos

Objetos Remotos

Objetos Distribuidos

Estado: encapsula los datosMétodos: operaciones sobre los datosI t f tili l

Objetos Distribuidos

Interface: se utiliza para la disponibilidad de los métodos

Page 2: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

2

Objetos Remotos

Objetos DistribuidosObjetos Distribuidos

Tipos de Objetos

Objetos Remotos

Compile-Time: dependientes del lenguaje de programación

Runtime: independientes del lenguajeRuntime: independientes del lenguaje de programación

Object adapter

Page 3: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

3

Tipos de Objetos

Objetos Remotos

Persistentes: perduran en el tiempo. No depende del proceso servidor

Transitorios: perdura mientras estéTransitorios: perdura mientras esté activo el proceso servidor.

Binding un Cliente a un Objeto

Objetos Remotos

Binding un Cliente a un Objeto

Distr_object* obj_ref; //Declaración de una referencia a un // objeto del sistema (systemwide)

obj ref ; // Inicialización de la referencia al

(A) Un ejemplo con binding implícito utilizando solamente referencias globales.

obj_ref = …; // Inicialización de la referencia al // objeto ditribuido

obj_ref-> do_something(); // Bind implícito e invocación a un // métdodos.

Page 4: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

4

Binding un Cliente a un Objeto

Objetos Remotos

g j

Distr_object objPref; //Declaración de una referencia a un //objeto del sistema (systemwide)

Local_object* obj_ptr; //Declaración de un puntero a un //objeto local

(B) Un ejemplo con binding explícito utilizando referencias globales y locales.

obj_ref = …; //Inicialización de la referencia al //objeto distribuido.

obj_ptr = bind(obj_ref); //Bind explícito y obtención de un // puntero al proxy local.

obj_ptr -> do_something(); //Invocación de un método en el proxy // local.

Referencia a un Objeto

Objetos Remotos

Dirección de red de la máquina, dirección de InternetIdentificación del servidor (puerto)Tiempo

j

TiempoIdentificación del objetoInterface del Objeto Remoto

Page 5: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

5

Referencia a un Objeto

Objetos Remotos

Dir Internet Nro. puerto tiempo Nro.objeto interface del Objeto remoto

32 bits 32 bits 32 bits 32 bits

j

Forma de Invocación

Objetos Remotos

Estática

Forma de Invocación

Fobjeto.append(int)p. ej

Dinámica

Invoke(objeto, método, param entrada, param salida)

Invoke(fobjeto, id(append), int)

Page 6: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

6

Pasaje de Parámetros

Objetos Remotos

Pasaje de Parámetros

Invocación de Métodos

RMI

Locales y Remotos

remota invocacióninvocación

invocaciónremota

locallocal

localinvocación

A B

CE

Flocal

invocaciónA

D

Page 7: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

7

Objeto Remoto e Interfaces

RMI

Objeto Remoto e Interfaces

interfaceremota Datos

remotoobjeto

interfacem1m2m3

m4m5m6

implementación{ De métodos

Arquitectura y Componentes

RMI

Arquitectura y Componentes

objeto A objeto BskeletonRequest

proxy de B

Para clase B’s & dispatcher

remotocliente servidor

Reply

ComunicaciónRemote Remote referenceComunicaciónmódulo demódulo de

reference módulo módulo

Page 8: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

8

Java RMI

RMI

• Java Remote Method Invocation (Java RMI) permite crearaplicaciones distribuidas utilizando la tecnología basada en Java, permitiendo que los métodos de objetos remotospuedan ser invocados desde otra máquina virtual Java, ubicada posiblemente en otro nodo.

• RMI utiliza serialización de objetos para realizar el marshal y unmarshal de los parámetros y no truncar tipos, soportandop y p , pel polimorfismo de la orientación a objetos.

• Releases de Java RMI– Java RMI está disponible para la Plataforma Java 2,

Standard Edition (J2SE) y la Plataforma Java 2, Micro Edition (J2ME).

Java RMI

RMI

Pasos para realizar una aplicación distribuida1. Diseñar la interface remota2. Diseñar el programa servidor3. Diseñar el programa cliente4. Compilar los fuente y generar los stubs

Page 9: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

9

Java RMI - Ejemplo

RMI

import java.rmi.*;public interface ReceiveMessageInterface extends

Remote

j p

ReceiveMessageInterface.java

1.‐ Diseñar la Interface Remota

Remote{

void receiveMessage(String x) throws RemoteException;

}

Java RMI - Ejemplo2 Diseñar el programa servidor

RMI

import java.rmi.*;import java.rmi.registry.*;import java.rmi.server.*;import java.net.*;public class RmiServer extends java.rmi.server.UnicastRemoteObjectimplements ReceiveMessageInterface{

int thisPort;

2.‐ Diseñar el programa servidorRmiServer.java

;String thisAddress;Registry registry; // rmi registry for lookup the remote objects.// This method is called from the remote client by the RMI.// This is the implementation of the “ReceiveMessageInterface”.

public void receiveMessage(String x) throws RemoteException{

System.out.println(x);}

Page 10: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

10

public RmiServer() throws RemoteException{

RMI

try{// get the address of this host.thisAddress= (InetAddress.getLocalHost()).toString();

}catch(Exception e){

throw new RemoteException("can't get inet address.");}

thisPort=3232; // this port(registry’s port)System.out.println("this address="+thisAddress+",port="+thisPort);t {try{// create the registry and bind the name and object.registry = LocateRegistry.createRegistry( thisPort );registry.rebind("rmiServer", this); }catch(RemoteException e){throw e;}

}

RMI

static public void main(String args[]){

try{RmiServer s=new RmiServer();

} catch (Exception e) {

e.printStackTrace();System.exit(1);

}}}

}

Page 11: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

11

Java RMI - Ejemplo

RMI

import java.rmi.*;import java.rmi.registry.*;import java.net.*;

public class RmiClient{

static public void main(String args[]){

3.‐ Diseñar el programa cliente RmiClient.java

{ReceiveMessageInterface rmiServer;Registry registry;String serverAddress=args[0];String serverPort=args[1];String text=args[2];System.out.println("sending "+text+" to "+serverAddress+":"+serverPort);

try{

RMI

// get the “registry” registry=LocateRegistry.getRegistry(serverAddress,

(new Integer(serverPort)).intValue());// look up the remote objectrmiServer=

(ReceiveMessageInterface)(registry.lookup("rmiServer"));// call the remote methodrmiServer.receiveMessage(text);

}}catch(RemoteException e){

e.printStackTrace();}catch(NotBoundException e){

e.printStackTrace();}

}}

Page 12: Comunicación entre Procesoscs.uns.edu.ar/~sd/data/papers/Sobre_RMI-2008.pdf4/22/2008 1 Comunicación entre Procesos Objetos Remotos Objetos Distribuidos zEstado: encapsula los datos

4/22/2008

12

Java RMI - Ejemplo

RMI

javac RmiServer.java ReceiveMessageInferface.javajavac RmiClient.java ReceiveMessageInterface.java

4.‐ Compilar los fuentes y generar los stubs

rmic –classpath . RmiServer

RmiServer_Skel.classRmiServer_Stub.class