FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors Invocación remota Java RMI Java RMI ( Java Remote Method Invocation) – El sistema de Invocación Remota de Métodos (RMI) de Java permite a un objeto que se está ejecutando en una Máquina Virtual Java (VM / JRE) llamar a métodos de otro objeto que está en otra VM diferente. – Integrado en cualquier Máquina Virtual Java posterior a la versión 1.0 v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 2 1 Java RMI Características – – – – Permite abstraer las interfaces de comunicación a llamadas locales Permite trabajar olvidándote del protocolo Aplicaciones distribuidas de fácil desarrollo Recolector de basura distribuido Paquetes de Java RMI – Cliente: java.rmi (define clases, interfaces y excepciones usados por el cliente) – Servidor: java.rmi.server (idem usados por el servidor) – Localización de objetos: java.rmi.registry (idem usados para localizar y nombrar objetos remotos) – Recogida de basura: java.rmi.dgc (define clases e interfaces para recogida de basura distribuida) v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 3 Java RMI Arquitectura v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 4 2 Java RMI Cuando un objeto cliente quiere comunicarse con un objeto remoto: 1. Ha de conocerlo o localizarlo previamente. Para ello se usa un servicio de directorio, por ejemplo, el registro rmi (rmiregistry). X c = (X)Naming.lookup("rmi://servidor/ServicioX"); 2. Lo que obtiene es un representante local (stub) del objeto remoto. Cuando se invoca un método del stub, se pasa la petición a un representante remoto (skeleton) que invoca localmente al objeto que implementa el método. De cara al objeto cliente, todo es casi invisible: – Ha invocado un método de un objeto local (el stub), y ha obtenido una respuesta local. Lo que ha ocurrido entre stub cliente – stub servidor y objeto implementación es transparente para él. – Lo único diferente es la forma en que se ha instanciado el objeto (con Naming.lookup() en lugar de new()) y que una invocación a ese objeto puede generar alguna excepción nueva (como java.rmi.RemoteException) FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 5 Ejemplo Java RMI X.java public interface X extends java.rmi.Remote { public long incr(long a) throws java.rmi.RemoteException; public String mesg(String a) throws java.rmi.RemoteException; } v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 6 3 Ejemplo Java RMI XImpl.java public class XImpl extends java.rmi.server.UnicastRemoteObject implements X { // Constructor de la clase. // Obligatorio declarar que se puede producir una excepción "RemoteException" public XImpl() throws java.rmi.RemoteException { super(); } public long incr(long a) throws java.rmi.RemoteException { return a+1; } public String mesg(String a) throws java.rmi.RemoteException { return "!Hola Amigo " + a + "!"; } } FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 7 Ejemplo Java RMI XServidor.java import java.rmi.Naming; public class XServidor { public XServidor() { // Constructor de la clase try { XImpl c = new XImpl(); Naming.rebind("rmi://localhost:1099/ServicioX", c); } catch (Exception e) { System.out.println("Problema: " + e); } } public static void main(String args[]) { new XServidor(); } } v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 8 4 Ejemplo Java RMI XCliente.java import java.rmi.Naming; import java.rmi.RemoteException; import java.net.MalformedURLException; import java.rmi.NotBoundException; public class XCliente { public static void main(String[] args) { try { X c = (X)Naming.lookup("rmi://localhost:1099/ServicioX"); System.out.println( c.incr(4) ); System.out.println( c.mesg("Luis") ); } FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 9 Ejemplo Java RMI XCliente.java (continuación) catch (MalformedURLException murle) { System.out.println("MalformedURLException: " + murle); } catch (RemoteException re) { System.out.println("RemoteException: " + re); } catch (NotBoundException nbe) { System.out.println("NotBoundException: " + nbe); } catch (java.lang.ArithmeticException ae) { System.out.println("java.lang.ArithmeticException: " + ae); } } } v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 10 5 Ejemplo Java RMI Puesta en marcha de la aplicación – Compilar • javac *.java (X.class, XImpl.class, XServidor.class, XCliente.class) – Crear las clases Stub y Skeleton • rmic XImpl (XImpl_Stub.class, XImpl_Skel.class) – Arrancar el registro de objetos RMI . • start rmiregistry (puerto por defecto 1099) – Arrancar el servidor • start java XServidor – Ejecutar el cliente • java XCliente v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 11 CORBA CORBA (Common Object Request Broker Architecture) – definido y está controlado por el Object Management Group (OMG) – OMG define las APIs, el protocolo de comunicaciones y los mecanismos necesarios para permitir la interoperabilidad entre diferentes aplicaciones escritas en diferentes lenguajes y ejecutadas en diferentes plataformas, lo que es fundamental en computación distribuida IDL (Common Object Request Broker Architecture) – Interface Definition Language – Lenguaje para definir interfaces CORBA (NO es un lenguaje para implementar interfaces CORBA) ORB (Object Request Broker) – Object Request Broker. – A través de éste que se comunican los diversos "Stubs" y "Skeletons" generados a través de IDL v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 12 6 CORBA Arquitectura naming lookup naming service object client object implementation stub skeleton ORB ORB network network operating system operating system logical data flow physical data flow FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 13 Ejemplo CORBA con Java IDL Java IDL es una parte de la plataforma J2SE Java IDL incluye: – Un compilador IDL-a-Java (idlj) – un ORB que implementa un subconjunto de los servicios estándar de CORBA (orbd) – Una herramienta que permite a los programadores (servertool) • registrar /desregistrar objetos • Arrancar/parar servidores v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 14 7 Ejemplo CORBA con Java IDL http://java.sun.com/j2se/1.4.2/docs/guide/idl/jidlExample.html Hello.idl module HelloApp { interface Hello { string sayHello(); oneway void shutdown(); }; }; HelloImpl.java HelloServer.java HelloClient.java FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 15 Ejemplo CORBA con Java IDL Puesta en marcha de la aplicación – Crear el stub y skeleton • idlj -fall Hello.idl (crea *.java dentro de carpeta HelloApp) – Compilar • javac *.java HelloApp/*.java – Arrancar el orbd • start orbd -ORBInitialPort 1050 (MS-DOS) – Arrancar el servidor • start java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost – Ejecutar el cliente • java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 16 8 CORBA vs Java RMI Arquitectura – Semejantes Lenguaje de programación de la interfaz – IDL para CORBA – Java para Java RMI Escalabilidad – CORBA independiente lenguaje de programación – Java RMI soporta sólo Java Complejidad – CORBA más complejo que Java RMI – Incompatibilidad entre implementaciones de CORBA FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 17 SOAP SOAP (Simple Object Access Protocol) – Protocolo estándar creado por Microsoft, IBM y otros. – Actualmente bajo el consorcio web (W3C). • El World Wide Web Consortium, abreviado W3C, es un consorcio internacional que produce estándares para la World Wide Web. – A diferencia de Java RMI y CORBA, que son binarios, SOAP usa el código fuente en XML. • ¿Ventajas? ¿Inconvenientes? – SOAP funciona sobre cualquier protocolo de Internet, generalmente HTTP. v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 18 9 SOAP http://www.w3schools.com/soap/default.asp – – – – – – – – Introducción a SOAP Sintaxis de SOAP SOAP Envelope SOAP Header SOAP Body SOAP Fault SOAP HTTP Binding A SOAP Example FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 19 Sintaxis mensajes SOAP SOAP header header block header block optional SOAP envelope message body v.2007.02 required SOAP body FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 20 10 Ejemplo SOAP con HTTP service object web server method name, parameter list return value web client HTTP request HTTP response FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 21 Servicios Web http://www.w3c.es/Divulgacion/Guiasbreves/ServiciosWeb – ¿Qué es? – ¿Para qué sirve? – ¿Cómo funciona? – Ejemplos aplicación de Servicios Web • Los servicios web están pensados para que las aplicaciones interactúen entre ellas (no las personas) v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 22 11 Servicios Web: Infraestructura Direcory: Publish & Find Services: UDDI Inspection: Find Services on server: DISCO Description: Formal Service Descriptions: WSDL Wire Format: Service Interactions: SOAP Universal Data Format: XML Communications: Internet Simple, Open, Broad Industry Support FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 23 Servicios Web: Infraestructura XML (eXtensible Markup Language) – Formato universal para documentos estructurados y datos en la Web administrado por W3C UDDI (Universal Description, Discovery and Integration) – Servicio de directorio que permite publicar y/o describir servicios Web DISCO WSDL (Web Service Description Language) – Permite encontrar servicios Web en un sitio dado (centralizado) – Una gramática basada en XML que permite describir las capacidades de un servicio Web – WSDL es a SOAP lo que IDL es a CORBA SOAP (Simple Object Access Protocol) – Protocolo ligero para el intercambio de información en entornos distribuidos y descentralizados administrado por W3C v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 24 12 Servicios Web: Infraestructura UDDI Inspection http://www.ibuyspy.com/ibuyspy.disco Pide un Discovery Document DISCO Devuelve el Discovery Document (XML) Description WSDL http://www.ibuyspy.com/ibuyspycs/InstantOrder.asmx?wsdl Pide una descripción del servicio Devuelve la descripción del servicio (XML) Wire Format SOAP Servicio Web Cliente del servicio Web Enlace al Discovery Document (XML) UDDI u otro servicio de directorio Directory http://www.uddi.org Localiza un servicio Pide un servicio Devuelve la respuesta del servicio (XML) FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 25 Ejemplo Servicios Web http://www.xmethods.com/ – divya_12345 • Dado el nombre de un Servidor Web, devuelve la dirección IP – Ejemplo: www.anywebserver.com devuelve 256.1.1.56. • Permite probarla a usuarios no registrados en el Servicio Web (Try it) realizando una petición SOAP con una dirección de mail al Servicio Web – xs:string tns1:EmailAddress • Envía un mail a esa dirección de correo que permite activar esa cuenta de correo para realizar peticiones al Servicio Web como usuario no registrado • Desde la interfaz de xmethods puede consultarse el WSDL del servicio, la petición SOAP que se realiza y la respuesta SOAP que se recibe v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 26 13 Desarrollo de un Servicio Web con AXIS (Java) http://ws.apache.org/axis/java/user-guide.html – JWS (Java Web Service) Files - Instant Deployment Crear el código java de la aplicación (métodos remotos) Si tenemos instalado Tomcat con parser xml (xerces) y Axis – – – – Renombramos el fichero *.java a *.jws El código del Servicio Web tiene extensión *.jws Colocamos el fichero .jws en el root de nuestro servidor Web. Cuando alguien haga una petición a nuestro servicio Web, se generará todo lo necesario y dará una respuesta. FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 27 Desarrollo de un Servicio Web con AXIS (Java) Calculator.java public class Calculator { public int add(int i1, int i2) { return i1 + i2; } public int subtract(int i1, int i2) { return i1 - i2; } } v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 28 14 Desarrollo de un Servicio Web con .NET Visual Studio .NET – Crear un proyecto “ASP.NET Web Service” El código del Servicio Web tiene extensión *.asmx Si tenemos instalado .NET Framework – Colocamos el fichero .asmx en el root de nuestro servidor Web. – Cuando alguien haga una petición a nuestro servicio Web, .NET generará todo lo necesario y dará una respuesta. FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 29 Desarrollo de un Servicio Web con .NET ServicioMates.asmx <%@ WebService Language=“c#” Class=“ServicioMates” %> Using System.Web.Services; Public class ServicioMates : WebService { [WebMethod] public int suma( int num1, int num2 ) { return num1 + num2; } [WebMethod] public int resta( int num1, int num2 ) { return num1 - num2; } } v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 30 15 CORBA vs Servicios WEB Arquitectura – Semejantes – Si se utiliza HTTP se evitan los firewalls Lenguaje de programación de la interfaz Escalabilidad – IDL para CORBA y WSDL para Servicios Web (estándar) – Ambos independientes lenguaje de programación – Servicios Web intercambio de mensajes basado en texto XML (no binario) Extensibilidad Complejidad – Trabajan con protocolos Web estándares: XML, HTTP y TCP/IP. – CORBA más complejo que Servicios Web – SOAP es bastante menos complejo de implementar • Lista de implementaciones SOAP (Paul Kulchenko) : http://www.soapware.org/directory/4/implementations v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 31 16