Ajax con Java Fácil
A primera vista,
Asynchronous
JavaScript and XML (Ajax) no nos dice mucho acerca de las ventajas de
usabilidad para el usuario y bastante poco de la
implementación
técnica. Sobre lo primero decir que con sólo
darnos un
paseo por cualquiera de las “Web 2.0” (GMail, Digg,
Blogger, etc.) veremos que esta tecnología es imprescindible
para alcanzar la experiencia de usuabilidad de esta nueva
generación
de aplicaciones. En cuanto a la implementación,
básicamente
tenemos componentes JavaScript en el navegador para interactuar con
el usuario y en el servidor para recibir, procesar y responder
solicitudes, que pueden implementarse en Java y actualmente contamos
con numerosas librerías o frameworks como Prototype, Dojo,
Yahoo UI (YUI) Toolkit o Google Web Toolkit.
Dado que existen numerosas
introducciones a esta tecnología (ver “Algunos
links
interesantes”) no vamos a extendernos mucho más en
la
descripción técnica de Ajax sino que nos
centraremos en
una implementación concreta: Direct Web Remoting (DWR).
Introducción a DWR
DWR es una
librería open source
para implementar rápidamente soluciones Ajax,
permitiéndonos
invocar objetos Java alojados en un servidor desde el JavaScript de
un navegador como si fueran objetos locales.
Esta librería
cuenta con dos
partes principales:
-
Javascritp
ejecutándose en el navegador que envía
solicitudes y recibe respuestas con las que actualiza el contenido de
la página -
Un servlet que procesa
las solicitudes y genera respuestas
DWR genera
dinámicamente el
JavaScript que actuará como proxy de las clases Java. Este
código hará la “magia” para
que desde el
JavaScript del navegador se utilicen las clases Java del servidor
como si fueran objetos locales.
Java es fundamentalmente
síncrono
mientras que Ajax es asíncrono, así que cuando se
invoca un método remoto se debe proporcionar una
función
JavaScript de callback que será invocada cuando llegue la
respuesta. El siguiente diagrama muestra como DWR puede cambiar el
contenido de un combo como resultado de un evento (por ejemplo,
“onclick”).
En
este caso, DWR genera dinámicamente una versión
JavaScript de la clase Java AjaxService. Ésta es llamada por
la función eventHandler y DWR gestiona toda la
interacción
remota con el servidor incluyendo la conversión de tipos de
datos de los parámetros entre Java y JavaScript. Cuando
llega
la respuesta, se invoca la función callback populateList la
cual utiliza una utilidad de DWR para actualizar el contenido del
combo de la página web.
Descargar DWR
Desde http://getahead.org/dwr/download
podemos descargar la versión 2.0.1 del Jar de DWR.
Para cuando estemos
más
familiarizados con la librería, es una buena idea descargar
el
War con los ejemplos funcionales de su utilización ya que
aveces incluyen ejemplos de características aún
no
documentadas.
Finalmente, podemos
descargar el código
fuente con el que completar nuestro debuggeo o comprender en
profundidad la implementación.
Instalar y configurar el DWR
Esto es muy sencillo:
-
Copiar la dwr.jar en el
WEB-INF/lib de nuestra aplicación web. -
Editar el web.xml y
añadir el siguiente servlet:
dwr-invoker DWR Servlet org.directwebremoting.servlet.DwrServlet debug true dwr-invoker /dwr/*
-
Crear un dwr.xml en el
WEB-INF que contenga una configuración similar a la
siguiente pero con las clases que querramos exponer mediante DWR:
-
Abrir un nuevo
navegador con la URLhttp://localhost:8080/[YOUR-WEBAPP]/dwr/
y automáticamente se mostrará una
página con las clases seleccionadas en el paso 2.
-
Seleccionándo
la clase se mostrarán los métodos expuestos:
-
Hay una serie de
ejemplos desde los que se puede copiar el código
directamente a nuestra JSP. Por ejemplo, para el método
toString vemos el código de ejemplo:
-
No debemos olvidar
incluir en la cabecera de la JSP las referencias al JavaScript como se
indica al comienzo de esta página.
Para aprender
más se puede
continuar revisando los ejemplos contenidos el War o ver la
documentación de DWR, en particular la sección
“Scripting Introduction” en
http://getahead.org/dwr/browser/intro.
Restricciones
Las clases que DWR puede
exponer deben
cumplir con las siguientes restricciones:
-
Contar con un
constructor sin argumentos -
No llamarse igual que
palabras reservadas de JavaScript, en particular aquellas que no son
reservadas en Java como por ejemplo delete. -
No contener
métodos sobrecargados ya que no siempre funcionan bien desde
JavaScript
Algunos links interesantes
-
DWR Home Page, http://getahead.org/dwr
-
“Putting AJAX Frameworks to the Test”,
http://www.devx.com/AJAXRoundup/Article/33126/0/page/1 -
“18-week «Free» AJAX Programming (with Passion!)
Online Course”, http://www.javapassion.com/ajaxcodecamp/ -
Definición e historia de Ajax en la Wikipedia,
http://es.wikipedia.org/wiki/AJAX
Conclusiones
El DWR es una excelente
librería
avalada por más de dos años de experiencia, una
comunidad muy activa y el apadrinamiento de TIBCO. Es notable la
facilidad de aprendizaje y uso aunque la documentación
aún
está en proceso de elaboración.
Cabe remarcar que se debe
prestar
atención a las restricciones indicadas y al cuidado que se
le
debe prestar a la seguridad en cuanto a que mediante esta
librería
estamos exponiendo componentes en servidor y puede abrir una brecha
de seguridad en nuesto sistema.
Finalmente, no dudes en solicitar nuestros servicios ya que en
Autentia tenemos mucha experiencia práctica en
innovación,
usabilidad e interfaces de usuario complejas.
Contacta con nosotros en www.autentia.com
.
Muy interesante, gracias
¡Excelente tutorial!
Es lo que estaba buscando. Gracias por compartir