viernes, 31 de julio de 2009

Grupo OSUM - UTN MDP


Hace unos días cree un grupo en la red social de sun OSUM (Open Source University Meetup). Este sitio es una comunidad de estudiantes, desarolladores, etc. Los miembros de la comunidad tienen acceso a cursos gratuitos, eventos, y muchos otros recursos para perfeccionar sus habilidades.
Existen diferentes grupos de universidades de todo el mundo. Y como mi universidad (la UTN Centro de estudios Mar del Plata) no tenía un grupo, me decidí a crear uno.
La idea de este grupo es compartir investigaciones, inquietudes y todo tipo de información de utilidad sobre JAVA y cualquier otra tecnología open source. Los invito a participar y unirse al grupo, así creamos un lugar que permita compartir las experiencias tanto de los egresados como de los que hoy en día siguen estudiando en la UTN mdp.
De más esta decir que cualquier persona (ajena a la UTN) que se quiera unir esta invitado a compartir todo tipo de tecnologías y experiencias. Les dejo el link a continuación:
http://osum.sun.com/group/utn_mdp

jueves, 16 de julio de 2009

Aplicación cliente WebooksFX

En entradas anteriores (Servicio Web Webooks) explicamos la implementación del servicio web en php para la consulta de libros. Hoy vamos a explicar la aplicación cliente desarrollada en JavaFx.

La aplicación utiliza el patrón MVC con el fin de desacoplar la Vista del resto de las capas. Esto fue pensado así, debido a que JavaFX no es un 100% portable entre diferentes plataformas. Ciertos objetos del set de librerías no son compatibles en todas las plataformas, siendo la de Escritorio la que más cantidad de estos tiene. De manera que al utilizar este patrón, intentamos minimizar dicho problema problema, teniendo que reescribir solo las partes de la vista que necesitemos para la nueva plataforma.

En base a lo anterior, decidimos dividir la implementación en dos aplicaciones:
  • WebooksFX
  • WebooksFX_Desktop
La primera contiene el set de clases de las capas de Modelo y Controladora, y las clases abstractas de la Vista.

La segunda compone todo el set de clases correspondientes a la implementación de la Vista para una aplicación de escritorio. Todas estas heredan parte de su lógica de la Vista abstracta definida en WebooksFX.

En caso de necesitar desarrollar la aplicación para otra plataforma, tendríamos que crear una aplicación nueva, utilizando las librerías de WebooksFX, implementando la Vista Abstracta.

Puedes descargar el código de la aplicación desde el svn:
http://webooks.googlecode.com/svn/trunk/
Las aplicaciones fueron realizadas con la versión 1.1 de la SDK de JavaFX. No es compatible con la actual versión 1.2

Arquitectura de la aplicación


VISTA

Dentro de la vista se encuentran los componentes visuales. Estos permiten que la aplicación interactue con el usuario. Esta capa no contiene lógica de negocio, solo contiene los componentes visuales, y métodos para alterar sus estados. La lógica es manejada por la controladora.
CARGANDO
Esta es la pantalla que se muestra al comienzo de la aplicación, y es la encargada de mostrar un mensaje de espera mientras se establece la conexión con el servidor para obtener los servicios disponibles, contra los cuales la aplicación podrá interactuar más tarde. El resto de las pantallas se encuentran ocultas, de manera de dar un efecto de transparencia, para que solo sea visible la imagen del logo.
BÚSQUEDA
Esta pantalla es la que contiene las opciones para que el usuario pueda realizar una búsqueda de libros. Dentro de esta pantalla podemos encontrar: la barra de búsqueda, los resultados, y el paginador de resultados. La barra de búsqueda nos permite ingresar un texto como parámetro de búsqueda. También posee opciones de configuración avanzadas, permitiendo filtrar por un criterio en particular, y seleccionar dentro de los servicios disponibles, cual de los motores de búsqueda utilizar. Una vez que se realize una búsqueda, se muestra una ventana de carga para indicar que la petición ha sido enviada, y se está procesando. Cuando el procesamiento haya terminado, la ventana de carga desaparece, y se generan varios elementos gráficos, conteniendo los resultados de la petición. A partir de este punto se puede realizar otra petición de búsqueda, o acceder al detalle de un libro. En el primer caso, se repite el proceso anterior. En el segundo, se vuelve a mostrar la ventana de carga, y se envía una petición para obtener el detalle de un libro.
DETALLE
Esta pantalla refleja todos los datos detallados de un libro en particular (Imagen, nombre, autor, editorial, sinopsis, cantidad de páginas).

CONTROLADORA

La controladora es la encargada de procesar las acciones iniciadas en la vista, y desencadenar un evento para las mismas, ya sea, derivando el proceso al modelo, y/o modificando el estado de la vista. Por cada vista implementada, hay una controladora, de manera que en el proyecto existen 3 controladoras: ControladoraVista, ControladoraModelo y ControladoraDetalle. A su vez, algunas controladoras pueden derivar el proceso ellas.
Las controladoras también atienden la respuesta que el modelo haya procesado, alterando el estado de la vista en base al resultado obtenido.

MODELO

Capa que contiene el modelo de negocio. En el caso de la aplicación WebooksFX, es la que se encarga de realizar las peticiones al Servicio Web Webooks, y parsear la respuesta obtenida, devolviendo objetos de tipo: Libro, Servicio, o ColeccionLibros.

domingo, 12 de julio de 2009

Certificación SCJP

Actualmente estoy preparandome para rendir el exámen SCJP (Sun Certified Java Programmer), una certificación de sun que certifica nuestros conocimientos sobre la tecnología Java. Dicho exámen es muy útil en el campo laboral, amplia y fortalece nuestros conocimientos sobre la plataforma.
Es por el motivo citado anteriormente, que creé un blog que esta destinado a brindar una ayuda a la comunidad de programadores, contando mis experiencias a través de la preparación del exámen SCJP y en su momento las del exámen en sí (el cuál tengo como objetivo rendirlo a principios de septiembre del 2009). Además el blog contiene información sobre como prepararse, links a ebooks, código fuente de ejemplo, y muchas otras cosas. A continuación les dejo el link:
http://scjp-sun.blogspot.com/

miércoles, 8 de julio de 2009

Informe del proyecto

A continuacion dejo el link con el informe final del proyecto. Este fue el informe que se prensentó en el final de la cátedra junto al proyecto:
Haga click aquí para descargar el informe.

Para realizar dicho informe se utilizaron imágenes e información obtenida desde los sitios de sun, javafx, blogs destinados a la plataforma JavaFX entre otros. A continuación se listan algunos de los recursos utilizados para este proyecto:

miércoles, 1 de julio de 2009

Servicio web Webooks


Si bien el lenguaje de scripting PHP (PHP Hypertext Processor) no era el fin de investigación de este proyecto, se ha desarrollado un servicio web en dicho lenguaje. Cuyo objetivo no es otro que comunicarse con diferentes servicios web por internet para realizar búsquedas de libros. Este servicio se desarrollo con diferentes objetivos, uno de los cuales (y más importantes) fue desacoplar la aplicación JavaFX, para que esta solo se encargase de presentar los resultados de las búsquedas de libros on-line.

IDEAS QUE MOTIVARON AL DESARROLLO DEL SERVICIO WEB EN PHP
  • Desacoplar la aplicación JavaFX para que solo sea responsable de presentar los datos al usuario (fin porque fue desarrollado la plataforma JavaFX). De este modo se pudo dedicar más tiempo en tratar de mejorar la experiencia del usuario en la aplicación.
  • JavaFX es una tecnología realmente nueva, la cual se encuentra actualmente bajo desarrollo. Lo que implica muchas modificaciones en las API’s base de la plataforma (la última versión liberada por SUN es la 1.2 en Mayo de 2009). Por este motivo no se decidió realizar las peticiones hacia los sitios de búsqueda de los datos desde la aplicación JavaFX.
  • Evitar las diferentes limitaciones de cada implementación de la tecnología FX. Es decir, evitar las incompatibilidades entre las versiones desktop, web y mobile.
  • Debido a que el lenguaje PHP está bien asentado, se conocía bien la plataforma para poder crear un servicio estable y con buena performance en poco tiempo.
  • Debido a la flexibilidad del lenguaje PHP, la existencia de módulos útiles para el manejo del formato xml.
  • Permitir que el servicio webooks pueda ser utilizado por otras aplicaciones (como podría ser una implementación web de webooks desde que cualquier lenguaje), desde otros lenguajes de programación, o incluso por terceras partes como una API funcional para la búsqueda on-line de libros.
Una de las principales ideas con las que se comenzó a desarrollar el servicio web, fue la de permitir agregar fácilmente nuevos servicios de búsqueda. Es decir, una vez que se definió el campo en el cuál se iba a realizar la implementación, se investigaron los posibles motores de búsqueda de libros que poseían API’s para acceder libremente. Como resultado se obtuvieron muchos, pero se eligieron dos de los más grandes: los servicios web de Amazon y Google books.
A partir de estos servicios web se obtienen los datos de internet. El servicio webooks permite realizar búsquedas sobre estos motores, pero no se limita a ellos. Es fácilmente expansible la lista de motores de búsqueda con los que trabaja. Esto se debe gracias a que se implemento íntegramente orientado a objetos y se aplicaron diferentes patrones de diseño para mejorar la reutilización y expansión del mismo.

ARQUITECTURA DEL SERVICIO

El siguiente diagrama muestra a grandes rasgos la arquitectura del servicio web:


El servicio esta implementado mediante el patrón MVC. Donde todas las peticiones al mismo, ingresan por un único lugar (“ControladorFrontal” en donde se gestionan cuestiones de seguridad y funcionamiento general de la aplicación) y se responden por el mismo (una instancia de la Vista con ciertos valores se devuelve al usuario).
Cuando un nuevo request llega al servicio webooks se ejecutan los siguientes pasos:
  1. Se instancia el Controlador Frontal (el cual se encargará de verificar el tipo de petición, en este caso XML) y se crea un objeto de la clase AutoLoader (el cual se encarga de realizar la carga automática de definiciones de clases por demanda).
  2. Luego se delega el control de la petición a una instancia de la clase llamada ControladoraServiciosWeb la cuál verifica los parámetros y crea los objetos necesarios para conectarse con el servicio.
  3. Los servicios son objetos que devolverán los datos (clases pertenecientes al paquete “Servicios” dentro del Modelo). Estos “Servicios” crearán objetos del modelo (ColeccionLibros o Libro) como resultados de sus peticiones a la web.
  4. Una vez finalizadas las búsquedas a través de los servicios (“Amazon”, “Google”, etc.), la ControladoraServiciosWeb instancia una Vista correspodiente para mostrar los datos, pasando como parámetros los objetos del modelo.
  5. Las vistas realizan el tratamiento de la presentación del modelo, y devuelven dicha información hacia la ControladoraServiciosWeb.
  6. Se informa al ControladorFrontal la salida de la petición y se presentan los resultados.
AGREGANDO NUEVAS FUENTES DE BÚSQUEDA PARA WEBOOKS

Desde el principio cuando se comenzó el diseño de esta aplicación, se tuvo en cuenta la posibilidad de expandir el abanico de motores de búsqueda de libros con los que se trabajaba. Es decir, implementar la aplicación php de modo que cuando se finalizara su desarrollo, sea posible agregar nuevos servicios con los cuales interactuar para obtener los resultados de las búsquedas.
Por el motivo citado en el párrafo anterior, se diseño un xml el cuál contendría los servicios con los que trabaja la aplicación:

http://www.webooks.com.ar/config.xml

Gracias a la inyección de dependencia, se pueden agregar nuevos servicios de búsquedas con solamente hacer las siguientes modificaciones:
  • Modificar el xml de configuración, agregando un nodo con sus correspondientes datos (dentro de los cuales se encuentran dos fundamentales para webooks: “class_name” y “class_definition”).
  • Agregar las clases correspondientes para el parseo de los xml de respuesta y generación del xml webooks.
El siguiente es un diagrama que muestra el árbol de dependencias de estas clases y las implmentaciones para Amazon y Google:

El método search() de la clase SearchService es un “template method”, el cual tiene definido el orden en que se realizarán las operaciones para comunicarse con un servicio de búqueda. Al tener definido este método, desde las clases hijas solo es necesario redefinir los métodos parseResponse() y prepareRequest(). Gracias al método search, se accederá al nuevo servicio y se obtendrán los resultados.


class SearchService {
//...

/*
* @return ColeccionLibros
*/
public function search() {
return $this->parseResponse($this->request($this->prepareRequest()));
}
//...
}
?>


Como se ve en el fragmento de código anterior el método search() realiza el parseo (invocando el método parseResponse() de la clase hija) del resultado de una petición (invocando el método request() de la clase padre) a la cual se pasa como parámetro ciertos valores relacionados a un servicio de búsqueda en especial (invocando al método prepareRequest() de la clase hija).

UTILIZANDO EL SERVICIO

La utilización del servicio es muy sencilla, a continuacion se muestran dos ejemplos para buscar libros en los diferentes motores:

http://www.webooks.com.ar/xml/amazon/search?query=SCJP
http://www.webooks.com.ar/xml/google/search?query=SCJP

El primer directorio virtual "XML" se refiere al formato de salida.
El segundo directorio virtual se refiere al motor de búsqueda que se va a utilizar
El tercer directorio se refiere a la acción a realizar (puede ser "search" o "detail")
Por último se encuentran los parámetros de la llamada.

En la siguiente entrada se detallara el modo de utilización del servicio.