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);
}
}