Download Diapositiva 1 - DCC - Universidad de Chile

Document related concepts
no text concepts found
Transcript
Thomas Pieper
DCC, Universidad de Chile
Sincronización de Objectos Compartidos
usando MatchMaker
a través de Web Services
MatchMaker
MiddleWare creado por COLLIDE (COLlaborative
Learning in Intelligent Distributed Environment)

 http://www.collide.info
Pensado para facilitar el desarrollo de aplicaciones
colaborativas en Java

El desarrollador no necesita diseñar un protocolo
de comunicaciones ni el servidor. MatchMaker
también maneja la concurrencia mediante monitores
de Java

Clientes comparten objetos, típicamente asociados
a elementos de interfaces gráficas

MatchMaker
Arquitectura de Servidor Central: clientes envían
eventos al servidor y este los reparte al resto de los
clientes

Servidor puede manejar varias sesiones
simultáneamente. Cada sesión posee un “árbol de
sincronización”

Tanto cliente como servidor tienen un árbol de
sincronización que representa la lógica de la
aplicación y mantiene el estado de la sesión

Clientes pueden: crear sesión, unirse a una sesión
existente, salir de una sesión y seguir trabajando
offline, destruir una sesión

MatchMaker
El Árbol de Sincronización resuelve el problema de
los latecomers ya que este se envia completo cuando
un cliente se une a una sesión. Luego la
sincronización es por eventos.

El Árbol de Sicronización permite también que
hayan distintas versiones para un mismo cliente.

Ejemplo:
•
Versión para alumno
•
Versión para Profesor
•
Versión para Palm
•
ETC
RMI
Versión más reciente de MatchMaker utiliza RMI
como herramienta de comunicación

RMI (Remote Method Invocation):
Implementación de CORBA exclusivo para
aplicaciones Java.

Facilita la programación de aplicaciones en red a
través del paradigma de objetos remotos y llamadas
a procedimientos remotos (RPC).

RMI

En un esquema muy resumido:
 El servidor pone objetos accesibles desde la red:
class Hello
{
public String Hola()
{
return "Hola Mundo";
}
}

Un programa cliente crea una referencia a esos objetos…
HelloInterface hello = (HelloInterface) Naming.lookup ("//localhost/Hello");

… e invoca métodos de ese objeto remoto como si fuera local:
String holamundo = hello.Hola();
Web Services
El Web es a las Personas
como Web Services es a las Aplicaciones
Las personas sabemos leer; las aplicaciones
saben parsear

Ejemplo: Consultar el nombre de una persona
en el sitio del Registro Civil a través de su RUT

Web Services: mensajería en XML usando
SOAP (Simple Object Access Protocol) como
protocolo de RPC y HTTP como capa de
comunicaciones.

Web Services

Ejemplo de mensaje SOAP:
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://www.w3.org/2001/09/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getWeatherResponse
xmlns:ns1="urn:examples:weatherservice"
SOAP-ENV:encodingStyle="http://www.w3.org/2001/09/soap-encoding">
<return xsi:type="xsd:int">65</return>
</ns1:getWeatherResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Web Services

Ejemplo de Web Service: API de Google

http://www.google.com/api

http://www.googlefight.com
WSDL: Web Service Description Languaje.
Documento XML que describe como podemos
comunicarnos con el Web Service

WSDL: Describe los métodos disponibles, los
argumentos que reciben y lo que retornan


Ejemplo de documento WSDL:

http://api.google.com/GoogleSearch.wsdl
Apache AXIS

AXIS: Apache EXtensible Interaction System
Framework para manejar SOAP y Web Services.
Hay versiones para Java y C++
La versión para Java se instala como si fuera
una aplicación web (conjunto de ServLets)
dentro de un contenedor web.

Filosofía de AXIS: Crear web services de
manera tan fácil como “arrastrar y soltar” clases
Java dentro del contenedor web.

Apache AXIS

Ejemplo de Web Service:
public class Calculadora
{
public int sumar (int i1, int i2)
{
return i1 + i2;
}
public int restar (int i1, int i2)
{
return i1 - i2;
}
}
Para programar Web Services más complejos,
AXIS provee herramientas que facilitan mucho
su desarrollo: Java2WSDL y WSDL2Java

Apache AXIS

Ejemplo de cliente (sin AXIS):
public class CalcClient
{
public static void main (String[] args) throws Exception
{
String endpoint = "http://localhost:8080/axis/Calculadora.jws";
Integer i1 = new Integer("1");
Integer i2 = new Integer("2");
Service
service = new Service();
Call
call
= (Call) service.createCall();
call.setTargetEndpointAddress (new java.net.URL(endpoint) );
call.setOperationName ("sumar");
call.addParameter( "op1", XMLType.XSD_INT, ParameterMode.IN );
call.addParameter( "op2", XMLType.XSD_INT, ParameterMode.IN );
call.setReturnType( XMLType.XSD_INT );
Integer resultado = (Integer) call.invoke (new Object [] { i1, i2 });
System.out.println ("Resultado: " + resultado);
}
}
Apache AXIS

Ejemplo de cliente (con AXIS):
public class CalcClient
{
public static void main (String[] args) throws Exception
{
CalculadoraService service =
new CalculadoraServiceLocator ("http://localhost:8080/axis/Calculadora.jws");
Calculadora calc = service.getcalculadora();
int resultado = calc.sumar (1, 2);
System.out.println ("Resultado: " + resultado);
}
}