Title: Diapositiva 1
1Thomas Pieper DCC, Universidad de Chile
Sincronización de Objectos Compartidos usando
MatchMaker a través de Web Services
2MatchMaker
- 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
3MatchMaker
- 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
4MatchMaker
- 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
5RMI
- 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).
6RMI
- 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()
7Web 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.
8Web Services
lt?xml version'1.0' encoding'UTF-8'?gt ltSOAP-ENVE
nvelope xmlnsSOAP-ENV"http//www.w3.org/2001/
09/soap-envelope" xmlnsxsi"http//www.w3.org/
2001/XMLSchema-instance" xmlnsxsd"http//www.
w3.org/2001/XMLSchema"gt ltSOAP-ENVBodygt
ltns1getWeatherResponse
xmlnsns1"urnexamplesweatherservice"
SOAP-ENVencodingStyle"http//www.w3.org/2001/09/
soap-encoding"gt ltreturn
xsitype"xsdint"gt65lt/returngt
lt/ns1getWeatherResponsegt lt/SOAP-ENVBodygt lt/SO
AP-ENVEnvelopegt
9Web 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
10Apache 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.
11Apache AXIS
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
12Apache AXIS
- Ejemplo de cliente (sin AXIS)
public class CalcClient public static void
main (String args) throws Exception
String endpoint "http//localhost8080/axis/Calc
uladora.jws" Integer i1 new
Integer("1") Integer i2 new
Integer("2") Service service new
Service() Call call (Call)
service.createCall() call.setTargetEndpoin
tAddress (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)
13Apache AXIS
- Ejemplo de cliente (con AXIS)
public class CalcClient public static void
main (String args) throws Exception
CalculadoraService service new
CalculadoraServiceLocator ("http//localhost8080/
axis/Calculadora.jws") Calculadora calc
service.getcalculadora() int resultado
calc.sumar (1, 2) System.out.println
("Resultado " resultado)