130 likes | 241 Views
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
E N D
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); } }