El nombre real de J2ME es ‘Java Platform, Micro Edition’, aunque J2ME sigue siendo el término más habitual.

J2ME es un subconjunto de Java orientado a dispositivos con recursos limitados, es decir, a un hardware en el que características como la memoria o la velocidad del procesador son muy inferiores a las de un ordenador convencional. Por ejemplo, un teléfono móvil. Desde el año pasado J2ME es Open Source, y el proyecto que se encarga de mantenerlo y desarrollarlo se llama phoneME.

Al igual que ocurre con el J2SE, la principal virtud de J2ME es su habilidad para ejecutarse en distintas plataformas: casi cualquier móvil de hoy en día incorpora soporte Java (las excepciones más significativas son el iPhone y los móviles con Windows Mobile). Sin embargo, no todos los dispositivos tienen el mismo soporte de J2ME. Veamos por qué.

J2ME se divide en configuraciones (configurations), perfiles (profiles) y APIs opcionales. Una configuración define un tipo de dispositivo en función de las características de su hardware: sus limitaciones, sus capacidades… y le asigna una máquina virtual y un conjunto de APIs adecuados a ese hardware. En la actualidad existen dos configuraciones: CDC (Connected Device Configuration), utilizada sobre todo en sistemas de telemetría, automoción o domótica, y CLDC (Connected Limited Device Configuration) que es una versión más limitada y que es la que nos interesa por estar presente en la mayoría de los móviles.

Dentro de una configuración, un perfil nos define ciertas características concretas, como la interfaz de usuario. Existen tres perfiles para la configuración CLDC: MIDP (Mobile Information Device Profile), que es la usada en los teléfonos móviles y por tanto la que nos interesa, IMP (Information Module Profile) que es una versión de la anterior sin interfaz de usuario, y DoJa, destinado a un tipo de móviles japoneses.

Finalmente, cada dispositivo móvil puede incluir soporte para distintas APIs opcionales. Por ejemplo, un dispositivo con Bluetooth puede disponer de la Bluetooth API (JSR 82), o un móvil de gama media/alta quizás venga preparado para leer y procesar información geolocalizada con la Location API (JSR 179). Como estas capacidades varían de dispositivo en dispositivo, hay que acudir a las especificaciones de cada uno para ver qué APIs soportan. Por ejemplo, aquí podéis comprobar los modelos Nokia, aquí los Motorola o aquí los Sony Ericsson. Sun también proporciona una lista de dispositivos de distintos fabricantes.

Ocurre que cada fabricante realiza las implementaciones de las APIs J2ME de sus móviles. Aunque para ello se basan en una implementación de referencia de Sun, en la práctica se pueden encontrar diferencias significativas en el comportamiento de distintos dispositivos para una misma función, fallando en unos móviles lo que funciona en otros. En ocasiones, esto supone la necesidad de desarrollar más de una versión de la misma aplicación.

Recapitulando, para programar móviles usaremos la configuración CLDC con el perfil MIDP. La última versión de CLDC es la 1.1, y la última de MIDP es la 2.0; estos son las versiones que incorporan los móviles recientes, para modelos más antiguos podemos encontrarnos con CLDC 1.0, que por ejemplo no soporta operaciones en punto flotante, y MIDP 1.0, que no da acceso a funciones de sonido o pantalla completa.

Entradas relacionadas:

Introducción al desarrollo de aplicaciones para teléfonos móviles: Symbian

Introducción al desarrollo de aplicaciones para teléfonos móviles: Windows Mobile

Introducción al desarrollo de aplicaciones para teléfonos móviles: J2ME (y II)

Introducción al desarrollo de aplicaciones para teléfonos móviles: BlackBerry