Las aplicaciones JAVA que se ejecutan en dispositivos que implementan MIDP se denominan MIDlets. Un MIDlet consta de al menos una clase JAVA, que debe derivar de la clase base abstracta javax.microedition.midlet.MIDlet. El tiempo de ejecución de un MIDlet viene controlado por una serie de métodos definidos en dicha clase y que, forzosamente, todas las clases derivadas deben implementar.
Un grupo de MIDlets relacionados pueden agruparse en un MIDlet suite. Todos los MIDlets de un suite se agrupan e instalan en un dispositivo como si fuesen un único elemento, de forma que sólo pueden desinstalarse y eliminarse en conjunto. Los MIDlets agrupados en un suite comparten tanto recursos estáticos como dinámicos:
- En tiempo de ejecución, si los dispositivos soportan ejecución concurrente, todos los MIDlets se ejecutarán en la misma máquina virtual. Por tanto, todos los MIDlets comparten las mismas instancias de todas las clases, así como los recursos cargados en la máquina virtual. Entre otras cosas, esto supone que se pueden compartir datos entre MIDlets y que las primitivas de sincronización no sólo deben usarse para proteger frente al acceso concurrente dentro de cada MIDlet, sino también el producido por otros MIDlets asociados al mismo suite.
- El almacenamiento persistente es gestionado de forma globar para todos los MIDlets del suite. Por tanto, los MIDlets pueden acceder tanto a sus propios datos persistente como a los de otras clases del MIDlet.
Como ejemplo de la forma en que los MIDlets de un suite comparten recursos, supongamos un suite que contiene una clase denominada Contador, destinada a mantener la cuenta del número de instancias de MIDlets del suite que se ejecutan en cada momento.
public class Contador {
// Contador del numero de instancias
private static int instancias;
public static synchronized void incrementar(){
instancias++;
}
public static synchronized void decrementar(){
instancias--;
}
public static int obtener(){
return instancias;
}
}
Una única instancia de esta clase se cargará en la máquina virtual, sin importar cuántos MIDlets de los que integren el suite están en ejecución en la máquina virtual. Esto significa que el mismo dato miembro estático instancias será usado por todos los MIDlets, por lo que los métodos incrementar y decrementar afectarán al mismo contador. En este caso es necesaria la sincronización para asegurar que las operaciones de incremento y decremento sean realmente atómicas.
Es importante indicar que los MIDlets deben empaquetarse antes de poderse instalar en los dispositivos de destino. Todo lo necesario de un suite debe empaquetarse en un archivo JAR. La información del paquete debe incluirse en un archivo de manifiesto. Esta información también estará especificada en otro archivo denominado descriptor de aplicaciones JAVA (JAD: java application descriptor), que se mantiene separado del archivo JAR.
Los archivos de manifiesto y JAD son archivos de texto con la siguiente estructura:
nombre_atributo: valor_atributo
El nombre del atributo y su valor están separados por dos puntos, siendo el espacio adicional opcional. Todos los atributos que son relevantes para la instalación de MIDlets comienzan por el prefijo "MIDlet-". Una lista completa de atributos, junto con una breve descripción de sus valores asociados, aparece en la tabla siguiente. Los valores en las columnas JAD y JAR indican que el atributo es obligatorio (M), opcional (O) o ignorado (I).
Se aprecia que alguna información aparece duplicada en el archivo de manifiesto del JAR y en el archivo JAD. Veremos por qué esto es necesario. La función del archivo de manifiesto es indicar al dispositivo el nombre y versión del suite almacenado en el JAR, así como indicar cuáles de los archivos empaquetados se corresponden con cada uno de los MIDlets. Para usar esta información el dispositivo debe descargar el JAR y extraer el archivo de manifiesto. Una vez hecho esto, se pueden mostrar los valores de los atributos MIDlet-Name, MIDlet-Version, MIDlet-Vendor. También de los atributos opcionales MIDlet-Description y MIDlet-Icon. Estos atributos permiten al usuario decidir sobre la descarga. No obstante, el archivo JAR podría ser muy grande, por lo que llevaría mucho tiempo recuperarlo en situaciones de conexiones lentas, por ejemplo. Para evitar este problema, algunos de los atributos del manifiesto, con información extra, se duplica en el archivo JAD. Esto permite descargar inicialmente el archivo JAD en lugar del JAR. De esta forma, se puede mostrar al usuario la información del suite antes de haber descargado el archivo de sus clases. El archivo JAD contendrá información contenida en el manifiesto y alguna particular. Típicamente, los atributos que aparecen en él son:
MIDlet-Name
MIDlet-Vendor
MIDlet-Version
MIDlet-Description
MIDlet-Icon
MIDlet-Info-URL
MIDlet-Data-Size
MIDlet-Jar-Size
MIDlet-Jar-URL
El objetivo de estos atributos, como se indicó con anterioridad, es ofrecer información sobre los MIDlets incluidos en el suite. Supongamos que desarrollamos un suite denominado Notas que permiten al usuario acceso directo a sus notas desde un dispositivo móvil. El suite contiene dos MIDlets: uno para ver las notas y otro para enviar información sobre posibles errores en ellas. Para desarrollar la clase se han usado métodos de utilidad, pertenecientes a la clase Utilidades. En definitiva, las clases involucradas serían las siguientes (teniendo en cuenta que forman parte del paquete desarrollo.moviles):
- desarrollo.moviles.VerNotas
- desarrollo.moviles.ErrorNotas
- desarrollo.moviles.Utilidades
El manifiesto para este suite podría ser el siguiente:
MIDlet-Name: Notas
MIDlet-Vendor: Programas Pepe
MIDlet-Version: 1.0.1
MIDlet-Description: Conjunto de midlets para ver notas
MIDlet-Icon: /desarrollo/moviles/iconos/notas.png
MIDlet-Info-URL: http://www.programaspepe.com/notas/info.html
MIDlet-Data-Size: 512
MicroEdition-Profile: MIDP-1.0
MicroEdition-Configuration: CLDC
MIDlet-1: Visualizador,/desarrollo/moviles/iconos/ver.png,desarrollo.moviles.VerNotas
MIDlet-2: Errores,/desarrollo/moviles/iconos/error.png,desarrollo.moviles.ErrorNotas
En el archivo JAR correspondiente, el archivo de manifiesto aparecería como META.INF/MANIFEST.mf. El archivo JAR también contendría los siguientes archivos:
- /desarrollo/moviles/VerNotas.class
- /desarrollo/moviles/ErrorNotas.class
- /desarrollo/moviles/Utilidades.class
- /desarrollo/moviles/iconos/notas.png
- /desarrollo/moviles/iconos/ver.png
- /desarrollo/moviles/icones/error.png
Conviene hacer algunos comentarios en relación al valor de los atributos y al contenido del archivo JAR:
- El archivo JAR contiene las clases correspodientes a ambos MIDlets. Aunque la clase de utilidades se incluye no hay ninguna referencia a ella en el manifiesto.
- El atributo MIDlet-Icon contiene la ruta absoluta del archivo que contiene el icono del suite.
- Asociado a cada MIDlet hay un atributo que describe su nombre y le asocia un identificador. El valor del atributo incluye nombre, icono y clase asociada.
El archivo JAD asociado a este MIDlet contendrá la siguiente información:
MIDlet-Name: Notas
MIDlet-Vendor: Programas Pepe
MIDlet-Version: 1.0.1
MIDlet-Description: Conjunto de midlets para ver notas
MIDlet-Info-URL: http://www.programaspepe.com/notas/info.html
MIDlet-Data-Size: 512
MicroEdition-Jar-Size: 10132
MIDlet-Jar-URL: http://www.programaspepe.com/notas/Notas.jar
Este archivo contiene la información que la pantalla del dispositivo mostrará al usuario, junto con la dirección URL del archivo JAR. En este caso, los atributos comunes tienen el mismo valor tanto en el archivo de manifiesto como en el archivo JAD. Para que el suite sea portable, es preciso que el archivo JAR esté codificado usando la codificación iso-8859-1, ya que se precisa que todas las implementaciones de MIDP soporten esta codificación.
En tiempo de ejecución los MIDlets pueden acceder a los archivos del JAR asociado al suite y obtener información sobre los valores de los atributos.
No hay comentarios.:
Publicar un comentario