Bienvenue Prénom - Déconnexion

Mot de passe oublié ?Accès membres : merci de vous identifier

BOURSE  

RUBRIQUES

 
 TUTORIELS 

i-Mode et Java
Par Bruno Delb (Net Innovations)

Découverte de l'API Java for i-Mode, aussi appelée DoJa, créée par l'opérateur NTT DoCoMo pour les téléphones mobiles. Par Bruno Delb (Net Innovations).  (11 juin 2002)
 

Une mise au point sur l'histoire
i-Mode a été introduit par l'opérateur Japonais NTT DoCoMo. On dénombre 30 millions d'abonnés NTT DoCoMo.
i-Mode repose sur un langage à balise décliné de HTML, le C-HTML (Compact HTML). C'est un sous-ensemble de HTML auquel des balises propriétaires ont été ajoutées, comme des balises de smileys. Donc une page C-HTML peut être visualisée avec un navigateur HTML.
Les points faibles de i-Mode / CHTML sont les suivants :

- Manque de sécurité
- Interface utilisateur pauvre
- Nécessite une connexion tout au long de l'utilisation de CHTML

Or les applications demandent aujourd'hui :

- Plus de sécurité, en particulier pour le mCommerce (mobile Commerce)
- Plus d'interactivité, en particulier pour les jeux vidéos
- Plus de sophistication, pour des applications du type client-serveur

J2ME répond à ces besoins. En effet, les principales caractéristiques de J2ME sont :

- Indépendance vis-à-vis de la plate-forme
- Modèle de sécurité intégré de base
- Déploiement d'application dynamique
- Interface utilisateur évoluée
- Fonctionnalités réseau évoluées

Pour intégrer J2ME sur les téléphones mobiles, NTT DoCoMo a implémenté une machine virtuelle Java (KVM) et la configuration CLDC. Malheureusement, il manquait toujours une brique pour que le tout puisse fonctionner : le profil. NTT DoCoMo a ainsi décidé de créer Java for i-Mode, aussi appelé DoJa. On peut donc considérer Java for i-Mode comme un profil. Le fait est que J2ME a poursuivi son évolution et le profil MIDP est apparu plus tard. Aujourd'hui, nous nous retrouvons donc avec deux "profils", DoJa et MIDP. Les deux devraient fusionner dans l'avenir : ils possèdent les mêmes bases, respectent la même philosophie et ont des bibliothèques de développement proches.

Le contenu au centre de i-mode
Les fournisseurs de contenu officiels sont directement connectés au serveur i-mode. Ces contenus sont listés dans le menu i-mode et peuvent être facilement atteints en quatre ou cinq clics. Ces sites peuvent faire payer leur contenu : NTT DoCoMo prend en charge la facturation et reverse une partie des revenus ainsi générés. Les types de contenu proposés sont des informations sur les restaurants, sur les villes, les cours de la bourse, la réservation de billet d'avion, les sites bancaires, les pages jaunes, la messagerie, …
Les fournisseurs de contenu non officiels sont tous les autres fournisseurs. Ces contenus ne sont pas listés dans le menu i-mode : pour y accéder, il faut connaître leur adresse et passer par un relais de communication entre le réseau NTT DoCoMo et Internet. Un système de bookmark permet toutefois de garder en mémoire jusqu'à 20 adresses de site de contenu sans avoir à retaper à chaque fois leur adresse.
Pour eux, NTT DoCoMo ne propose pas de système de reversement.
Pour ce qui est du langage à balises, il existe plusieurs méthodes pour développer des sites compatibles iMode. iMode utilise IHTML, qui reprend et complète CHTML. La première méthode est d'utiliser un transcodeur comme WebSphere Transcoding Publisher. La conversion d'un site HTML en site i-Mode est dans ce cas faite simplement. La deuxième méthode consiste à effectuer cette conversion manuellement. Enfin, la troisième consiste à créer une page CHTML à la base.
Par contre, pour ce qui est du langage Java, vous devrez développer vos applications avec Java for i-Mode, aussi appelé DoJa.
Java for i-Mode permet de proposer des applications impossibles à concevoir avec CHTML. On peut répartir ces applications en trois catégories :

- Les applications autonomes, qui peuvent fonctionner entièrement sans réseau (exemple : jeux de tir, jeux de puzzle, …).
- Les applications de type client-serveur, qui peuvent tourner sur le téléphone et sauvegarder les données sur le serveur en se connectant à Internet (exemple : jeux de rôle, jeux en réseau multi-joueurs)
- Les applications de type agent, qui prennent l'initiative de se connecter à Internet pour mettre à jour ses informations (exemple : météo, bourse).

L'API iMode

Le réseau

Une application Java for i-mode peut effectuer des requêtes HTTP et HTTPS (URL de type "http" et "https"). Cela permet d'échanger des données avec un serveur Web.
Java for i-Mode repose sur la notion de GCF (Generic Connection Framework), incluse dans la configuration CLDC de J2ME.

Le stockage de données persistentes
Le scratchPad (URL de type "scratchpad") permet de stocker des données sur le terminal. C'est l'équivalent du RMS de MIDP.
Par ailleurs, l'application peut lire les fichiers de données contenus dans le fichier JAR : l'accès se fait comme tout accès réseau mais en utilisant une URL de type "resource:".

L'interface utilisateur
De manière similaire à MIDP, une application Java for i-mode propose deux manières de créer l'interface utilisateur. L'API de bas niveau de l'interface utilisateur permet de créer l'interface utilisateur en dessinant directement dans le contexte graphique tandis que l'API de haut niveau permet de créer une interface utilisateur à partir de composants comme des boutons ou des listes déroulantes.
Tant qu'à l'API de haut niveau de gestion des événements de l'interface utilisateur, elle propose un modèle événementiel similaire au modèle de délégation du JDK 1.1.

Quelles sont les différences entre Java for i-Mode et MIDP ?
Bien que NTT DoCoMo ait implémenté J2ME sur ses téléphones mobiles et bien que cette implémentation repose sur la configuration CLDC, elle n'est absolument pas compatible avec MIDP. Autrement dit, un MIDlet, qui correspond à une application développée pour MIDP, ne peut pas être exécutée sur un téléphone DoCoMo.
Afin de vous faire une idée plus précise de cette implémentation, brossons un aperçu des principales différences entre i-Mode et MIDP.
La première différence porte sur l'API elle-même. MIDP repose sur les classes suivantes :

- javax.microedition.midlet
- javax.microedition.lcdui
- javax.microedition.rms
- javax.microedition.io

Tandis que i-Mode repose sur celles-ci :

- com.nttdocomo.io
- com.nttdocomo.util
- com.nttdocomo.ui
- com.nttdocomo.net
- javax.microedition.io

La seconde différence est qu'une application DoCoMo, que l'on appelle une iAppli, étend com.nttdocomo.ui.IApplication tandis qu'une application MIDP, que l'on appelle un MIDlet, étend javax.microedition.midlet. De plus, une iAppli implémente une méthode obligatoire, start(), et deux méthodes optionnelles, resume() et terminate(). De son côté, un MIDlet implémente trois méthodes obligatoires, startApp(), pauseApp() et destroyApp().
La troisième différence concerne le mécanisme d'OTA (Over The Air). Tandis que MIDP repose sur des fichiers .jad, une iAppli repose sur des fichiers .jam contenant des champs. Voici un exemple de fichier jam :

AppNamec=HelloWorld
AppVer=1.0
PackageURL=HelloWorld.jar
AppSize=1000
KvmVer=1.0
SPsize=0
AppClass=HelloWorld
AppParam=arg
LastModified=Wed, 01 June 2002 12:00:00

La quatrième et dernière grande différence concerne les limitations de la taille des fichiers .jar. Elle est de 10 Ko pour les iAppli tandis qu'elle est de près de 50 Ko pour les MIDlets.

Mais à quoi ressemble une i-Appli ?
Pour illustrer ce que nous venons de voir, voici une même application développée avec MIDP (on parle de MIDlet) et avec DoJa (on parle de iAppli).

MIDlet
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HelloMidlet extends MIDlet implements CommandListener {
  private Display midletDisplay;
  private Command doneCommand;

  public HelloMidlet() {
    midletDisplay = Display.getDisplay(this);
    doneCommand = new Command("OK", Command.SCREEN, 1);
  }

  public void startApp() {
    TextBox textBox = new TextBox("Midlet", "Hello World", 256, 0);
    textBox.addCommand(doneCommand);
    textBox.setCommandListener( (CommandListener) this);
    midletDisplay.setCurrent(textBox);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }

  public void commandAction(Command command, Displayable screen) {
    if (command == doneCommand) {
      destroyApp(false);
      notifyDestroyed();
    }
  }
}

iAppli
import com.nttdocomo.ui.*;
import com.nttdocomo.util.*;

public class iAppliSample extends IApplication {
  Panel panel;
  TextBox textBox;

  public iAppliSample() {
    panel new Panel();
    textBox = new TextBox ("Hello world", 10, 5, TextBox.DISPLAY_ANY);
  }

  public void start() {
    panel.add (textBox);
    Display.setCurrent (panel);
  }
}

Environnement de développement
Constituez votre environnement de développement complet :

- J2SE (notamment pour le compilateur) : http://java.sun.com/j2se/1.3/
- Configuration CLDC : http://java.sun.com/products/cldc
- Profil MIDP : http://java.sun.com/products/midp
- Toolkit J2ME Wireless : http://java.sun.com/products/j2mewtoolkit
- Emulateur Java for i-Mode : http://uni-labo.com/products/iEmulator/eindex.html
- Un autre émulateur Java for i-Mode : http://www.zentek.com/i-JADE/en/index.html

 
[ Bruno Delb pour JDNet
 
Accueil | Haut de page
 
 

 

A VOIR EGALEMENT