Invocación remota

Anuncio
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
Descargar