martes, 7 de abril de 2009

J2ME MIDP/CLDC y persistencia

En este momento, me encuentro desarrollando un proyecto para J2ME(java para dispositivos móviles). Como parte del proyecto, necesito tener acceso a una base de datos con la información que se ha convertido en toda una investigación jarcor. Aquí les pongo lo que encontré, primero para acordarme yo de todas estas cosas, y además por si a alguién le sirve algún día se ahorre un poco de tiempo.

A la hora de hablar de J2ME,se debe tener en cuenta que hay 2 tipos de configuraciones: CDC y CLDC. La segunda está diseñada para dispositivos móviles con recursos extremadamente limitado y por eso no proporciona ningún tipo de almacenamiento en bases de datos empotradas, ni tampoco proporciona drivers para conectarse con alguna base de datos en un servidor. Sus razones tendrán para haberlo decidido así, sin embargo en ciertas ocaciones se necesita este tipo de acceso de alguna manera. 

La única forma de almacenamiento persistente que provee J2ME son los llamados RecordStores, y su manejador el RMS (record management system). Definen una formá básica de almacenamiento en el cual se manejan los registros a modo de cadenas bytes, estos se pueden filtrar y comparar. De la misma manera que lo hacía los cavernícolas!!

Este sistema de almacenamiento posee varios problemas: para grandes cantidades de datos diferentes, hay que proveer las clases que manejen el almacenamiento en bytes y que lo accedan, por lo que el tamaño del código y su dificultad crece bastante; además, dependiendo de la KVM y del dispositivo, su capacidad de almacenamiento puede variar de entre 32kbs y 5mbs.

Dada semejante dificultad para desarrollar aplicaciones con persistencia física de los datos, ¿por qué la necesidad de aprender a usarlo (además del proyecto que estoy haciendo.....)? Simplemente por que casi cualquier persona tiene un celular en estos días, y casi cualquiera de esos celulares viene con una KVM. Si uno hace una aplicación, es probable que mucha más gente la quiera obtener si es para un dispositivo que para escritorio, por que prácticamente todo el mundo tiene un celular.

Hay varias formas de arreglar este problema, las mejores que encontré fueron las siguientes:

1)Floggy(http://floggy.sourceforge.net/): es un wrapper del RMS que provee un acceso más simple al almacenamiento en el dispositivo. 

Floggy es una abstración del RMS y básicamente lo que hay que hacer es implementar net.sourceforge.floggy.persistence.Persistable, para que nos de capacidad de guardar desde booleans hasta tablas hash con solo hacer un save().

La página viene con demasiada documentación de como hacer todo. Viene como usar todas las operaciones, con claros ejemplos. Hasta viene como configurar el IDE donde se vaya a trabajar.

2)OpenBaseMovil (openbasemovil.org): Es un sistema de base de datos exclusivo para DM. No solo es un sistema de bases de datos, es todo un framework de desarrollo móvil. 

Fue implementado por una empresa española que luego liberó el código bajo GPL. Este proyecto se ha vuelto bastante famoso por la facilidad de desarrollo que provee.

Básicamente, para usar una base de datos “openbasemovil” es necesario lo siguiente
1.Bajarse las el framework de la página y la documentación.
2.Crear un proyecto de java, agregar openbasemovil-db-x.x.x.jar como biblioteca a usar.
3.Leer la documentación (no sea vago)

No me he puesto a desarrollar totalmente una aplicación usando este sistema, pero por lo que he leido en internet, y por lo que he visto que puede hacer, diría que es una de las mejores opciones a la hora de desarrollar para MIDP/CLDC en que se ocupe persistencia.

3)Hacer un servlet y conmunicarse con este usando http o lo que sea, no voy a explicar como hacer un fuckin servlet....

J2ME no provee un JDBC en sí. Lo más cercano que encontré fue Mobile Query Manager (http://www.midpjdbc.de/), que aunque se supone que si lo implementa, no encontré forma de hacerlo funcionar.

La configuración CDC, que usualmente están presente en las PDAS más avanzadas y con mayores recursos, existe gran cantidad de de API´s implementadas, y es más parecido a la JVM normal (pero mucho más optimizada).

3 comentarios:

  1. gracias por este post, me sirvio demaciado sigue asi http://elmundosegunklinger.blogspot.com/

    ResponderEliminar
  2. Yo estoy igual. Podrias contarme si has avanzado en algo más?.
    Saludos y gracias.

    ResponderEliminar