La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Entornos orientados a objetos

Presentaciones similares


Presentación del tema: "Entornos orientados a objetos"— Transcripción de la presentación:

0 Java RMI Sistemas distribuidos María de los Santos Pérez Hernández

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. Sistemas Distribuidos

2 Entornos orientados a objetos
op1 DATOS op2 Implementación de métodos (op1, op2, ..., opN) opN 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. 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”; } El método que se ejecuta se selecciona de acuerdo a la clase del receptor de los mensajes. Sistemas Distribuidos

5 Modelo de objetos Sistemas Distribuidos

6 Modelo de objetos en sistemas distribuidos

7 Modelo de objetos en 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. Sistemas Distribuidos

8 Modelo de objetos en sistemas distribuidos
ANSA ( ) 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 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. 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. 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. 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); Sistemas Distribuidos

13 Arquitectura de Java RMI
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. Sistemas Distribuidos

15 ¿Cómo escribir aplicaciones con Java RMI?
Sistemas Distribuidos

16 Ejemplo 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; } 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; 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); } 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. 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); 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. Sistemas Distribuidos

23 Pasos Java RMI: Enlace a un nombre: bind(), rebind()
Encontrar un objeto y obtener su referencia: lookup() refObj.nombre_met() Sistemas Distribuidos

24 Cuadro general Cliente Servidor Stub Skeleton Red op1 op2 opN
Sistemas Distribuidos

25 ¿Cómo se ejecuta? Compilación Generación de los esqueletos
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> 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. Sistemas Distribuidos

27 Referencias bibliográficas
Distributed Systems. Concepts and Design. 2º edición G. Coulouris, J. Dollimore, T. Kindberg. Addison-Wesley, 1994 Información on-line de Sun (Remote Method Invocation Specification): Distributed Operating Systems A. S. Tanenbaum Prentice-Hall, 1995 Sistemas Distribuidos


Descargar ppt "Entornos orientados a objetos"

Presentaciones similares


Anuncios Google