Sincronización de Objectos Compartidos usando MatchMaker a través de Web Services Thomas Pieper DCC, Universidad de Chile.

1 Sincronización de Objectos Compartidos usando MatchMake...
Author: Eladio Alejandro
0 downloads 2 Views

1 Sincronización de Objectos Compartidos usando MatchMaker a través de Web Services Thomas Pieper DCC, Universidad de Chile

2  MiddleWare creado por COLLIDE (COLlaborative Learning in Intelligent Distributed Environment)  http://www.collide.info 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

3  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

4 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

5 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).

6 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();

7 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.

8 Web Services  Ejemplo de mensaje SOAP: 65 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.es/17/3421880/slides/slide_8.jpg", "name": "Web Services  Ejemplo de mensaje SOAP: 65", "description": "Web Services  Ejemplo de mensaje SOAP: 65", "width": "800" } 9 Web Services  Ejemplo de Web Service: API de Google  http://www.google.com/apihttp://www.google.com/api  http://www.googlefight.comhttp://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.wsdlhttp://api.google.com/GoogleSearch.wsdl { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.es/17/3421880/slides/slide_9.jpg", "name": "Web Services  Ejemplo de Web Service: API de Google  http://www.google.com/apihttp://www.google.com/api  http://www.googlefight.comhttp://www.googlefight.com  WSDL: Web Service Description Languaje.", "description": "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.wsdlhttp://api.google.com/GoogleSearch.wsdl.", "width": "800" } 10 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. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.es/17/3421880/slides/slide_10.jpg", "name": "Apache AXIS  AXIS: Apache EXtensible Interaction System Framework para manejar SOAP y Web Services.", "description": "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..", "width": "800" } 11 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 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.es/17/3421880/slides/slide_11.jpg", "name": "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", "description": "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", "width": "800" } 12 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); } { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.es/17/3421880/slides/slide_12.jpg", "name": "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); }", "description": "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); }", "width": "800" } 13 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); }

9 Web Services  Ejemplo de Web Service: API de Google  http://www.google.com/apihttp://www.google.com/api  http://www.googlefight.comhttp://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.wsdlhttp://api.google.com/GoogleSearch.wsdl

10 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.

11 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

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

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