La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Java RMI. Entornos orientados a objetos  Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan entre sí.  Un programa.

Presentaciones similares


Presentación del tema: "Java RMI. Entornos orientados a objetos  Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan entre sí.  Un programa."— Transcripción de la presentación:

1 Java RMI

2 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.    

3 Entornos orientados a objetos     DATOS Implementación de métodos (op1, op2,..., opN) op1 op2 opN

4 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.    

5 Enlace dinámico Shape *aShape; ShapeList *aList; int n = aList ->numberElements(); for (int i=1; i<=n; i++) { aShape = aList -> nthELement(); cout perimeter() << “\n”; }    

6 Modelo de objetos    

7 Modelo de objetos en sistemas distribuidos    

8 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.    

9 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    

10 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.    

11 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.    

12 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.    

13 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);    

14 Arquitectura de Java RMI    

15 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.    

16 ¿Cómo escribir aplicaciones con Java RMI?    

17 Ejemplo    

18 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; }    

19 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; } }    

20 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); } } }    

21 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.    

22 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); } }    

23 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.    

24 Pasos  Java RMI:  Enlace a un nombre: bind(), rebind()  Encontrar un objeto y obtener su referencia: lookup()  refObj.nombre_met()    

25 Cuadro general     ClienteServidor Stub Skeleton Red op1 op2 opN

26 ¿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    

27 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.    


Descargar ppt "Java RMI. Entornos orientados a objetos  Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan entre sí.  Un programa."

Presentaciones similares


Anuncios Google