J2ME

En 1999 Sun Microsystems presento Java 2 Platform, Micro Edition (J2ME) que está enfocada a la creación de aplicaciones para pequeños dispositivos electrónicos con capacidades restringidas de memoria y procesamiento tales como pocketPC, Palms , teléfonos móviles y electrodomésticos inteligentes.

 

La arquitectura de J2ME esta compuesta por 4 capas, las cuales son:

Perfiles
Configuracion
Maquina Virtual Java
Sistema Operativo

 

Capas de J2ME

Sistema Operativo

 

Ésta capa corresponde al sistema operativo de los dispositivos electrónicos que serán implementados.

 

Algunos sistemas operativos son:

 

o Windows CE

o Linux

o PalmOS

o Solaris Operating Environment.

 

Maquina Virtual Java (JVM)

En J2ME existen dos tipos de maquina virtuales dependiendo de las capacidades de los dispositivos. Éstas son:

 

o KVM (Kilobyte Virtual Machine)

 

Es la versión más pequeña de las maquinas virtuales desarrolladas por Sun y esta orientada para dispositivos de bajas capacidades tales como teléfonos móviles, PDA, GPS y electrodomésticos inteligentes. Algunas características de la KVM son:

 

- Funciona con dispositivos con procesadores de 16 o 32 bits y con pocos cientos de Kilo Bytes en memoria.

- Una pequeña carga de memoria entre 40 y 80 Kb que dependen de la plataforma y extensión del programa a compilar.

 

 

o CVM (Compact Virtual Machine)

Ésta versión esta orientada a dispositivos electrónicos con mayores capacidades tanto graficas como de procesador y memoria. Algunos de estos dispositivos son PocketPC, Palms y teléfonos de ultima generación. Las características mas importantes son:

 

- Diseñada para dispositivos con procesadores de 32 bits y con mínimo 2 Mbytes de memoria.
- Rápida sincronización.
- Ejecución de las clases fuera de la memoria ROM.

 

 

· Configuraciones

 

Una configuración es un conjunto mínimo de APIs Java que nos permiten desarrollar aplicaciones en los distintos dispositivos. En J2ME existen dos tipos de configuraciones las cuales dependen de las capacidades del dispositivo y maquina virtual que contenga. Estas son:

 

 

o CDC (Connected Limited Configuration)

Orientada a dispositivos de mayores capacidades de procesamiento y memoria tales como PocketPC, teléfonos ultima generación, televisores con internet, etc. CDC usa la maquina virtual CVM que es muy parecida a la maquina virtual de J2SE.

Ésta configuración incluye algunos paquetes de la edición estándar y el paquete particular javax.microedition.io. Las librerías incluidas son:

 

- java.io

- java.lang

- java.lang.ref

- java.lang.reflect

- java.math

- java.net

- java.security

- java.security.cert

- java.text

- java.util

- javax.microedition.io

 

 

 

o CLDC (Connected Limited Device Configuration)

 

Esta configuración es la ideal para dispositivos de capacidades limitadas tales como teléfonos móviles, PDAs , organizadores personales, etc. Estas limitaciones vienen dadas por el uso de la KVM.

Las librerias incluidas en CLDC son:

- java.lang

- java.io

- java.util

- javax.microedition.io

 

 

 

-Perfiles

 

Los perfiles son un conjunto de APIs de alto nivel que en combinación con las configuraciones nos ofrecen un entorno de desarrollo adecuado a cada dispositivo. Los perfiles permiten el acceso a funcionalidades específicas de los dispositivos como la interfaz gráfica, funcionalidades de red, almacenamiento, ciclo de vida de la aplicación etc. Algunos de los perfiles son:

 

o Foundation Profile (FP). Es el perfil mas básico asociado a CDC y esta orientado a dispositivos que carecen de interfaz grafica como por ejemplo algunos teléfonos móviles. Incluye gran parte de los paquetes de J2SE incluidos funciones de red, pero como esta orientado a dispositivos que no tienen interfaz grafica excluye los paquetes java.awt y java.swing.

 

o Personal Profile (PP). Este perfil es un complemento del Foundation Profile y proporciona un entorno grafico para dispositivos con interfaz grafica, además permite la ejecución de applets.

 

o RMI Profile. Es un perfil que permite la comunicación entre dispositivos mediante la invocación remota de métodos. Necesita una conexión tcp / ip. Éste perfil necesita la implementación de FP.

 

o PDA Profile. Este perfil esta desarrollado sobre la configuración CLDC y implementa aplicaciones en PDAs tipo Palm de bajas capacidades.

 

o Mobile Information Device Profile (MIDP). El MIDP esta desarrollado sobre CLDC y es el primer perfil orientado a dispositivos de bajas capacidades como teléfonos celulares y PDAs. Es el perfil mas usado y las aplicaciones creadas se llaman MIDlet.

 

 

 


Los Midlets

- Los middlets son la implementacion más utilizada para desarrollar aplicaciones mobiles con Java. Son aplicaciones MIDP , las cuales pueden utilizar tanto las facilidades aportadas por MIDP como las APIs que MIDP hereda de CLDC, pero nunca acceden directamente al sistema operativo subyacente, por lo que no serían portables.

 

-Un MIDlet consiste en una clase Java, como mínimo, derivada de la clase abstracta MIDP, y que se ejecutan en un entorno de ejecución dentro de la máquina virtual, la cual provee un ciclo de vida bien definido controlado mediante métodos de la clase MIDlet que cada MIDlet debe implementar. También estas aplicaciones usan métodos de esta clase abstracta para conseguir servicios de su entorno. Un grupo de MIDlets que están relacionados se suelen agrupar en un MIDlet suite. Todos estos MIDlet se empaquetan en .JAR, instalan, desinstalan y borran como una única entidad y comparten recursos tanto en tiempo de ejecución (se ejecutan en la misma máquina virtual, lo que implica que compartirán instancias de de todas las clases de Java cargadas en la máquina virtual), como estáticos (el almacenamiento persistente se gestiona en el nivel de suite). Los MIDlets, al igual que los applets carecen de la función main() por lo que es reemplazada por startApp().

 

- Su desarrollo ha sido bastante explosivo, debido a su uso principalmente en el desarrollo de aplicaciones para celulares. La mayoria de las IDE´s mas famosas para trabajar con Java ( Eclipse, Netbeans), incluyen paquetes adicionales que permiten compilar y ejecutar middlets, para facilitar el desarrollo de los mismos. Cabe destacar que no existe una maquina virtual "standar" de Java para ejecutar middlets, cada fabricante de dispositivos crea una a partir de las especificaciones otorgadas por SUN.

 

-Aqui incluimos el codigo de un Midlet con el tipico "Hola mundo" para mostrar su estructura básica. ver codigo

 

 

Otras opciones para implementar Java en dispositivos

 

- SI bien J2ME es la principal forma de utiizar java para desarrollar programas en dispositivos mobiles o restringidos, existen otras opciones tales como :

JavaCard

JavaCard permite el desarrollo de aplicaciones Java para ser usadas en tarjetas inteligentes. Esta tecnología se divide en maquina virtual JCVM , el entorno de ejecución JCRE y las APIs. Los requerimientos de hardware mínimos necesarios son: 1 Kbyte de memoria RAM, 16 Kbyte de EEPROM y 24 Kbytes de ROM, que son las características de los chips de las tarjetas inteligentes.


EmbeddedJava

Este tipo de Java está dirigido a desarrollar aplicaciones relacionadas con el acceso a red, concretamente con la entrega de servicios bajo demanda. Para conseguirlo, un servidor de Java embebido se integra en cualquier dispositivo de red específico, como por ejemplo, una pasarela, máquinas de venta en la calle, dispensadores de gasolina, automóviles, de tal forma que el servicio se efectúe a través de la red. La máquina virtual no requiere más de 500 Kbytes.

 

 

Personal Java

PersonalJava es un entorno orientado a la programación de dispositivos móviles con conexiones a red y interfaz grafica .PersonalJava es una versión reducida de la JVM 1.1 y de un conjunto de APIs de JDK 1.1. Estas reducciones son considerables gracias a la optimizacion del uso de memoria y la reducción de los APIs. Entre éstas APIs encontramos java.applet, java.awt o java.net, los cuales nos permiten la implementación de la interfaz grafica, visualizacion de applets y funciones de red, cabe notar que no esta incluido el paquete Swing.

Este entorno es uno de los mas utilizados, pero sin embargo Sun descontinuó el uso de éste y fue absorbido por J2ME.

 

Java En Pocket PC

-Nuestra idea principal al presentar este proyecto era el de documentar el proceso de crear una aplicacion Java en un Pocket PC. A medida que fuimos investigando, no sfuimos dando cuenta porque no existian aplicaciones java comerciales para Pocket PC, el crear una aplicacion Java en esta plataforma significa superar una serie de problemas (ver seccion problemas enfrentados ) junto con el hecho de que no existe una sola linea para desarrollar, los caminos son m uchos y muy variados.

 

Sin embargo, hemos logrado condensar el proceso en una serie de pasos / decisiones que listamos a continuacion.

 

Pasos a seguir al desarrollar con Java en Pocket PC

 

1. Elegir una implementación de Java disponible en Pocket PC:

 

-Personal Java : El utilizar personal Java permite utilizar practicamente todas las bibliotecas disponibles en JDK 1.1.8, lo que nos permite un gran grado de flexibilidad en el desarrollo de las aplicaciones. Junto con esto, se trabaja de igual forma que al desarrollar una aplicacion Java para un computador de escritorio.

 

-Waba u otras implementaciones “alternativas”: Si bien existe un buen grupo de usuarios de estas implementaciones alternativas de Java, hay que recordar que no se adhieren a ningun standar Java de Sun, son lenguajes "similares", por lo que hay que volver a aprender algunos conceptos e ideas.

 

-J2ME CDLC -> “Midlets”: Si bien el programar Midlets es bastante similar a programar aplicaciones normales de Java, los midlets estan diseñados para dispositivos con bastantes menos capacidades que un Pocket PC, por lo que nos restringimos bastante al utilizarlos.

 

 

2. Elegir un ambiente de desarrollo (IDE)

 

-Personal Java: Cualquier IDE compatible con Java 1.1.8

 

-Waba y alternativos: IDE´s propios

 

-J2ME CDLC: Eclipse y Netbeans con “mobility packs”.

 

3. Compilación y chequeo Compatibilidad

 

-Personal Java: Como Personal Java es una implimentacion casi directa de JDK 1.1.8, practicamente todo codigo que compile bien con esa version, funcionara en una JVM que implemente Personal Java. Antiguamente existia una aplicacion llamada "Java Check" que permitia realizar un chequeo mas exhaustivo, pero nos fue imposible encontrarla debido a que Sun la desecho hace un par de años.

 

-Waba y alternativos: Estas implementaciones poseen herramientas propias para este proposito

 

-J2ME: Los "mobility packs" incorporan una serie de plugins que permiten revisar el codigo antes de ser compilado.

 

 

4. Test de una aplicación

 

-Probar la aplicación en el lugar de desarrollo: Cuando realizamoslas pruebas en nuestro lugar de desarrollo, buscamos encontrar todas aquellas fallas de funcionamiento del programa, problemas que surgen en la operatoria del mismo.

 

-Probar la aplicación en el dispositivo o emulador: Una vez asegurados de que el programa funciona correctamente en un computador de escritorio, procedemos a probarlo en el dispositivo mobil ( o en un emulador) para encontrar problemas de uso. Hay que considerar que el area de ingreso y el "display" de estos dispositivos es muy diferente al de un computador, por lo que normalmente hay que ajustar los programas para que se muestren correctamente.

 

 

Un ejemplo de todo este procedimiento se puede encontrar en la seccion Programa Ejemplo

JVM para Pocket PC

- El mayor problema al desarrollar una aplicacion Java en Pocket PC es que no existe una maquina virtual oficial por parte de SUN. Es mas, hasta la fecha y segun hemos podido averiguar, no existe una maquina virtual que soporte totalemnte la combinacion Personal Profile / CDC, combiancion que se supone deberia sustituir a Personal Java.

 

Las principales JVM que se utilizan actualmente son:

 

Insignia's Jeode JVM: Es una de las maquinas virtuales mas usadas y de las que presentan menos problemas con distintos dispositivos. Creada para Pocket PC y PDAs

Sistemas operativos soportados: Windows CE ,PocketPC , Linux.

Compatibilidad de MV: PersonalJava , J2ME (CLDC,CDC).

Ref: www.insignia.com

 

 

 

IBM WebSphere Studio: Maquina virtual creada para crear aplicaciones para teléfonos móviles y PDAs (MIDlets).

Sistemas operativos soportados: Windows CE ,PocketPC, Palm OS.

Compatibilidad de MV: J2ME MIDP 2.0

Ref: http://www.ibm.com/websphere

 

IBM's J9 VM: Orientada a Pocket Pc y PDAs, se basa en la maquina virtual de J2ME

Sistemas operativos soportados: Windows CE ,PocketPC, Linux.

Compatibilidad de MV: J2ME (CLDC/CDC)

 

 

SuperWaba: es una máquina virtual Java para dispositivos móviles ofrecida como alternativa a J2ME.SuperWaba define un lenguaje, una máquina virtual, un formato de ficheros .class y un conjunto de clases base. La sintaxis de programación es un subconjunto de la programación en Java, lo que permite una rápida familiarización con el lenguaje. Al contrario de los otros entornos este es gratis.

Sistemas operativos soportados: Windows CE ,PocketPC,Linux.

Compatibilidad de MV: no compatible con MV de Sun.

Ref: http://www.superwaba.com.br