Projet PJEM
Projet de Programmation Java Embarqué

Tutorial J2ME

Projet de M2PGI option SLE

Année Universitaire 2005-2006

Université Joseph Fourier

 

Contributeur(s) étape : Didier Donsez

Encadrement M2PGI/SLE 2005-2006 : Didier Donsez, Cristina Marin

 

 

Date de dernière mise à jour : 21/12/2005

 

Le but de ce tutorial est de tester l’environnement J2ME/CLDC/MIDP 1.0 et 2.0.

Installation du J2ME Wireless Toolkit

Normalement, vous téléchargez de du site http://java.sun.com/j2me et l’installer.

Cependant vous n’avez qu’à décompresser le fichier suivant dans C:\tmp :

http://www-adele.imag.fr/~donsez/cm/wtk104.zip

http://www-adele.imag.fr/~donsez/cm/wtk22.zip

Configurez JAVA_HOME et ANT_HOME

Configurez WTK_HOME (set WTK_HOME=C:\TEMP\WTK22 pour la version 2.2 du toolkit)

Configurez WTK_HOME (set WTK_HOME=C:\TEMP\WTK104 pour la version 1.0.4 du toolkit)

Ajoutez %WTK_HOME%\bin à votre PATH

 

Les commandes suivantes vous permettent de :

 

La documentation est accessible depuis %WTK_HOME%\index.html

Le guide d’utilisation est accessible depuis %WTK_HOME%\docs\UserGuide.pdf

Remarque 1

Les constructeurs de télé phones cellulaires tels que Nokia, SonyEricsson, Siemens, … proposent le téléchargement de Toolkit J2ME sur leurs sites « developer ». Ils contiennent également des émulations de téléphone réels et de nombreux exemples illustrant plusieurs JSR et des API propriétaires. Ces toolkits permettent de développer des Midlets (pas toujours portables si les API propriétaires sont utilisées) et de les charger sur des vrais téléphones afin de les exécuter « in-vivo » et de les débogger « in-vivo ».

Remarque 2

Si vous possédez un téléphone Java (ou plus exactement J2ME/CLDC/MIDP), vous avez intéressé de tester les MIDlets que vous développerez sur votre téléphone (c’est toujours bon pour le CV). Il faudra de préférence récupérer le Toolkit (s’il existe).

Des listes (incomplète) de téléphone Java se trouvent sur

Attention, Si votre téléphone est MIDP1.1, il faudra que la suite de MIDLet que vous développerez soit également MIDP1.0 ou MIDP1.1 (MicroEdition-Profile: MIDP-1.0).

Remarque 3

DoJa est un profile basé sur le J2ME/CDLC/MIDP pour les téléphones mobiles Docomo iMode comme ceux de l’opérateur Bouygues Telecom.

Vous pouvez télécharger et installer le kit de développement et d’émulation DoJa.

Remarque 4

D’autres exemples de midlets (1.0 et 2.0) sont disponibles sur

http://www-adele.imag.fr/~donsez/cours/exemplesj2me/

Chargez les dans votre répertoire %WTK_HOME%\apps

Documentation

Prise en main i

Lancez ktoolbar

Ouvrez un des projets (games par exemple)

Les projets (présents dans %WTK_HOME%\apps) sont brièvement décrit dans %WTK_HOME%\docs\AppDemos.html

Construisez le [Build]

Exécutez le [Run] et testez l’interface homme-machine (L’émulateur que vous avez choisi est lancé avec les MIDlets du projet)

Visualisez les 2 scripts build.sh et run.sh dans du répertoire %WTK_HOME%\apps\*\bin\

Certains applications ont des scripts ANT !

Profilage et supervision (monitoring)

Configurez dans [menu Edit>Preferences, onglet Monitor] :

·         La supervision de l’utilisation de la mémoire

·         La supervision des échanges réseau

·         Le profilage des méthodes appelées

Recommencez l’exécution de la MIDlet précédente.

Question : que configurent les autres onglets de [menu Edit>Preferences]

NB : la supervision de l’utilisation de la mémoire ralentit énormément la simulation ! désactivez la pour la suite

Prise en main ii

Lancez l’émulateur avec un des .jad situé dans %WTK_HOME%\apps\*\bin\

(voir les options de lancement dans le chapitre 4 du UserGuide).

Développement

Lancez ktoolbar

Créez [New Project] un nouveau projet hello avec la classe examples.hello.HelloMIDlet

Configurez [Settings] la MIDlet et notamment son icône /examples/hello/icon/hello.png

Générez [Build] les classes

Exécutez dans le simulateur [Run]

Exécutez avec un autre mobile (device)

Procédez de même avec animation, addressbook, http, xml (attention, l’exemple xml nécessite les packages de kXML (http://www.kxml.org)

Utilisez un ofuscateur pour reduire la taille des MIDlets

Aidez vous de la documentation %WTK_HOME%\index.html

Débogage

Lancez ktoolbar

Ouvrez le projet addressbook

Positionnez l’option de deboggage [Project>Debug]

Reconstruisez le projet

Lancez l’application [Run]

Lancez le déboggeur jdb sur le port de deboggage

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=5000 \

 sourcepath %WTK_HOME%\apps\addressbook\src

Aidez vous de la documentation de jdb

Vous pouvez également lancer le déboggeur depuis votre IDE.

Développement suite

Regroupez les 4 exemples précédents sous un seul projet total qui contiendra les 4 MIDlets.

Ecrivez un script (build.sh, build.bat ou build.xml) qui construit total.jar

Configurez le fichier total.jad avec ktoolbar

Testez [Run]

Déploiement par un serveur Web

Installez total.jar et total.jad dans une webapp midlets d’un serveur J2EE (TomCat ou JOnAS par exemple)

Changez la propriété MIDlet-Jar-URL de total.jad avec l’URL absolu de JAR http://monserverweb:8080/midlets/total.jar

Assurez vous que webapps/midlets/WEB-INF/web.xml contiennent les correspondances suivantes pour les types MIME (sinon ajoutez les).

jad       text/vnd.sun.j2me.app-descriptor

jar       application/java-archive

 

Lancez l’émulateur sans passer par ktoolbar avec la commande suivante :

      emulator –Xdescriptor:http://monserverweb:8080/midlets/total.jad

Installez les MIDlets sur l’émulateur en passant l’URL absolue de total.jad

      emulator –Xjam:install=http://monserverweb:8080/midlets/total.jad

Vous pouvez changer le device avec la commande suivante DefaultDevice

Vous pouvez également le tester sur un vrai téléphone si le serveur d’hébergement et accessible par le Web.

Développement d’une MidLet SensorConsole pour SensorBean

L’objectif de cet exercice est de réaliser une console pour inspecter les capteurs connectés sur une passerelle.

Pour cela, vous devez premièrement

·         Modifier la ConsumerServlet pour qu’elle renvoie des informations sur les capteurs au format CSV pour SOAP.

·         Développer une MidLet SensorConsoleMidLet qui à partir des informations récupérées, liste les capteurs et la dernière valeur de mesure acquise.

·         Conditionner la MidLet sous la forme d’un jarfile que vous placerez dans le répertoire ./rsc du source du bundle ConsumerServlet pour qu’elle soit déployé depuis la webapp embarquée dans le bundle.

Remarque : le format CSV (Comma-Separated Value) qui est un format d’import/export entre tableurs, formate un enregistrement sur une ligne de texte et sépare les champs par le caractère ; . La classe java.util.StringTokenizer peut vous aider à récupérer les champs individuellement.

Un exemple de CSV retourné par ConsumerServlet

Type MIME : text/csv, application/csv, application/x-csv voir http://www.geocities.com/dtmcbride/tech/filetype.html

sensorid;value;unit;error;timestamp

thermo1;301.5;K;0.5;34662829983837

thermo2;303.5;K;0.5;34662829983838

thermo3;302.5;K;0.5;34662829983839

powermeter10;215.0;V;0.05;34662829983839

 

Enfin, créez une servlet (utilitaire) JadReplaceServlet qui retourne le JAD avec l’entrée SBSCONSOLE_URL configurée dynamiquement avec l’URL de la servlet ConsumerServlet.

Remarque 1 : cette servlet doit retourner le type MIME text/vnd.sun.j2me.app-descriptor.

Remarque 2 : vous pouvez faire en sorte que le code de servlet soit générique et utilise 2 paramètres d’initialisation qui sont le patron du fichier JAD comportant les chaînes à substituer et le fichier des propriétés de substitution. Certaines propriétés sont inférées dynamiquement à partir des informations du contexte (hostname, context path), de la session (sessionId, subject …), des cookies, des paramètres …