Invocación de Métodos Remotos RMI: Remote Method Invocation

Slides:



Advertisements
Presentaciones similares
UNIVERSIDAD PRIVADA SAN PEDRO ESCUELA INGENIERIA CIVIL
Advertisements

Introducción a C#.
Características Generales y Entornos de Desarrollo
Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Curso de java básico (scjp)
Archivos Binarios Usando Serializable. Introducción Utilizar archivos binarios nos ayuda a guardar y leer más fácilmente los datos de archivos. Pero como.
EXCEPCIONES UNIDAD 5.
Programación Interactiva Introducción a Java
LEgo Java Operating System (LeJOS)
PROGRAMACIÓN ORIENTADA A OBJETOS EN JAVA
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Práctica II: Java RMI.
"java del lado del servidor" Servlet y JSP Java Server Pages.
Arquitectura CLARO-TECNOTREE CAPITULO 4: Excepciones
Capitulo 4 Excepciones.
Introducción a Remoting
Entornos orientados a objetos
RMI Remote Method Invocation
UNIVERSIDAD LATINA (UNILA)
RMI (Remote Method Invocation)
Francisco Moreno Bases de Datos II Universidad Nacional
Objetos Distribuidos – Aplicaciones RMI
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Manejo de excepciones en Java
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
RMI JAVA Implementación.
Lic. Rosemary Torrico Bascopé
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación EXCEPCIONES EN JAVA Diciembre de 2008.
Práctica III: Java RMI con Serialización y Activation Framework
JAVA. Introducción Que es java?  Código reusable  Multiplataforma.
El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Sistemas Operativos Centralizados y Distribuidos Carlos David Zepeda.
Public class MiClase { public static int tmp = 123; // miembro variable public static final double PI = ;// miembro constante public float.
1 Ingeniería del Software Ejercicios de Implementación  Caso de Uso Total Gasto (Junio 2003)  Caso de Uso Mejor Usuario (Septiembre 2003)  Caso de Uso.
1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.
SCJP Sun Certified Programmer for Java 6
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
Sincronización de Objectos Compartidos usando MatchMaker a través de Web Services Thomas Pieper DCC, Universidad de Chile.
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
Introducción a la Programación. Lenguaje de Máquina.
Tema 11: Excepciones Antonio J. Sierra.
Patrones Creacionales
JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I
Tema VI: Java RMI Luis López Fernández.
Capítulo 5 - b: Hilos. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Ejemplo de hilos: un applet Un.
RMI Remote Method Invocation 2da. Clase del 19 de Junio
1 Manejo de Excepciones y otros Agustín J. González ELO-329.
Remote Method Invocation (RMI) Basado en: Fundamentals of RMI. Short Course. JGuru.
Cambiando la manera de diseñar aplicaciones distribuidas Diseño orientado a las comunicaciones: Primero se diseña el protocolo de las comunicaciones y.
Manuel I. Capel Tuñón Ramón A. Carrasco González
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Detalles Generales sobre Java
Confidential // Neoris 1 Confidential // Do Not Reproduce without prior written permission from Neoris Servlets.
Tratamiento de excepciones
Invocación Dinámica en CORBA
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Clases “ Es una Abstracción de un elemento del mundo real ”
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
RMI: Invocación a método remoto, y Java RMI
Tema 1: Concurrencia con Java
ENTERPRISE JAVA BEANS. ACCESO AL EJB EJB_HOME. Accesible mediante JNDI. Permite crear y destruir EJB. EJB_OBJECT Expone los métodos del negocio del EJB.
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:

Invocación de Métodos Remotos RMI: Remote Method Invocation Prof. Wílmer Pereira Universidad Simón Bolívar

Arquitectura Cliente/Servidor Request Cliente Servidor Reply ¿ Cómo permitir comunicación entre objetos situados en diferentes máquinas ? ¿ Cómo llamar a métodos de programas que corren en máquinas diferentes ? La invocación del servicio remoto es a partir de un objeto (creado en el cliente) que llama a un método (implementado en el servidor) La idea es tener un contexto de ejecución parecido al local bajo una arquitectura cliente/servidor

Llamadas a Métodos Remotos El cliente necesita hacer transparente la llamada a métodos remotos => stubs El stub paquetiza los parámetros (marshalling) y los codifica en un formato estándar independientes de los procesadores involucrados en la aplicación cliente/servidor El stub da la impresión de localidad al cliente, asegurando transparencia El servidor asegura: desempaqueta los parámetros (unmarshalling), llama al método invocado, paquetiza los valores de retorno o excepción (marshalling) envía información al cliente. Big-endian

Principios de una llamada remota Llamada al método remoto desde el cliente: centralWarehouse.getQuantity(“SuperSucket 100”); Interfaz común al cliente y servidor: interface Warehouse { public int getQuantity(String description) throws RemoteException: . } Declaración del objeto local: Warehouse centralWarehouse = ...;

Carga dinámica de clases El cliente requiere cargar las clases y excepciones que el servidor cambie, según su evolución Carga dinámica con el ClassLoader Sin embargo ... esto implica problemas de seguridad En consecuencia ... se necesita al security manager para impedir llegada de virus a través de los stubs

Ejemplo: Interfaz e implantación Interfaz compartida por el cliente y el servidor: interface Product extends Remote { public String getDescription() throws RemoteException: } Llamada del cliente: Product p; String d=p.getDescription(); Implantación del método remoto: public class ProductImpl extends UnicastRemoteException implements Product { public ProductImpl(String d) throws RemoteException { descr=d; } { return “Esto es un”+descr; } private String descr;

Jerarquía de clases Object Remote RemoteObject RemoteStub RemoteServer UnicastRemoteObject SUN propone la clase MulticastRemote para manejar objetos replicados en múltiples servidores

Convenciones RMI Sufijos Sin: Interfaz común cliente/servidor (Product) Impl: Clase del servidor que implemente la interfaz (ProductImpl) Server: Clase que crea los objetos servidores (ProductServer) Client: Clase que llama a métodos remotos (ProductClient) _Stub Subclase generada automáticamente por rmic (Product_Stub) rmic genera el stub que es usado por el cliente rmic ProductImpl

Servicio de registro de stubs El servidor carga los stubs por cada uno de sus objetos (generado por rmic) para que pueda ser descargado por cada objeto del cliente Carga el stub en servidor de registro (bind) //servidor ProductImpl pl = new ProductImpl(); Naming.bind(“toaster”,pl); Descarga el stub del servidor de registro (lookup) //cliente Product p = (Product) Naming.lookup (“rmic://www.ldc.usb.ve/toaster”); El puerto por defecto es el 1099 La aplicación servidor debe correr en la misma máquina del servidor de registro (por razones de seguridad)

Código de ejemplo (Servidor) import java.rmi.*; import java.rmi.server*; public class ProductServer { public static void main(String args[]) { try { ProductImpl p1 = new ProductImpl(“Black Toaster”); ProductImpl p2 = new ProductImpl(“Express Oven”); Naming.rebind(“toaster”,p1); Naming.rebind(“oven”,p2); } catch (Exception e) { System.out.println(“Error: “+e); } Antes de correr el servidor debe levantarse el servidor de registro El servidor queda levantado indefinidamente con un thread que lanza el objeto de UnicastRemoteObject

Código de ejemplo (Implantación del Servidor) import java.rmi.*; import java.rmi.server*; public class ProductImpl extends UnicastRemoteObject implements Product { public ProductImpl(String n) throws RemoteException { name = n; } public String getDescription() throws RemoteException { return “Est es un “+name; } private String name; } A partir de esta clase se crean los stubs que deben cargarse en el servidor de registro (bind) y ser bajados por el cliente (lookup) Los métodos que llama el cliente están implantados en esta clase

Código de ejemplo (Interfaz) import java.rmi.*; public interface Product extends Remote { String getDescription() throws RemoteException; } La interfaz debe estar tanto en el servidor como en el cliente de la aplicación Inicialmente se instala el servidor de registro Se ejecuta el servidor de la aplicación para cargar los stubs en el servidor de registro que fue instalado antes rmiregistry & java ProductServer

Codigo de ejemplo (Cliente) import java.rmi.*; import java.rmi.server*; public class ProductClient { public static void main(String args[]) { System.setSecurityManager(new RMISecurityMananger()); String url = “rmi://localhost/” try { Product c1 = (Product)Naming.lookup(url+”toaster”); Product c2 = (Product)Naming.lookup(url+”oven”); System.out.println(c1.getdescription()); System.out.println(c2.getdescription()); } catch (Exception e) { System.out.println(“Error: “+e); } System.exit(0); El programa instala el manejador de seguridad y se baja los stubs (uno por cada objeto del cliente) para poder llamar al método remoto

Políticas de seguridad de la aplicación El manejador de seguridad restringe a cualquier Código de ser cargado desde el cliente Sin embargo el cliente necesita conexión para: Bajar los stubs del servidor de registro Acceder a los objetos remotos para llamar a los métodos remotos En consecuencia se debe suplir un archivo de seguridad: cliente.policy grant { permission java.net.SocketPermission “*:1024-65535”,”connect”; }; java ProductClient -Djava.security.policy=client.policy

Correr la aplicación (localmente) Compilar fuentes en el servidor javac Product*.java Correr rmic para generar los stubs rmic ProductImpl Instalar el servidor de registro rmiregistry & Instalar el servidor java ProductServer & Correr el cliente java –Djava.security.policy=cliente.policy ProductClient Directorios y archivos Servidor Cliente Download ProductServer.class ProductClient.class ProductImpl_Stub.class ProductImpl.class Product.class Product.class Product.class client.policy ProductImpl_Stub.class

Correr la aplicación (remotamente) Para bajar los stubs debe haber un servidor Web corriendo en el servidor Se puede instalar un servidor Web sencillo desde ftp://java.sun.com/pub/jdk1.1/rmi/class-server.zip Mover el directorio download al directorio del servidor Web Cambiar el client.policy para conectarse al servidor de registro, implantaciones del servidor y el puerto del HTTP. Todo esto indicando la máquina remota grant { permission java.net.SocketPermission “servok.ldc.usb.ve:1024-65535”,”connect”; permission java.net.SocketPermission “servok.ldc.usb.ve:80”,”connect”; };

Aplicación con servidor Web Levantar el rmiregistry en un shell sin classpath y desde un directorio sin .class Desde un shell levantar el servidor dando el URL del directorio download Modificar el URL en el cliente para poder acceder al servidor remoto String url = “rmi://servok.ldc.usb.ve/” Product cl= (Product)Naming.lookup(url+”tostador”); Correr el cliente indicando las nuevas políticas de seguridad java ProductServer –Djava.rmi.server.codebase=http://localhost/download/ java ProductClient –Djava.security.policy=client.policy

Observaciones del enfoque RMI Este enfoque permite ejecutar concurrente el mismo método por varios clientes. Si se requiere exclusión mutua se debe usar sincronize. No se tiene acceso a los mismos descriptores de I/O entre el cliente y el servidor. Los objetos pasados como parámetros deben poder implementar la interfaz Serializable. A partir del jdk 1.6 en adelante no hace falta correr rmic. Sin embargo es recomendable hacerlo manualmente ... No se pueden sobrescribir los métodos equals, clone y paint. Deben escribirse métodos propios para realizar dichas tareas. Cuando se implementan la aplicación sobre applets, no se puede modificar las restricciones de seguridad que impone el browser. Es conveniente usar levantar el servidor de registro (rmiregistry) desde el servidor para evitar su proliferación en varias máquinas. El comando es: LocateRegistry.createRegistry(port);