Download Introducción a AJAX y Resumen Práctica

Document related concepts
no text concepts found
Transcript
Introducción a AJAX y visión global de
la práctica
Modelo de aplicaciones Web clásico (1)
„
„
La mayor parte de las interacciones del usuario
causan una petición HTTP al servidor Web
El servidor Web procesa la petición y devuelve la
nueva página a mostrar
„
„
Internamente la petición ejecuta una lógica de negocio (e.g.
búsqueda de productos, añadir un producto al carrito,
realizar un pedido, etc.) y devuelve una nueva página HTML
con la respuesta
Alternativamente la respuesta podría indicar un error o una
redirección
Modelo de aplicaciones Web clásico (2)
„
Ejemplo: búsqueda en Google
Navegador
Servidor
Acceder a la página principal
Buscar (“web services”)
Resto de la página
Modelo de aplicaciones Web clásico (y 3)
„
Ventajas del modelo
„
„
„
Ha sido y es útil
Soportado por numerosas tecnologías maduras =>
facilidad de desarrollo
Limitaciones del modelo
„
Las interfaces del usuario son poco interactivas con
respecto a las aplicaciones de escritorio
„
Ejemplo:
„
„
„
Una aplicación Web clásica que presenta un formulario, no puede
validar los campos (e.g. comprobar que un identificador de login
existe) hasta que el usuario pulsa el botón de submit, excepto
validaciones simples que se puedan hacer mediante JavaScript
Una aplicación de escritorio podría hacerlo cada vez que el usuario
rellena un campo, o incluso, mientras lo está rellenando (captura
eventos de usuario y valida)
Otros ejemplos: no tienen soporte de drag-n-drop, no es
posible refrescar la información de una zona de la página sin
tener que recargar toda la página, etc.
Modelo de aplicaciones AJAX (1)
„
„
AJAX es un término acuñado por Jesse James Garrett
„
http://www.adaptivepath.com/publications/essays/archives/000385.php
„
AJAX = Asynchronous JavaScript + XML
Popularizado por Google
„
„
Google Maps, Gmail, Google Calendar, etc.
Es un enfoque para la construcción de aplicaciones Web con
una interactividad similar a la que presentan las aplicaciones de
escritorio
„
„
„
„
La aplicación Web tiene dos partes: parte cliente y parte servidora
La parte cliente es en su mayor parte JavaScript
La parte servidora recibe peticiones HTTP asíncronas procedentes
de la parte cliente
A pesar de que el acrónimo AJAX sugiere el uso de XML para el
envío de datos, los datos pueden pasarse en el formato que
se desee (e.g. XML, HTML, texto plano, JSON, etc.)
Modelo de aplicaciones AJAX (2)
Navegador
Parte
JavaScript
1: petición
asíncrona
3: modifica
Árbol DOM
de la página
2: respuesta (XML, HTML, texto plano, JSON, etc.)
Parte
servidora
Servidor aplicaciones Web
Modelo de aplicaciones AJAX (3)
„
Parte cliente
„
Baja el código JavaScript necesario cuando sea preciso (e.g.
usando el tag <script> en una respuesta HTML)
„
„
NOTA: el navegador usa el API de DOM para representar el
HTML de la página que visualiza, y desde JavaScript se puede
acceder al API de DOM para manipular el árbol
Funcionamiento
„
„
„
„
Captura eventos del usuario (clicks, drap-n-drop, etc.)
Si puede resolver el evento localmente, lo hace
En otro caso (e.g. una búsqueda en la base de datos), envía
una petición asíncrona por HTTP a la parte servidora usando el
objeto XMLHttpRequest
Cuando llega la respuesta, modifica el árbol DOM de la página
„
Ejemplo: si la respuesta contiene los resultados de una búsqueda
en XML, añade nodos al árbol DOM para presentar los resultados
en HTML
Modelo de aplicaciones AJAX (4)
„
Parte cliente (cont)
„
NOTAS
„
Dado que la petición es asíncrona, el navegador no se queda
bloqueado, y el usuario “podría” continuar interactuando con la
aplicación mientras no llegue la respuesta
„
„
El código JavaScript suele utilizar estilos CSS en los nodos que
añade al árbol DOM
„
„
Sin embargo, esta ventaja muchas veces no se explota, dado que
la respuesta llega rápido o no tiene sentido para el usuario hacer
algo mientas tanto
El look-n-feel de la aplicación se puede cambiar sin modificar el
código JavaScript
Parte servidora
„
„
„
Recibe peticiones HTTP
Invoca lógica de negocio (e.g. lanzar una consulta a la base
de datos)
Devuelve datos
Modelo de aplicaciones AJAX (5)
„
Ejemplo: búsqueda en Google Suggest
Navegador
Servidor
Acceder a la página principal
Teclear “Web s” sin pulsar en “Google Search”
Datos: web sudoku, web services, website, ...
El código JavaScript modifica
el árbol DOM de la página para
añadir un desplegable con los
los datos devueltos en la respuesta
Modelo de aplicaciones AJAX (y 6)
„
Actualmente muchas aplicaciones Web usan AJAX para algunos
(pocos) casos de uso
„
„
Aquellos en los que un enfoque clásico resulta poco admisible para
el usuario final
Otras son 100% AJAX
Google Maps
(http://maps.google.com)
Google Calendar
(http://www.google.com/calendar)
Gmail
(http://gmail.google.com)
Desarrollo AJAX (1)
„
Existen un gran número de APIs para AJAX
„
Soporte para parte cliente: invocaciones asíncronas +
manipulación del árbol DOM
„ Soporte para parte servidora: framework para implementar
los servicios
Java
„
„
„
„
„
„
DWR (http://getahead.org/dwr)
Google Web Toolkit (http://code.google.com/webtoolkit)
AjaxTags (http://ajaxtags.sourceforge.net)
Las últimas versiones de los frameworks Web (Struts 2, Tapestry 5,
Apache Wicket, etc.) incluyen soporte nativo para AJAX
.NET
„
ASP.NET AJAX (http://ajax.asp.net)
„
„
Integrado nativamente en la última versión de ASP.NET
El framework Web MVC MonoRail (http://www.castleproject.org)
incluye soporte para AJAX
Desarrollo AJAX (y 2)
„
Ruby
„
„
El framework Web MVC Ruby on Rails
(http://www.rubyonrails.org) incluye soporte para AJAX
Librerías JavaScript
„
Existen librerías JavaScript para facilitar la implementación
de la parte cliente
„
„
„
Se pueden usar en combinación con los anteriores frameworks
(algunos las integran directamente)
Prototype (http://www.prototypejs.org)
Script.aculo.us (http://script.aculo.us)
GWT (1)
„
GWT (Google Web Toolkit) es un framework Java para AJAX
que permite implementar la parte cliente y servidora en
Java
„
„
Parte cliente y servidora se paquetizan en una aplicación Web
Java (.war)
„
„
Objetivo: facilidad de desarrollo (el código JavaScript es
transparente al desarrollador)
Se puede instalar en cualquier servidor de aplicaciones Web Java
Parte servidora
„
„
Los servicios se especifican en interfaces “normales” Java (con
operaciones “normales”), e implementarlos sólo consiste en
implementar estos interfaces
Internamente las peticiones llegan a un servlet, que delega en la
operación del interfaz correspondiente a esa petición y devuelve el
resultado
„
„
„
GWT utiliza JSON (JavaScript Object Notation) para pasar los
parámetros y devolver el resultado
JavaScript tiene soporte directo para convertir objetos JavaScript a
JSON y viceversa
Por este motivo, JSON es muy usado como alternativa a XML en las
interacciones AJAX
GWT (2)
„
Parte cliente
„
GWT incluye un compilador de Java-a-JavaScript
„
„
„
Convierte el código Java a JavaScript
Código JavaScript eficiente y válido para los navegadores más
usuales
Restricciones al código Java
„
„
Actualmente el código fuente tiene que ser compatible con
J2SE 1.5 en GWT 1.5 y J2SE 1.4.2 en GWT 1.4
Java Runtime Emulation (JRE) library
„
„
El código cliente sólo puede usar las clases más comunes de
java.lang y java.util
Soporte para realizar invocaciones asíncronas (y recibir las
respuestas) a los métodos de los interfaces de la parte
servidora
GWT (3)
„
Parte cliente (cont)
„
Framework orientado a componentes gráficos (widgets)
„
„
Botones, cajas de texto, selectores, tablas, barras de menú,
paneles, etc.
Permite crear nuevos componentes
GWT (4)
„
Modos de ejecución
„
Web mode
„
„
„
„
Modo de ejecución real
Aplicación Web Java con lado cliente (JavaScript) y servidor (servlet
que recibe peticiones + interfaces + implementación de los interfaces)
Como en cualquier aplicación Web Java, la parte servidora se puede
depurar desde un IDE que incluya un plugin para el servidor de
aplicaciones Web
Hosted mode
„
GWT incluye una aplicación Java (GWT Shell / GWT Web Browser) que
permite ejecutar una aplicación GWT sin generar el JavaScript
„
„
„
Internamente es una versión modificada de Tomcat y proporciona un
sencillo navegador
mvn gwt-maven:gwt
Como todo es Java (el GWT Shell y la aplicación GWT), se puede
ejecutar el GWT Shell desde un IDE en modo depuración, y así depurar
tanto la parte cliente como la servidora desde el IDE
„
Facilidad de depuración
GWT (y 5)
„
Modos de ejecución (cont)
„
Hosted mode (cont)
Práctica: Mashup
„
Desarrollo de una sencilla aplicación de tipo mashup
„
„
“Mashup” es un término que hace referencia a una
aplicación que se apoya en un conjunto de servicios remotos
(no necesariamente Servicios Web) para proporcionar su
funcionalidad.
Las aplicaciones Web de tipo mashup son características de
la denominada Web 2.0, que hace referencia a una serie de
elementos que caracterizan a las nuevas aplicaciones Web
„
„
T. O’Reilly, “What Is Web 2.0: Design Patterns and Business
Models for the Next Generation of Software”,
http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/
what-is-web-20.html
AJAX y REST son también característicos de las aplicaciones
Web 2.0
Práctica: contexto (1)
„
Se supondrá que trabajamos en una empresa que
por razones históricas mantiene la información de sus
clientes en dos CRMs
„
Uno interno
„
„
Instalado en la empresa hace tiempo
Otro externo (accesible vía Internet)
„
„
„
Nuestra empresa acaba de adquirir otra empresa de un área de
negocio afín. Esta empresa había contratado un servicio de
CRM con Salesforce (http://www.salesforce.com), de manera
que los datos sobre los clientes de esta nueva empresa los
gestiona Salesforce.
Accesible por usuarios finales mediante aplicación Web
Ofrece servicios SOAP para permitir construir aplicaciones que
accedan a los datos de los clientes
Práctica: contexto (y 2)
„
„
La empresa se encuentra con que tiene datos sobre clientes en
dos CRMs: en el interno y en Salesforce
Se desea construir una aplicación que permite recuperar la
información de los clientes de tipo “Lead” (clientes potenciales)
de manera unificada
„
Además la información de los clientes incluirá la latitud y longitud
de los clientes, de manera que la aplicación pueda posicionarlos
sobre un mapa (Google Maps)
Práctica: arquitectura (1)
Práctica: arquitectura (2)
Práctica: arquitectura (3)
Navegador
UI
VirtualCRMService
Acceder a la página principal
Buscar clientes “High” y de “A Coruña”
findLeads(500000,
Double.MAX_VALUE,
“A Coruña”)
Datos clientes (JSON)
Datos clientes
(Java)
El código JavaScript añade los datos de
los clientes a la interfaz gráfica. El resto
de eventos, excepto la búsqueda se
resuelven localmente (e.g.
avanzar/retroceder en la lista, clic sobre
un cliente, etc.)
Práctica: arquitectura (y 4)
„
Se proporciona código de partida, estructurado en dos módulos
„
ui
Interfaz 100% AJAX implementada con GWT
„
virtualcrm
„
Interfaz VirtualCRMService
„
„
„
„
„
Se deberán crear dos módulos adicionales
„
leadnews
„
„
Servicio RSS con información de clientes recientes
internalcrm
„
„
„
Existe una única instancia (Singleton) que se puede obtener mediante
VirtualCRMServiceFactory.getVirtualCRMService()
La clase de implementación puede tener estado global no modificable
Se deberá implementar con una arquitectura por capas de acceso a servicios
Acceso a Salesforce: opcional para Master
Representa el servicio de búsqueda del CRM interno
Se deberá realizar una sencilla implementación ficticia
Además
„
Uso de Eclipse BPEL Designer y ActiveBPEL para implementar un
flujo
„
„
Definición del flujo (opcional para Master)
Parte opcional para Ingeniería: implementación del flujo (requiere
añadir más módulos)