Java

Une introduction a la plate-forme J2ME Objectifs J. 2. M. E Java 2 Micro Edition Michel RIVEILL Polytech’Nice – Sophia Email : [email protected] fr Web : http://rainbow. polytech. unice. fr/~riveill ? ? ? Presenter les differentes configurations et profils de J2ME Presenter quelques aspects techniques lies a KVM, CLDC et MIDP Presenter l’environnement de developpement J2ME 1 2 J2ME et services Web Presentation de J2ME Configurations et profils 3 4 1 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME J2ME ? Diversite des terminaux… ais un seul langage de programmation : Java ? Ubiquitous computing ? ? ? Mainframe : un ordinateur, plusieurs personnes PC : un ordinateur, une personne Ubiquitous computing : plusieurs ordinateurs en reseau, une personne ? ? ? Une grande variete de terminaux ? ? ? ? ? ? ? Evolution vers les standards de l’Internet : ‘Java’ + IP dans chaque equipement + XML Conscience de la localisation de chaque equipement Interoperabilite entre les reseaux, les infrastructures ? PCs PDAs Telephones Pageurs Terminaux embarques Cartes 650 millions de PCs 350 millions de telephones/PDAs 500 millions de SIM et Smart Cars

Un seul langage de programmation : Java ? ? ?

Désolé, mais les essais complets ne sont disponibles que pour les utilisateurs enregistrés

Choisissez un plan d'adhésion
Standart pour le developpement des applications sur reseaux sans fils, avec des equipements de nature tres diverses ? ? ? Le monde Java est vaste : 1Q04 ? ? ? ? ? ? ? J2ME = 40% des nouveaux telephones installes au Japon en 2001 J2ME = 18 millions d’equipement en 2001 J2ME = 70% des smartphones, PDAs en 2004 5 La seule de maniere de programmer sur certains terminaux Partager le meme langage, la meme conception depuis le terminal jusqu’aux serveurs Permet le chargement dynamique de code Programmes compacts et portables Developpement rapide et sur Atelier et outils homogenes Heterogeneite des modes de communication (1) ? Heterogeneite des modes de communication (2) ? Equipement radio ? ? La convergence des services ? ? ? Frequence : 3 Khz a 300 Ghz Portee : 3 cm a 300 m, qq km 1 G : analogique, defini pour la voix 2 G : numerique, defini pour la voix (GSM) http://www. gsmworld. com ? ? ? La telephonie ? ? Java + XML + IP Service base sur la localisation (E911 aux US : permet de connaitre sa position sur un reseau GSM) Interoperabilite entre reseau et zone geographique ? Les communications radio dans la bande de 2. 4 GHz ? SMS http://www. gsmworld. com/technology/sms. html 2. G : amelioration pour transfert de donnees (GPRS) http://www. gsmworld. com/technology/gprs. html Wireless Ethernet (IEEE 802. 11b) : http://www. weca. net ? Optimise pour transmission de donnees jusqu’a 100 m, reseau de campus Optimise pour 30 m ou moins, reseau personnel Java API : http://java. sun. com/jcp/jsr/jsr_082_bluetooth. html ? Bluetooth : http://www. bluethooth. com ? ? http://www. anywheyougo. com/ayg/yg/wireless/Article. po? page=96110 (article d’introduction sur le GPRS ? ? 3 G : defini pour les donnees (UMTS) http://www. gsmworld. com/technology/3g_future. html 3G+ 7 ? HomeRF (combinaison de IEEE 802. 1b et de DECT) : http://www. homerf. org ? Optimise pour transmission de la voix jusqu’a 50 m 8 2 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Heterogeneite des langages de description (1) ? Vers une homogeneite des langages de description (2) ? Proposition pour la telephonie ? Aujourd’hui, demain ? ? ? Approche ‘europeenne’ ? ? ? XHTML : convergence des differentes approches http://www. w3. org/TR/xhtml1 Reseaux sans fil + equipement nomade = fonctionnement en mode deconnecte ? Necessite d’avoir un protocole pour decrire les donnees et gerer leurs coherences Mode deconnecte ? HTTP / WAP (Wireless Application Protocol) HTML / WML (Wireless Markup Language) http://www. wapforum. org/what/technical. html C-HTML (Compact HTML) + HTTP iMode : http://www. mobilemediajapan. com/imodefaq 9 ? SyncML : exemple de langage ? ? ? ? Approche ‘japonaise’ ? ? ? ? ? Protocole commun utilise pour la synchronisation des donnees entre differents equipements Langage construit sur XML http://www. syncml. org Gestion de la voix Informatique diffuse = multiples equipements heterogenes ? necessite d’avoir un langage pour decrire les sons VoiceXML : exemple de langage ? ? ?

Pour la reconnaissance et la synthese vocale Langage construit sur XML http://www. voicexml. org 10 SyncML (http://www. syncml. org) ? Naviguer dans le monde Java ? Message XML comportant des elements de synchronisation ? J2SE : Java 2 plateform, Standard Edition ? Solutions pour les postes clients : applications autonomes, applets, … J2SE+developpement d’appications cote serveur (Servlet, EJB, JMS, XA, SOAP, …) Solutions pour les entreprises : E-commerce, E-business J2SE – nombre reduit de paquetage, machine virtuelle plus ‘legere’ Solutions pour les terminaux embarques : telephones, PDAs, TV box, …

Add, Alert, Atomic, Copy, Delete, Exec, Get, Map, Replace, Search, Sequence, Sync Texte Bytecode WBXML text/vnd. syncml-xml application/vnd. syncml-wbxml ? J2EE : Java 2 platform, Enterprise Edition ? ? ? 2 representations ? ? ? J2ME : Java 2 plateform, Micro Edition ? ? ? Transport ? HTTP, WSP, …, JMS 11 ? Les differents environnements sont bases sur le meme langage Java mais avec ? Differentes JVMs et differentes APIs 12 3 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME C’est quoi un terminal ‘sans fil’ ? ? ? ? ? ? ? Architecture d’une application sur terminaux mobiles

Version 1 Version 2 Serveurs PCs PDAs Telephones et pageurs Terminaux embarques Cartes 13 PCs PDAs Telephones Pageurs Vehicules Systemes embarques Smart carte J2EE JDK 1. 1. x Personnal Java J2SE serveur TCP/IP PC J2ME/CDC J2ME/CLDC TCP/IP, WSP serie, USB Bluetooth, 802. 11, IrDA Embedded Java JavaCard J2ME/CLDC JavaCard Terminal ‘leger’ Terminal ‘leger’ WSP : Wireless Session Protocole (equivalent http pour le 14 WAP : http://www. guill. net/index. php? cat=3&pro=59) Pourquoi J2ME ? ? J2ME Configurations et profiles ? Le nombre de terminaux ‘legers’ depassera largement celui des ordinateurs personnels ? ? ?

Une seule plate-forme J2ME ne peut couvrir tous les besoins ? ? Ventes PCs : 07 (272,223,000), 06 (239,211,000) Ventes Smartphone : 3T07 (32,853,608), 3T06 (20 867 519) Ventes telephones mobiles : 07 (1,152,839), 06 (990,862) ? ? ? Les terminaux sont trop differents Les besoins applicatifs sont tres variables Bibliotheque minimale et JVM 2 configurations ? ? ? Configurations J2ME ? ? 30 a 50 % de ces terminaux seront connectes a Internet Plus nombreux que les stations de bureau (320 millions en 2003) ? CLDC : connexion limitee (JSR 36) CDC : connecte (JSR 30) ? Il sera necessaire de telecharger des logiciels sur les terminaux legers ? Profils J2ME ? Bibliotheques complementaires ? ? Etre capable d’adapter les services a la tres grande variete des equipements Utilisation des reseaux sans fils (telephone ? informatique) Pour des terminaux particuliers Pour un domaine applicatif particulier Mobile Information Device Profile (MIDP : http://java. sun. com/products/midp/ ) Foundation (http://java. sun. com/products/foundation/index. jsp ) ? ? Exemples : ? ? ? J2ME est la plate-forme pour le developpement de service sur ces terminaux ? 15 API proche de J2SE sans IHM API graphique compatible avec AWT ? ? Personal (http://java. sun. om/products/personalprofile/index. jsp ) ? Bluetooth, … Configurations et profils sont definis par la ‘Java Community Process’ 16 4 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Configuration ? Profils ? Une configuration definie une machine virtuelle et un ensemble de bibliotheques minimaux pour ? Un ensemble d’APIs qui completent la configuration pour definir des bibliotheques pour ? ? Un ensemble de terminaux qui possedent des caracteristiques similaires (tailles memoires, capacite du processeur, etc) Un domaine applicatif Un type de terminaux ?

Elles sont definies par le ‘Java Community Process’ ? ? ? Test de compatibiltes 2 configurations sont disponibles ? ? ? Connected Limited Device Configuration (CLDC) Connected Device Configuration (CDC) 17 L’objectif est de donner plus de flexibilite pour maintenir la portabilite des applications entre les terminaux Ils sont definis par le ‘Java Community Process’ ? Test de compatibiltes 18 Plateforme Java 2 Bibliotheques aditionelles Bibliotheques aditionelles Les APIs Java pour les mobiles * En cours de definition Va faire l’objet de la suite de l’expose JavaPhone Profil Profil Profil personal PDA MIDP Foundation Profil APIs Bluetooth*

J2EE J2SE Profil Profil Personal RMI Autre Profil Personnal Java (JVM) Profil MIDP Profil PDA Profil MIDP RMI Profile* APIs Bluetooth* CDC (CVM) CLDC (KVM) PDAs Java Card Foundation profil CDC Java HotSpot CLDC KVM JavaCard APIs Version 1 Version 2 Langage de programmation Java JVM CardVM 19 PDAs Bas de gamme Haut de gamme et telephone Cartes SIM 20 5 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Les configurations… ? ? Profil pour les terminaux mobiles (MIDP) ? ? ? Connected Limited Device Configuration (CLDC) Specification definies dans JSR-000030 ? Connected Device Configuration (CDC) Specification definies dans JSR-000036 ? ? ? ? JSR 36 (Personnal) JSR 46 (foundation) JSR 62 (Personnel, nouvelle version du JSR 36) JSR 66 (RMI) 512 KB ROM minimum 256 KB RAM minimum Connectivite reseau Supporte une JVM complete Interfaces utilisateurs contraintes Le premier profil J2ME defini Les terminaux cibles implementent CLDC Le profil defini ? ? ? ? ? ? Pour les terminaux avec ? ? ? ? ? Pour les terminaux avec ? ? ? ? ? 128 KB – 512 KB de memoire (RAM+ROM) Batterie limitee Connectivite reseau Interfaces utilisateurs contraintes

Affichage Gestion de donnees persistantes Envoie de message (SMS, email, etc) Securite Reseaux sans fils ? On peut telecharger les specifications et l’implementation de reference 21 ? Implementation de reference disponible 22 Exemples Votre MIDlet Profil pour terminaux mobile J2ME KVM Processeur DSP Annuaire, horaires de train, jeux, … MID Profil J2ME Profil http://java. sun. com/products/midp/ Configuration JSR# JCP etat CLDC CDC CDC 37 46 62 Version finale Version finale proposee Groupe d’experts forme Groupe d’experts forme Groupe d’experts forme Version finale proposee IHM, HTTP networking, … Foundation ttp://java. sun. com/products/foundation/index. jsp API proche de J2SE sans IHM Personal CLDC = KVM + J2ME Threads, pas de float http://java. sun. com/products/personalprofile/index. js p API graphique compatible avec AWT PDA Bluetooth CLDC CLDC CDC 75 82 66 Exemple ARM : 32-bit RISC, 256 K ROM, 256 K Flash, 64 K RAM 23 RMI 24 6 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Java technologies ? Telephones ? Liste disponible a http://www. javamobiles. com CDC et profils de base Connected Device Configuration Profil ‘foundation’ et ‘personnal’ PDAs MIDP pour Palm (Sun) Personal Java Runtime (Sun) IBM J9 J2ME MIDP PersonalJava Differentes bibliotheque 26 25 PalmOS Windows CE 2. 11 PalmOS, WindowsCE … Pas dans ce cours ? CDC ? Configuration pour terminaux mobiles permettant d’executer une JVM ‘standard’ ? ? CLDC et KVM SetTopBox, WebPhone, Console de jeux Microprocesseur (32 bits), >256 KB de memoire volatile, > 512 KB de memoire non volatile ? Profils specifiques permettant de modulariser et de reduire le code embarque ? Connected Limited Device Configuration K Virtual Machine 28 27 JVM+bibliotheque CDC = 2 MB Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Composants cles Terminaux cibles ? 128 – 512 KB de memoire ? ? > 32 KB de memoire volatile > 128 KB de memoire non volatile ? ? ? ? Bibliotheques additionnelles ‘Plus petit commun denominateur’ Machine virtuelle allegee (IHM, stockage, transmission, …) ? ? ? Processeurs ayant 16 ou 32 bits Fonctionnement sur batterie Communication reseau limitee : 9600 bps Tres large diffusions des terminaux ? PDAs, Telephones, … 30 29 Objectifs ? Domaine de couverture de CLDC ?

Definir un ensemble de technologie Java homogene pour une large gamme de terminaux ayant des contraintes techniques ? Pris en charge ? ? ? ? ? Memoire, energie, vitesse processeur, taille ecran, connexion reseau ? ? Permettre la diffusion d’application sur ces terminaux de maniere sures, dynamiques, flexibles, evolutives, … ? ? Machine virtuelle Java et langage Java Modele de securite Entree / sortie Support reseau Internationalisation Cycle de vie et installation des applications Support des IHMs Gestion des evenements Modele applicatif de haut niveau Acces aux bases de donnees Ces aspects sont definis dans des profils specique Pas pris en charge ? ? ? ? ? ? Construction d’application selon des architectures 3 parties Travail en collaboration avec les fournisseurs de terminaux mais aussi les fournisseurs d’applicatifs 31 Exemple : MIDP 32 8 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME KVM ? Principales restrictions ? ? ? ? ? ? ? ? ? ? ‘petite’ machine virtuelle Java construite pour les terminaux contraint ? Qq dizaines de kilobytes ? ? ? ? Implementation modulaire en C : 24. 000 lignes de code 40 a 80 kB (taille statique) selon les options de compilation taille vs vitesse, mise au point Sur PalmOS et Win32 environ 60 kB Fonctionne a 30-80 % de la vitesse du JDK (sans JIT) Compatible avec JVM (avec qq restrictions) ? ? ? JNI Reflexion Groupe de fils d’execution Reference legere Finalisation Support incomplet des erreurs Nouvelle implementation du chargeur (classloader), pas de possibilite d’en faire un nouveau Nouveau verificateur de bytecode Les sources sont disponibles sous la licence Sun (Sun Community Source Licence) Il existe une implementation de reference du CLDC 1. 0 (Version stable complete 1. 0. 2 en 2001) ? ? ? ? ? ?

Comprend les parties communes de J2ME ? Pas de gestion des flottants (qui n’existent pas sur les processeurs vises), pas de double non plus Gestion specifiques des fils d’execution (pas de groupe de threads) Possibilite de porter facilement l’algorithme de GC 33 ? CLDC fonctionne sur la KVM Win32 PalmOS (3. 01 ou ulterieur) Solaris Linux De nombreux autres portages de la KVM et de CLDC ont ete fait par des partenaires sur des plateformes tres diverses. 34 Bibliotheque CLDC ? Support reseau ? Classes heritees de J2SE ? ? ? Java. lang. * Java. io. * Java. util. * Javax. microedition. io. CLDC Internationalisation E/S ? ? ? ? Les bibliotheques J2SE reseau, IO et stockage sont trop grosses pour les terminaux vises ? ? ? Nouvelles classes ? ? ? Plus de 100 classes Plus de 200 kB ? Elles n’ont jamais ete construites pour ces terminaux ? ? InputStreamReader( InputStream ); InputStreamReader( InputStream, String ); OutputStreamWriter( OutputStream); OutputStreamWriter( OutputStream, String ); TCP/IP doit etre disponible Pas ou peu de possibilite pour introduire de nouveaux protocoles : Bluetooth, IrDA ? Proprietes CLDC ? ? ? ? ? microedition. platform microedition. encoding microedition. onfiguration microedition. profiles Introduction de nouvelles classes (Generic Connection Framework) ? ? ? Plus coherentes Support de differents types de protocoles, extensibles Compatibilite avec les bibliotheques existantes 36 35 9 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Generic Connection Framework ? Exemple de connection ? 6 interfaces de bases ? ? ? ? ? Input serie Output serie Communication par datagramme Communication par circuit virtuel ? CDLC ne defini pas de protocole de communication ? Forme generale ? C’est le role des profils ? ? Connector. open(« :: ») ; Connector. open(« http://www. codecamps. com »); Connector. open(« socket://129. 144. 111. 222:9000 »); Connector. open(« comm:0;baudrate=9600 »); Connector. open(« file:codecamps. dat »); ? L’implementation de reference possede qq protocoles ? HTTP ? Peut servir de point de depart TCP, connection HTTP legere Sockets ? Connection input Stream notifier output datagramme Ports series ? ? Fichiers ? Stream connexion Content connexion http connexion 37 38 Securite ? Certification des classes Station de developpement Myappp. java javac Myappp. class preverificateur Myappp. class 39

Impossibilite d’implementer le modele de securite de J2SE ? Terminal d’execution download Sa taille est superieur au CDLC Niveau de la machine virtuelle ? ? ? Modele de securite du CDLC ? ? Une application s’executant sur la VM ne doit pas pouvoir causer de dommage au terminal Nouveau Classfile verificateur certifie Une partie seulement de l’API Java est disponible Un programme ne peut pas surcharger certaines classes standards L’acces aux fonctions natives n’est pas autorise verificateur ?? Niveau applicatif ? ? ? interpreteur 40 10 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis

Une introduction a la plate-forme J2ME Telecharger le CLDC ? http://java. sun. com/product/cldc ? ? ? ? ? ? Binaires et sources pour KVM et preverificateur Classes CDLC Documentation Exemples Source pour JAM et Java technology Code Compact Com. sun. kjava ? MIDP Mobile Information Device Profil Pour recuperer des MIDlet http://midlet. org 42 41 bibliotheque non supportee : IHM, cycle de vie ? Les applications utilisent generalement ? MIDP ou Wireless toolkit MIDP Mobile Information Device Profile ? Caracteristiques du terminal ? Le premier profil J2ME, JSR-0037 (1. 0) puis JSR-0118 (2. ) ? Affichage ? ? Les terminaux vises doivent supporter CLDC Toolkit de visualisation, input Gestion de donnees persistantes Messages ? Taille de l’ecran : 96×54 pixels Couleur : 1 bit (noir et blanc) Mini : 1 clavier keypad Possibilite d’avoir des claviers etendus : un ou deux ‘clavier’, ecran tactile optionnel 128 kb non volatile pour MIDP composants 8 kb non volatile pour les donnees persistantes 32 kb volatile pour le runtime java (pile, tas, …) Connexion full-duplex, intermittente, sans fils, debit faible ? Objectifs ? ? ? ? ? ? Entree ? ? ? Memoire ? ? ? SMS, email ?

Securite Connexion par reseau sans fils C’est celle que nous allons utiliser en TP ? Reseau ? ? Sun distribue une version de reference ? 43 44 11 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME objectifs ? architecture Definir une architecture et les APIs associees pour l’ecriture d’application pour des terminaux mobiles ? La simplicite est recherchee, parfois au detriment de la completude ? ? ? applications MIDP CLDC applications Classes OEM applications Affichage texte et graphique, oriente formulaire Persistance dans des fichiers structures en enregistrement Connexion eseau : HttpConnection, UDP, SMS/MMS, …. ? En dehors des objectifs ? ? ? ? Installation de l’application sur le terminal Modele de securite applicatif Besoins specifiques des applications Les differents details d’implementation 45 logiciel natif Terminal mobile 46 Administration d’application ? Hypotheses ? Le MIDP permet la gestion des applications ? MIDP fait les hypotheses suivantes ? ? ? En les adaptant aux caracteristiques des terminaux En permettant l’installation, la suppression via un reseau sans fils ou un serveur web En permettant l’evolution d’une MIDlet ? ? ? ? xistence d’un noyau minimal qui gere le materiel avec au moins un fils d’execution executant la machine virtuelle Java existence d’un mecanisme permettant de lire et d’ecrire en memoire non-volatile Capacite minimale pour utiliser un ecran bitmap (meme reduit) Capacite permettant de lire et d’ecrire via un peripherique sans fils existence de dates pouvant etre utilisees pour le stockage des donnees 48 47 12 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Bibliotheques de classes ? ? ? ? ? Les classes du CLDC ? Gestion du cycle de vie de l’application ? Java. lang ? Javax. icroedition. midlet ? Version allegee du J2SE ? IHM ? – de classes, – de methodes Javax. microedition. lcdui Javax. microedition. rms Javax. microedition. io ? ? Java. util ? Version allegee du J2SE ? Gestion de la persistance ? – de classes, – de methodes Java. io ? Acces reseau ? Langage et utilitaire ? ? ByteArrayInputStream, ByteArrayOutputStream, DataInputStream, DataOutputStream, InputStream, InputStreamReader, OutputStream, OutputStreamWriter, PrintStream, Reader, Writer Connection, ContentConnection, Datagram, DatagramConnection, HttpConnection, InputConnection, OutputConnection, StreamConnection, StreamConnectionNotifier 0 Javax. microedition. io ? Java. lang Java. util 49 Les classes de MIDP 1. 0 ? Nouveaute MIDP 2. 0 ? Javax. microedition. midlet ? Securite ? ? ? Cycle de vie d’une application Interface oriente formulaire ? ? Javax. microedition. lcdui ? https (au-dessus de TLS, SSL ou WAP WTLS) PKI (certificats) JAR signe ? Alert, AlertType, Canvas, ChoiceGroup, Command, DateField, Display, Displayable, Font, Form, Gauge, Graphics, Image, ImageItem, Item, List, Screen, StringItem, TextBox, TextField, Ticker ? ? La signature et la cle publique sont ajoute au JAD Nouvelle entree du JAD : MIDlet-Permissions et MIDletPermissions-Opt Permissions ? ? Javax. microedition. rms ? Oriente persistance ? RecordStore, RecordEnumeration, RecordComparator, RecordFilter, RecordListener Push de MIDlet De nouvelles classes pour de nouveaux domaines ? ? Javax. microedition. media Javax. microedition. lcdui. game 52 51 13 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Nouveaute MIDP 3. 0 ? MIDP Application MIDlet ? ? Devrait sortir en septembre 2008 ? Une application MIDP est une MIDlet Applications centrees sur l’IHM ? ? ? JSR00271 ?

L’ecran est l’unite de dialogue Un seul ecran visible a un instant donne Les evenements (clavier ou autre) concernent l’ecran actif Ont un cycle de vie bien determine Fournissent des informations sur elles-memes Etendent javax. microedition. midlet. MIDlet Resident, au moins pour partie, dans la memoire non-volatile (ROM ou EEPROM) Peuvent etre telechargee et recopiee dans la memoire persistante du MID Une fois installee, elles peuvent executees plusieurs fois sans nouvelle installation 54 MIDlets ? ? ? ? MIDlets persistantes ? ? ? 53 Interaction avec les utilisateurs ? Hierarchie des classes pour les IHMs

Les MIDlets sont generalement des applications dialogants avec l’utilisateur ? Celui-ci est pris en compte des le debut de la conception ? ? APIs definies dans javax. microedition. lcdui API de haut niveau, portable ? ? ? ? Orientee ecran et widget Une application utilisant cette API pourra s’executer sur tous les terminaux Contraintes : ne pas acceder directement aux attributs des terminaux (couleurs, tailles, entree) Plus simple et moins puissant que AWT Primitives de dessin Evenements claviers L’utilisation compromet la portabilite de l’application : a utiliser uniquement lorsque c’est necessaire 5 ? API de bas-niveau ? ? ? Vous trouverez, dans le repertoire « apps » du Wireless Toolkit, un projet nomme « UIDemo » qui illustre, avec des exemples, l’utilite de chacun de ces composants. 56 14 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Gestion de la persistence ? ? ? ? ? ? ? ? Entree-sortie ? Permet uniquement l’enregistrement de structure (RMS) API independante des terminaux API definie dans javax. microedition. ms Un enregistrement est un tableau de bytes Les enregistrements de l’application peuvent etre sauvegarder en memoire Les enregistrements en memoire peuvent etre partages entre les applications Support pour les enumerations et les ensembles (sorting, filtering) Mise a jour atomique des enregistrements simples 57 ? Implemente les specifications du CLDC defini dans javax. microedition. io Peut ouvrir des connections HTTP (RFC2616) 58 Utilitaires MIDP ? internationalisation ? Classes et interfaces tres utiles ? Implemente les specifications du CLDC specifiee dans java. util ? ? ? ? ? ? ? Calendrier Date Enumeration Table de hachage Tirage aleatoire Pile alarme (timer,timerTask) vecteur 59 ? Support des caracteres ISO Latin 1 (ISO8859-1) Peut etre adapte en fonction du terminal, defini dans microedition. locale ? ? Chaque terminal doit fournir ses propres classes Les applications sont constituees d’un ensemble de fichiers jar 60 15 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Pour telecharger le MIDP ? Cycle de vie d’une MIDlet ? Recherche ? ?? Installation ?? Chargement http://java. sun. om/products. midp ? ? de l’appli ? Le logiciel d’administration ? ? ? ? ? Emulateur sous forme binaire (windows) Classes et sources pour bibliotheques (java & C) Documentation (pdf et javadoc) Examples http://java. sun. com/products/j2mewtoolkit 61 Creation d’une instance ?? Initialisation ?? Terminaison ? ? ? Gestion ? ?? Suppression de version par l’utilisateur installe les MIDlets sur les terminaux verifie la securite met a jour la version de l’appli si necessaire ? MIDP defini les mecanismes necessaire ? ? J2ME Wireless toolkit ? Formats des Jar et Jad, MIDlet descripteurs dans avax. microedition. midlet 62 MIDP cycle de vie des applications serveur MIDlet Transfert de l’application ? ? Le MID transfere la MIDlet depuis un serveur Le medium de transfert doit etre identifier ? ? ? Cable serie Port Infra Rouge(IrDA) Reseau sans fils Caracteristiques du terminal Taille de l’application Cout du transfert publier transferer ? Une negociation a lieu entre le MID et le serveur ? ? ? creer MIDlet installer MIDlet detruire ? Le transfert recopie la MIDlet dans la memoire du terminal ? ? Environnement de developpement terminal 63

Verification de la securite Transformation du code de la MIDlet du format public au format du terminal 64 16 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME execution d’une MIDlet ? Cycle d’execution d’une MIDlet New() import javax. microedition. midlet. *; import javax. microedition. lcdui. *; public class HelloMIDlet extends MIDlet { public HelloMIDlet() { } public void startApp() { } public void pauseApp() { // On va suspendre l’execution de la MIDlet… // Que faut-il faire } public void destroyApp() { // La MIDlet ne va plus etre en execution… // Que faut-il faire… } }

Chargement ? Installe la MIDlet dans la KVM ? Nouvelle version ? ? ? Paused destroyApp() pauseApp() destroyed startApp() destroyApp() active 66 ? Une nouvelle version d’une MIDlet est disponible des son installation Le logiciel d’administration controle les MIDlets installees et leur numero de version Cette information est utilisee pour changer de version, l’installation d’une nouvelle version provoque la desinstallation de la version precedente Les attributs des MIDlets (versions, dates, etc. ) sont contenus dans le descripteur (fichier . ad) et dans le manifest inclus dans le fichier . jar. ? Suppression d’une application ? La suppression de l’image de la MIDlet provoque aussi, si possible la suppression des ressources liees et des donnees ecrites en memoire persistantes 65 MIDlet jar Specifie dans javax. microedition. midlet ? Un jar contient un manifest et peut contenir plusieurs MIDlets ? Exemple de descripteurs ? ? ? ? ? ? ? ? ? ? ? ? ? ? Le jar contient pour chaque MIDlet les ressources necessaires ? Bitmap, son, etc ? Chaque fichier jar est accompagne d’un descripteur ? ? ? ? ? ? Fichier . ad Il permet de verifier que la suite de MIDlet peut etre telechargee Defini les attributs de configuration Permet le transfert simultane de plusieurs MIDlet contenues dans le meme fichier jar Le type MIME d’un fichier . jad est ? Text/vnd. sun. j2me. app-descriptor Description: MIDP app descriptor MIDP app descriptor MIME Type: text/vnd. sun. j2me. app-descriptor Extension: jad Application: d:midpmidp. exe -transient file://%1 Pour configurer un navigateur MIDlet-Name: SunSamples MIDlet-Version: 1. 0 MIDlet-Vendor: Sun Microsystems, Inc. MicroEdition-Profile: MIDP-1. 0 MicroEdition-Configuration: CLDC-1. MIDlet- 1: Sokoban, /icons/Sokoban. gif, example. sokoban. Sokoban MIDlet- 2: Tickets, /icons/Auction. gif, TicketAuction MIDlet- 3: Colors, /icons/ColorChooser. gif, example. Color MIDlet- 4: Stock, /icons/Stock. gif, example. stock. StockMIDlet MIDlet- 5: Tiles, /icons/Tiles. gif, example. tiles. Tiles MIDlet- 6: ManyBalls, /icons/ManyBalls. gif, example. ManyBalls MIDlet- 7: Sampler, /icons/App. gif, Sampler MIDlet- 8: Properties, /icons/App. gif, example. PropExample MIDlet- 9: HttpTest, /icons/App. gif, example. HttpTest 67 68 17 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis

Une introduction a la plate-forme J2ME Attributs des descripteurs Attribute Name MIDlet-Name MIDlet-Version MIDlet-Vendor MIDlet-Description MIDlet-Info-URL MIDlet-; n; MIDlet-Jar-URL MIDlet-Jar-Size MIDlet-Data-Size MicroEdition-Profile MicroEditionConfiguration File Req Req Req Opt Opt Description Name of the MIDlet suite. Version number of the MIDlet suite. Organization that provides the MIDlet suite. Description of this MIDlet suite. URL for further information on the MIDlet suit Name, icon, and class of the th MIDlet in JAR file, separated by « , ».

URL from which to download the JAR file. Number of bytes in the JAR file. Minimum number of bytes of persistent data required by the MIDlet. The required J2ME Profile. The required J2ME Configuration. 69 Le paquetage javax. microedition. midlet (1) ? Defini les interfaces et les classes necessaires ? ? Pour ecrire des MIDlet Pour le dialogue MIDlet – machine d’execution Permet le respect du cycle de vie precedemment defini 70 Req Req Opt ? Classes abstraites pour les MIDlets ? Le paquetage javax. microedition. midlet (2) rotected MIDlet() // constructeur sans parametre // modifiable protected abstract void startApp() throws MIDletStateChangeException // appelee au demarrage de la MIDlet (paused -; active state) protected abstract void pauseApp() // appelee avant de suspendre la MIDlet (active -; paused state) protected abstract void destroyApp( boolean unconditional) throws MIDletStateChangeException // appele avant d’arrete l’execution de la MIDlet (* -; removed state) // non modfiable // a appeler apres l’appel a la primitive de changement d’etat public final void notifyDestroyed() // demande au gestionnaire d’arrete l’application public final void notifyPaused() // demande au gestionnaire de mettre en pause l’application public final String getAppProperty( String key ) // demande de retourner des informations concernant l’application 71 C’est ma premiere MIDlet ? Ecrire ? le code Java ?? Compiler le code Java ?? Preverifier le code ? Construire le fichier Jar ? ?? Creer le descripteur de la MIDlet ?? Executer la MIDlet sur l’emulateur (ou sur le terminal) http://java. sun. com/products/j2mewtoolkit 72 18 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME

Ecrire le code Java import javax. microedition. midlet. *; Import javax. microedition. lcdui. *; public class HelloMIDlet extends MIDlet { private Display display; // Display pour ma MIDlet public HelloMIDlet () { display = Display. getDisplay (this); } public void startApp() { TextBox t = new TextBox( « Hello MIDlet » , ”Hello World ! It’s my first MIDlet”, 256, 0); display. setCurrent (t); } public void pauseApp() { System. out. println(« In pauseApp… »); } public void destroyApp( boolean unconditional) { System. out. println(« In destroyApp… »); } } 73 Compiler et ‘verifier’ le code ? ? javac –g:none –bootclasspath c:midp-fcsclasses HelloMIDlet. ava –d tmp preverify -classpath . ;c:midp-fcsclasses HelloMIDlet –d verified tmp ? ? Le repertoire verified contient le code verifie Le repertoire tmp contient le code non verifie 74 Construire le fichier Jar et le decripteur ‘Hello. jad’ ? ? Excuter la MIDlet ? jar cf Hello. jar *. class ? Le fichier jar doit contenir toutes les ressources ? Le descripteur (fichier Hello. jad) doit contenir : ? ? ? ? ? ? ? MIDlet-1: HelloMIDlet MIDlet-Description: Ma premiere MIDlet MIDlet-Jar-Size: 922 MIDlet-Jar-URL: Hello. jar MIDlet-Name: FirstMIDlet MIDlet-Vendor: Sun Microsystems MIDlet-Version: 1. 0 75 midp –classpath Hello. jar –descriptor Hello. Jad Les parametres de la commande classpath // directories and zip files to search -descriptor //MIDlet app descriptor file to use -transient // run app_ name from descriptor at url -autotest // repeatedly run application -verbose // enable classloading information -debug //enable debugging info -help show this message 76 19 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Variable d’execution d’une MIDlet Option HTTP_PROXY CLASSPATH ENCODING Null Les differents emulateurs ? Defaut Null Description URL sur serveur proxy Classes utilisateurs Codage des caracteres Utilisation du double tampon pour l’affichage 2, 4, 8 pour 4, 16 ou 256 couleurs 77 Ktoolbar ? http://java. sun. com/products/j2menewtoolkit http://java. sun. com/products/midp4palm ? PalmOS 3. 5 ? ? autres : ? DOUBLE_BUFFER True ING SCREEN_DEPTH 1 (b/w) Motorola i1000 telephone ? http://www. idendev. com ? Siemens 78 Une demo… our vous montrer que ca marche ? ? en ligne de commande ? sur Palm OS ? avec ktoolbar Developpement MIDP IHM Persistance Reseau 79 80 20 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Principales bibliotheques ? ? ? ? Recommandations pour un code Java performant et compact ? UI (User Interface) Reseau : connexion HTTP Persistance : orientee enregistrement Dans : java. util ? Oublier les bonnes methodes de programmation ? ? ? ? Classes: Timer, TimerTask, Calendar, Date, HashTable, Random, Stack, TimeZone, Vector Interfaces : Enumeration Exceptions : EmptyStackException, NoSuchElementException 81 ?

Mais continuer a ecrire du code clair, commente, lisible Pensez a la maintenabilite et a la testabilite ? Si vous avez des problemes de performances ? ? Analysez (profiler) votre code pour identifier les goulot d’etranglement (bottlenecks) Optimisez les goulots en conservant la qualite 82 Recommandations pour un code Java performant et compact ? Recommandations pour un code Java performant et compact ? Construire de petites applications, les plus simples possibles ? Internationalisation a l’installation ? Ofusquer le source ? ? Mettre les methodes en « private » Compacter les identifiants de methodes ? ? http://www. alphaworks. ibm. com/tech/JAX http://www. etrologic. com/retroguard-main/html Outils calculant la fermeture transitive du graphe de chargement ? Une version de l’application (JAR) par langue, pays, … Precompilation avec des #ifdef avec cpp (ou ses versions Java) ? Degraisser les jarfiles des classes non chargees ? ? JAR non compresse pour accelerer le demarrage ? ? Decompression Mapping memoire virtuelle ou Flah ou ROM ? Simplifier votre application 83 84 21 Copyright Michel Riveill, Universite de Nice – Sophia Antipolis Une introduction a la plate-forme J2ME Economie de memoire a l’execution ? Economie de memoire a l’execution ? Utiliser les types scalaires plutot que des objets ? ? oid setSize(int width, int height); void setSize(Dimension size); Mettre les references qui ne seront plus utilisees a null Reutiliser les objets instancies ? Evitez la recursion ? ? ? Aider le Ramasse-Miette ? ? Elegant mais lent et gourmant en pile Derecusivez quand c’est possible Car les exceptions sont des objets et leur declenchement augmente la taille du code ? Evitez les exceptions ? Pool d’objets, … Constructeur Vector (int initialCapacity, int capacityIncrement) Public class LazyClass { private Vector v; public Vector getVector() { if (v==null) v=new Vector(); return v; } } 85 ? Prevoyer la capacite initiale des collections ? ? Instancier a la demande (lazy ou on-demand) ? 86 Code performant ? Graphisme ? Utiliser des variables locales ? for(i=0;i=’0’ && buf[i]