Generador Automatizado de Aplicaciones Móviles para Acceder a Bases de Datos Remotas Automated Mobile Applications Generator for Remote Database Access Mabel Vázquez-Briseno Pierre Vincent Universidad Autónoma de Baja California Km. 103 carretera Tijuana-Ensenada Ensenada, BC, México MobKit 70, rue de Madagascar 59000 Lille France [email protected] [email protected] Juan-Iván Nieto-Hipólito & Juan-de-Dios Sánchez-López Universidad Autónoma de BC Km. 103 carretera Tij-Ens s/n Ensenada, BC, México [email protected] [email protected] ABSTRACT RESUMÉN Nowadays many mobile applications and services require accessing remote databases in order to obtain data to be displayed and managed in mobile devices. Many of these applications are implemented using similar basic functions like establishing a remote connection and retrieving information. Due to this, mobile applications developers are continuously required to implement applications that perform similar tasks and that must fit different devices since today mobile devices heterogeneity is very large. In this paper an automated mobile applications generator called GAAMov is presented. GAAMov is intended to ease developers’ work by generating mobile applications that require accessing a remote database. GAAMov generates the client and server side applications using a very friendly web interface. For the client-side it generates Java ME applications that use the Record Management System (RMS).The remote databases are managed using PHP and MySQL. Hoy en día una gran variedad de servicios y aplicaciones móviles requieren acceder a bases de datos remotas con el fin de obtener datos que serán procesados en el dispositivo móvil. Debido a esto, los programadores de dichos servicios requieren continuamente generar aplicaciones que realicen tareas similares, las cuales incluyen establecer conexiones remotas y manipular datos provenientes de una base de datos. Los programadores deben además generar aplicaciones eficientes que se adecuen a dispositivos con diversas características y capacidades. En este artículo se presenta el diseño e implementación de un sistema genérico denominado GAAMov (Generador Automatizado de Aplicaciones Móviles), el cual facilita y agiliza el desarrollo de aplicaciones móviles que requieren el acceso a bases de datos remotas. Para ello se utiliza el sistema de gestión de registros RMS (Record Management System) de Java ME, el cual es soportado por la mayoría de los dispositivos móviles actualmente y el manejador de bases de datos MySQL en el sistema remoto. Categories and Subject Descriptors H.3.4 [Information distributed systems. Systems]: Systems and Software – Palabras clave Computación móvil, Bases de datos, Java ME, RMS, Software. General Terms 1. INTRODUCCIÓN Design, Languages. El uso de dispositivos móviles, tales como teléfonos celulares y Asistentes Personales Digitales (PDA, Personal Digital Assistant), ha evolucionado considerablemente en los últimos años. En sus inicios fueron utilizados meramente como dispositivos de comunicación, pero hoy en día, estos dispositivos son elementos cruciales en el desarrollo de múltiples aplicaciones y servicios tales como comercio electrónico, servicios de información, notificación de emergencias entre otros. Un servicio móvil consiste siempre en tres componentes: Una aplicación móvil que funciona como cliente, una conexión de red inalámbrica y un servidor que provee la funcionalidad o información (contenido) requerida por la aplicación. En este contexto, una aplicación es móvil si es ejecutada en un dispositivo móvil y requiere estar conectada ocasional o permanentemente a una red. Dicho de otra manera, las aplicaciones móviles corresponden en sí a la solución Keywords Mobile computing, database, Java Me, RMS, Software. Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Euro-American Conference on Telematics and Information Systems September 22–24, 2010, Panama City, Panama. Copyright ACM 1-58113-000-0/00/0004…$5.00. implementada en el dispositivo, mientras que los servicios se asocian normalmente a proveedores externos o servidores remotos [13] . En los últimos años han surgido varias tecnologías y plataformas que permiten el desarrollo de aplicaciones móviles. Entre ellas se encuentran: BREW (Binary Runtime Environment for Wireless) desarrollado por QualComm [1], Java Platform Micro Edition (Java ME) de Sun [4], .NET Compact Framework de Microsoft [7], y más recientemente la plataforma ANDROID presentada oficialmente en Noviembre del 2007 por la Open Handset Alliance [10]. Entre estas tecnologías, Java ME (anteriormente conocida como J2ME) es actualmente la más popular debido a que la mayoría de los dispositivos móviles actualmente en el mercado la soportan. A pesar de estas herramientas, el desarrollo de aplicaciones móviles representa nuevos retos de diseño e implementación para los programadores, ya que deben implementar aplicaciones que se adapten a la diversidad de dispositivos en el mercado, con memoria limitada y diferentes capacidades. El desarrollador debe considerar además que la manera en que los usuarios interactúan con los servicios es también muy diferente cuando se trata de aplicaciones móviles, ya que la interfaz de interacción humana que proveen difiere considerablemente de las utilizadas en las computadoras personales. Este aspecto es de suma importancia cuando se requiere presentar información en el dispositivo que ha sido recabada de un sistema remoto, tal como una base de datos. La información debe ser procesada de manera que sea compatible con el ambiente restringido del dispositivo móvil, en cuanto a espacio en memoria y despliegue en pantalla. El principal objetivo del sistema presentado en este artículo es facilitar el trabajo de los desarrolladores de aplicaciones y servicios móviles, ofreciéndoles una plataforma que agilice su trabajo de manera eficiente. Esta plataforma consiste en una herramienta denominada Generador Automatizado de Aplicaciones Móviles (GAAMov), la cual es configurable de acuerdo a las necesidades de diversos proyectos que tengan en común el requerimiento de manipular información obtenida de una base de datos remota. GAAMov genera aplicaciones Java ME que deben ser instaladas en el dispositivo móvil a utilizar. De igual manera, se encarga de la generación de las utilerías necesarias para manipular la base de datos remota. Para ello se utiliza el sistema de gestión de bases de datos MySQL, en conjunto con el lenguaje PHP, los cuales garantizan eficiencia y compatibilidad en el sistema remoto [14]. El resto del artículo está organizado de la siguiente manera: En la sección 2 se describen los principales componentes de la plataforma Java ME que fueron utilizados para desarrollar este trabajo. La sección 3 explica en detalle la arquitectura de GAAMov. La sección 4 muestra un ejemplo del funcionamiento de la misma y finalmente en la sección 5 se menciona las conclusiones y trabajo futuro. Virtual Machine) por su tamaño de unos cuantos kilobytes. El uso de una máquina virtual es particularmente útil en el ambiente de dispositivos móviles, donde la heterogeneidad es muy grande, ya que permite separar el hardware de la aplicación, garantizando compatibilidad entre diversos dispositivos. Java ME está compuesta de un conjunto de APIs separadas en dos niveles: Configuraciones y Perfiles. El primero de ellos, Configuraciones, define las clases básicas tomadas de la versión estándar de Java. La configuración que corresponde a los dispositivos pequeños es conocida como CLDC (Connected Limited Device Configuration). El segundo nivel, Perfiles, se refiere a las clases específicas creadas para los dispositivos móviles, es decir define el conjunto básico que corresponde a un grupo particular de dispositivos [3]. Un Perfil tiene dos propósitos básicos: La especialización en un tipo de dispositivo y garantizar la compatibilidad entre dispositivos similares. El perfil MIDP (Mobile Information Device Profile) está especialmente diseñado para teléfonos celulares y es además soportado por algunos PDAs. MIDP contiene paquetes de clases definidas para realizar tareas específicas. Especialmente útiles para el desarrollo de servicios móviles son las clases que permiten realizar conexiones remotas y administrar el sistema de almacenamiento persistente de datos en los dispositivos. Las aplicaciones basadas en MIDP son conocidas como MIDlets y pueden ser instaladas directamente en los dispositivos móviles que soportan este perfil. 2.1 Conexiones Remotas El manejo de conexiones remotas en Java ME se realiza a través de la Plataforma Genérica de Conexiones o GCF (Generic Connection Framework), la cual establece conexiones de manera flexible para adaptarse a diversos dispositivos. La principal idea de la GCF es definir abstracciones de las principales operaciones de red y conexiones remotas, dejando la implementación a los proveedores de dispositivos. La figura 1 muestra las conexiones definidas en la GCF. Connection DatagramConnection StreamConnectionNotifier InputConnection ServerSocketConnection OutputConnection StreamConnection ContentConnection ContentConnection UDPDatagramConnection SocketConnection SocketConnection MIDP 1.0 2. PLATAFORMA DE DESARROLLO JAVA ME La plataforma Java Micro Edition (Java ME) puede considerarse como una versión reducida de la plataforma estándar de Java: Java Standard Edition (J2SE). Al igual que ésta, Java ME proporciona una máquina virtual, conocida como KVM (Kilo HTTPConnection HttpConnection MIDP 2.0 CLDC 1.0 HTTPSConnection Figura 1. Jerarquía de interfaces de la Plataforma Genérica de Conexiones (GCF) El Protocolo de Transferencia de HiperTexto (HTTP) es soportado desde la primera versión de MIDP a través de la interface conocida como HTTP connection. El soporte del protocolo HTTP es obligatorio en todas las implementaciones de MIDP. A partir de la especificación MIDP 2.0 se agregó soporte para conexiones de bajo nivel incluyendo sockets TCP (Transmission Control Protocol) y datagramas UDP (User Datagram Protocol), por lo que las aplicaciones tienen ahora mayores posibilidades de establecer conexiones remotas, sin embargo no todos los dispositivos soportan estas nuevas interfaces [8]. 2.2 Sistema de Almacenamiento Persistente de Datos El almacenamiento persistente de datos en Java ME se realiza a través del Sistema de Administración de Registros o RMS (Record Management System). Este sistema se encarga de almacenar y administrar información que es colocada en una zona dependiente de la plataforma, a la cual las aplicaciones generalmente no tienen acceso directo [5]. El sistema crea un conjunto de registros conocidos como recordStores y provee métodos y funciones capaces de manipular esta información. El paquete de clases javax.microedition.rms se utiliza para manipular la información almacenada. Cada recordStore en RMS consiste en un encabezado y bloques de datos o registros que están estructurados como una lista enlazada, tal como se muestra en la figura 2. El encabezado mantiene un enlace al primer bloque de datos y otra al primer bloque de espacios libres [6]. El encabezado también contiene información acerca del conjunto de registros: Numero de versión, fecha de la última modificación, un identificador de registro conocido como recordId, entre otros. proporcionando una solución automatizada para implementar las aplicaciones. De esta manera, GAAMov lleva el desarrollo de software móvil a un nivel más abstracto, que ayuda considerablemente a la realización exitosa de éstas aplicaciones, ya que elimina los problemas de depuración de errores y construcción de clases con funciones repetitivas. GAAMov se encarga de generar la aplicación móvil para el lado del cliente orientada a dispositivos CLDC/MIDP. Debido a que los recursos en estos dispositivos son escasos, GAAMov permite también un mejor uso del espacio, al crear proyectos que comparten un conjunto de funciones y métodos básicos, y que pueden ser reutilizados además, por otras aplicaciones. De igual forma, GAAMov se encarga de generar los manipuladores de la base de datos remota con los cuales se comunica la aplicación para obtener la información requerida. Estos manipuladores consisten en librerías PHP que deberán ser utilizadas en un servidor remoto con una instalación del manejador de bases de datos MySQL. La comunicación entre la aplicación móvil y el servidor se realiza a través de conexiones HTTP y/o HTTPS de acuerdo a los atributos especificados por el programador. Ambas conexiones garantizan su funcionamiento en una gran variedad de dispositivos móviles, debido a que son obligatorias en todos los dispositivos MIDP y parte básica de la GCF. Una vez que la información es leída de la base de datos remota, ésta es transformada en un conjunto de registros RMS para poder ser manipulada eficientemente en el dispositivo. La figura 3 muestra el esquema general de una aplicación generada con GAAMov. La principal ventaja del sistema es la automatización en la creación de las clases Java ME y manipuladores PHP. El desarrollador requiere conocer únicamente las características generales del proyecto que desea implementar, ésto es, la base de datos y registros remotos que desea manipular en el dispositivo móvil. Esta información es manejada en GAAMov como los atributos del proyecto. A partir de estos datos GAAMov genera de manera automatizada los componentes cliente y servidor necesarios para implementar el servicio o aplicación móvil. Figura 2. Organización de registros en el sistema RMS El sistema RMS es de gran utilidad para almacenamiento persistente de datos en el dispositivo, sin embargo, no está basado en el modelo relacional, por lo que la información no se almacena como en una base de datos [2]. Esto puede causar incompatibilidad si se desea procesar la información desde un servidor de bases de datos remoto. 3. DESCRIPCIÓN DEL SISTEMA El Generador Automatizado de Aplicaciones Móviles (GAAMov), es una herramienta que provee un conjunto de clases cooperativas y librerías para la generación de aplicaciones móviles. El principal objetivo del sistema es facilitar el trabajo de los desarrolladores, Figura 3. Funcionamiento general de una aplicación móvil generada con GAAMov Los datos son leídos desde la base de datos utilizando conexiones seguras HTTP. Cada proyecto generado incluye al menos tres clases Java ME básicas que se encargan de manipular la información. Éstas son: DBRecord: Corresponde a la interfaz de usuario que muestra los registros leídos de la base de datos en el dispositivo, utilizando cuadros de texto (TextFields), cajas de texto (TextBox) o cuadros de fechas (DateFields) que son los elementos básicos de salida por pantalla definidos en Java ME. httpDBoper: Establece la comunicación con el servidor remoto para leer los registros de la base de datos MySQL. DBInterface: Se encarga de convertir el conjunto de registros leídos en un archivo de texto, que es transformado en un recordStore para ser procesado localmente en el dispositivo móvil. Un proyecto generado con GAAMov puede consistir en un sólo MIDlet o varios. Incluso cada MIDlet puede requerir acceso a tablas o bases de datos diferentes. En cualquiera de los casos estas tres clases básicas pueden ser compartidas por todas las aplicaciones, de manera que sea posible generar proyectos que requieran el menor uso de memoria posible. La figura 4 muestra los principales componentes de GAAMov. Información del proyecto corresponde a los elementos que el programador debe proveer para crear la aplicación o servicio. Para ello se utiliza una herramienta Web que facilita la utilización del sistema. De esta manera, GAAMov puede ser utilizado incluso por programadores novatos que solo deberán instalar los componentes generados en el cliente y servidor. Programadores más experimentados pueden utilizar las clases generadas como base para proyectos más grandes o complejos. Con la finalidad de garantizar la adaptabilidad del sistema, se utilizaron herramientas libres y de código abierto para su diseño e implementación. La herramienta Web fue programada utilizando xHTML y PHP. El Generador de Clases fue implementado utilizando J2SE y patrones de Velocity [12] y el Constructor de Aplicaciones se basa en Apache ANT [11]. A continuación se describen cada uno de los componentes de GAAMov. Entre otras cosas, estos atributos permiten definir los parámetros para tener acceso a la base de datos remota, el orden de los registros, y los elementos (TextFields, DateFields) que serán utilizados para mostrar la información en el dispositivo móvil. Una vez que el programador termina de capturar la información del proyecto, la herramienta Web se encarga de generar código propio de GAAMov. Este código es utilizado por el GCG y el GPG para construir la aplicación correspondiente. Atributos Configuración del servidor Nombre_MIDlet Orden_Registros Nombre_DB TextField DateField Name Label Text Lenght Constraints DB_Field inTitle Name Label Mode DB_Field inTitle Figura 5. Atributos de configuración para la creación de proyectos con GAAMov 3.2 Generador de Clases de GAAMov (GCG). El Generador de Clases de GAAMov (GCG) está escrito en lenguaje Java. Este componente se encarga de interpretar el código generado por la Herramienta Web, descrita en la sección anterior. Con esta información el GCG crea todas las clases fuente Java ME tomando como base patrones diseñados utilizando Velocity, el cual es parte del proyecto Apache Jakarta. La figura 6 muestra el diagrama de bloques del GCG. Código propio de GAAMov Importador de Patrones Generador de Clases Descriptor de Clases Descriptor de Atributos Aplicación Cliente Patrones Velocity GCG Código Java ME Figura 4. Principales componentes de GAAMov. 3.1 Herramienta Web de GAAMov La Herramienta Web permite al programador proveer los datos de entrada necesarios para crear proyectos móviles de una manera amistosa y clara. La información requerida corresponde a una serie de atributos que permitirán crear las clases Java ME así como los manipuladores remotos necesarios. Los atributos básicos de entrada se muestran en la figura 5. Figura 6. Diagrama de bloques del Generador de Clases de GAAMov Como se mencionó anteriormente, cada proyecto generado con GAAMov puede consistir en una aplicación (un sólo MIDlet) o un conjunto de aplicaciones. Cada aplicación incluida en el proyecto es generada en base a un Descriptor de Clase y a un Descriptor de Atributos. El GCG mezcla el Descriptor de Atributos de cada aplicación con los patrones Velocity incluidos en el sistema. Esta operación crea todas las clases requeridas para generar cada MIDlet en el proyecto. Las clases que realizan tareas básicas, tales como el establecimiento de conexiones HTTP, son agregadas una sola vez al proyecto y son compartidas por los MIDlets que las requieren. 3.3 Constructor de Proyectos de GAAMov (CPG). El Constructor de Proyectos de GAAMov (CPG) está basado en Apache ANT. Recibe como parámetro inicial un archivo de configuración conocido como build.xml, el cual en GAAMov es generado por la Herramienta Web. Este archivo contiene información importante sobre el proyecto que deberá generarse. El CPG es el encargado de ejecutar cada una de las operaciones necesarias para crear las aplicaciones cliente y servidor. La figura 7 muestra el diagrama de bloques del CPG. Generación de clases (GCG) Compilación Archivos Cliente/ Servidor Archivo de configuración Preverificación Generación de archivos, JAD, JAR Preparación de aplicaciones CPG debe realizar una verificación ligera y más rápida, que no requiere gran capacidad de procesamiento. El kit de desarrollo Java ME proporcionado por Sun (Sun’s Wireless ToolKit) incluye una utilería para realizar la preverificación. El CPG utiliza esta utilería, ejecutándola después de compilar las clases. El CPG también se encarga de generar el archivo Manifiesto y los paquetes JAD y JAR que contienen la aplicación generada y que deben ser instalados en el dispositivo móvil. Finalmente el CPG se encarga de generar los manejadores PHP que deben ser instalados en el servidor, tomando como base una serie de librerías incluidas en GAAMov. 4. CASO DE ESTUDIO Como prueba de la utilidad de GAAMov varios proyectos fueron generados, entre ellos el Proyecto de Servicios Móviles a Estudiantes. Este sistema fue desarrollado con la intención de proveer información escolar a estudiantes universitarios. El objetivo del proyecto es ofrecer una aplicación móvil que los estudiantes puedan utilizar para acceder a información de la Universidad, tal como: Información sobre cursos específicos, incluyendo profesor de la asignatura, horario y libros de referencia. Información sobre los edificios de la Universidad, incluyendo su localización y funcionalidad. Tener acceso a su horario personal registrado en la base de datos de alumnos. El proyecto consiste en tres aplicaciones o MIDlets: Cursos, Edificios, y Horario_Estudiante. Para su creación el programador definió los atributos correspondientes a cada una de ellas utilizando la Herramienta Web de GAAMov. Esta utilería permite ingresar la información llenando un conjunto de formularios Web como se muestra en la figura 8. Figura 7. Diagrama de bloques del Constructor de Proyectos de GAAMov GAAMov Utileria Web Como primera tarea se encarga de la ejecución del GCG incluyendo al llamarlo todos los argumentos obtenidos de la Herramienta Web. Una vez que el GCG ha generado las clases fuente Java ME, el CPG se encarga de compilarlas y preverificarlas. La preverificación es una nueva fase incluida en el desarrollo de aplicaciones Java ME. Debido a que los dispositivos MIDP generalmente no cuentan con suficiente espacio en memoria, el proceso de verificación de clases requerido por Java ha sido dividido en dos etapas. La primera corresponde a la preverificación, la cual es realizada antes de instalar la aplicación en el dispositivo, la segunda la realiza la máquina virtual de Java una vez que la aplicación ha sido instalada. Durante la Preverificación se realizan ciertas anotaciones en el código de bytes de Java, de esta manera, cuando la máquina virtual se dispone a ejecutar la aplicación, primero revisa las anotaciones hechas en el código. Las anotaciones adecuadas garantizan a la máquina virtual que el código fue revisado apropiadamente durante la compilación, por lo que sólo GCG CPG Programador Instalar aplicaciones en cliente y en servidor Figura 8. Programador generando el Proyecto de Servicios Móviles a Estudiantes Algunos de estos atributos son: las bases de datos a utilizar, configuración del sistema, los registros que serán manipulados en el dispositivo de acuerdo a los campos existentes en la base de datos remota y el orden en que desean visualizarse. Como requerimiento inicial los alumnos deberán estar registrados en la base de datos escolar para poder leer información utilizando el proyecto generado. Esto garantiza un acceso limitado y seguro a la base de datos. Una vez que la información es capturada, GAAMov genera automáticamente el proyecto, conformado por los archivos a instalar en el cliente móvil y en el servidor. Las aplicaciones son generadas de manera automatizada con GAAMov y el programador finalmente solo debe instalarlas en las localidades correspondientes. La figura 9 muestra la aplicación móvil ejecutándose en el simulador proporcionado por la compañía Sun. seleccionadas debido a que son obligatorios en todos los dispositivos MIDP, lo que garantiza la portabilidad de la aplicación. Una ventaja importante de GAAMov es que genera aplicaciones que comparten clases básicas para establecer conexiones HTTP y lectura de registros de la base de datos. Debido a que los recursos de memoria son aún limitados en los dispositivos móviles, esta es una ventaja importante, ya que el programador puede generar proyectos que incluyan varias aplicaciones (MIDlets), sin requerir gran capacidad de almacenamiento. Como trabajo futuro se ha considerado la realización de un sistema similar a GAAMov, pero utilizando la plataforma ANDROID de Google, la cual ha sido presentada recientemente por la Open Handset Alliance. ANDROID se basa en el sistema operativo Linux y promete un mejor control del hardware del dispositivo que las plataformas anteriores [9], lo que facilita el acceso a los medios de almacenamiento de los dispositivos. 6. REFERENCIAS [1] Figura 9. Pantallas del Proyecto Servicios a Estudiantes, generado con GAAMov Las aplicaciones Cursos y Edificios muestran los registros correspondientes a la base de datos Universidad, mientras que la aplicación Horario_Estudiante accede a la base de datos remota Escolares. Una vez que los registros correspondientes son leídos de la base de datos, éstos son convertidos en recordStores del sistema RMS. De esta manera el usuario puede realizar operaciones para manipular la información sin requerir conexiones remotas constantes a la base de datos 5. CONCLUSIONES Y TRABAJO FUTURO En esta artículo se ha presentando la implementación y funcionamiento del Generador Automatizado de Aplicaciones Móviles, GAAMov. Este sistema está orientado a facilitar el desarrollo de servicios y aplicaciones móviles que requieren comunicación con bases de datos remotas. La principal idea es lograr la automatización del desarrollo de estos proyectos, proporcionando una herramienta de fácil utilización para los programadores. Para cubrir esta objetivo, la interfaz de usuario de GAAMov consiste en una herramienta web, que permite al programador definir los parámetros o atributos para generar un proyecto utilizando una serie de formularios. Una vez que el programador ingresa la información, el sistema genera automáticamente las aplicaciones cliente y servidor del proyecto. La aplicación cliente consiste en una aplicación MIDP, la cual permite acceder y visualizar la información contenida en una base de datos MySQL. Esta aplicación transforma los datos leídos en registros RMS que pueden ser manipulados en el dispositivo móvil incluso sin requerir comunicación continúa con la base de datos remota. Para el lado del servidor, GAAMov genera manipuladores PHP que se encargan de leer la información de la base de datos y que se comunican con la aplicación móvil utilizando conexiones HTTP y HTTPS. Estas conexiones fueron [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] BREW (Binary Runtime Environment for Wireless) reference. Recuperado el 15 de Dic. de 2009 de: http://brew.qualcomm.com/brew/ Date, C.J. Introducción a los sistemas de bases de datos: Pearson Educación de México, 2001. Helal, S., “Pervasive Java”. Pervasive Computing, IEEE, Vol.1, Issue 1. February 2002 Java ME reference. Recuperado el 8 de Enero de 2010 de: http://java.sun.com/javame/index.jsp Knudsen, J., Wireless Java: Developing with J2ME, The Author’s Press, 2003. Muchow J.W., Core J2ME Technology and MIDP, Sun MicroSystems Press, 2001. ISBN: 0130669113 .NET Compact Framework reference. Recuperado el 9 de Enero de 2010 de: http://msdn2.microsoft.com/enus/netframework/default.aspx Quasay M., “J2ME Low-level Network Programming with MIDP 2.0”. Recuperado el 13 de Enero de 2010 de: http://developers.sun.com/mobility/midp/articles/midp2netw ork Reto M., Professional ANDROID Application Development. Wrox, 2008. ISBN: 0470344717 Rogers R. y Lombardo J., Mednieks Z., Blake M., Android Application Development: Programming with the Google SDK , O'Reilly Media, Inc.., 2009 The Apache ANT Project manual. Recuperado el 8 de Enero de 2010 de: http://ant.apache.org The Apache Velocity Project reference. Recuperado el 8 de Enero de 2010 de: http://velocity.apache.org Verkasalo, Hannu. “Empirical Observations on the Emergence of Mobile Multimedia Services and Applications in the U.S. and Europe”. Proceedings of the 5th International Conference on Mobile and Ubiquitous Multimedia, Stanford, California, Diciembre 2006. Williams H. y Lane D., Web Database Applications with PHP and MySQL, O'Reilly Media, Inc., 2nd edition. Mayo 2009.