J2ME Janvier 2001 Copyright Michel RIVEILL, Université de Nice, Janvier 2001 1 1 J.2.M.E Java 2 Micro Edition Michel RIVEILL Université de Nice – ESSI Email : [email protected]2 Objectifs n Présenter les différentes configurations et profils de J2ME n Présenter quelques aspects techniques liés à KVM, CLDC et MIDP n Présenter l’environnement de développement J2ME
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
n Spécification définies dans JSR-000036¡ JSR 36 (PersonnalJava)¡ JSR 46 (fondation)¡ JSR 62 (personnel, nouvelle
version du JSR 36)¡ JSR 66 (RMI)
n Pour les terminaux avec¡ 512 KB ROM minimum¡ 256 KB RAM minimum¡ Connectivité réseau¡ Supporte une JVM complète¡ Interfaces utilisateurs
contraintes
14
Profil pour les terminaux mobiles
n Le premier profil J2ME définin Les terminaux cibles implémentent CLDCn Le profil défini
¡ Affichage¡ Gestion de données persistantes¡ Envoie de message (SMS, email, etc)¡ Sécurité¡ Réseaux sans fils
n Implémentation de référence disponible
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
8
15
Exemples
VotreMIDIlet
Annuaire, horaires de train, jeux, …
Profil pourterminaux
mobile
IHM, HTTP networking, …
J2MECLDC = KVM + J2ME
KVM
Processeur DSP Exemple ARM :32-bit RISC, 256 K ROM, 256 K Flash, 64 K RAM
16
Profil J2ME
Version finale proposée
66CDCRMI
Groupe d’experts formé
82CLDCBluetoth
Groupe d’experts formé
75CLDCPDA
Groupe d’experts formé
62CDCPersonnel
Version finale proposée
46CDCFondation
Version finale37CLDCMID
JCP étatJSR#ConfigurationProfil
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
9
17
Java technologies
n Téléphones¡ Liste disponible à http://www.javamobiles.com
n PDAs
…
Différentes bibliothèque
IBM J9PalmOS, WindowsCE
PersonalJavaPeronal Java Runtime (Sun)
Windows CE 2.11
J2ME MIDPMIDP pour Palm (Sun)
PalmOS
18
CLDC et KVM
Connected Limited DeviceConfiguration
K Virtual Machine
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
10
19
Terminaux cibles
n 128 – 512 KB de mémoiren Vitesse du processeur : 16 – 32 MHzn Fonctionnement sur batterien Communication réseau limitée : 9600
bpsn Très large diffusions des terminaux¡ PDAs, Téléphones, …
20
Objectifsn Définir un ensemble de technologie Java
homogène pour une large gamme de terminaux ayant des contraintes techniques¡ Mémoire, énergie, vitesse processeur, taille
écran, connection réseaun Permettre la diffusion d’application sur ces
terminaux de manière sûres, dynamiques, flexibles, évolutives, …¡ Construction d’application selon des architecture
3 parties¡ Travail en collaboration avec les fournisseurs de
terminaux mais aussi les fournisseurs d’applicatifs
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
11
21
Domaine de couverture de CLDCn Pris en charge
¡ Machine virtuelle Java et langage Java¡ Modèle de sécurité¡ Entrée / sortie¡ Support réseau¡ Internationalisation
n Pas pris en charge¡ Cycle de vie et installation des applications¡ Support des IHM¡ Gestion des événements¡ Modèle applicatifs de haut niveau¡ Accès au base de données¡ Ces aspects sont définis dans des profils comme MIDP
22
KVMn ‘petite’ machine virtuelle Java construite pour les
terminaux contraint¡ Qq dizaines de kilobytes
n Implémentation modulaire en C : 24.000 lignes de coden 40 à 80 kB (taille statique) selon les options de compilation
¡ taille vs vitesse, mise au pointn Sur PalmOS et Win32 environ 60 kBn Fonctionne ) 30-80 % de la vitesse du JDK (sans JIT)
¡ Comprend les parties communes de J2MEn Compatible avec JVM (avec qq restrictions)
¡ Pas de gestion des flottants (qui n’existent pas sur les processeurs visés)
¡ Gestion spécifiques des fils d’exécution (thread)¡ Possibilité de porter facilement l’algorithme de GC
¡ CLDC fonctionne sur la KVM
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
12
23
Principales restrictionsn JNIn Réflexionn Groupe de fils d’exécutionn Référence légèren Finalisationn Support incomplet des erreursn Nouvelle implémentation du chargeur (classfile)
n Il existe une implémentation de référence du CLDC 1.0¡ Win32¡ PalmOS¡ Solaris¡ De nombreux autres portages de la KVM et de CLDC ont été
fait.
24
Bibliothèque CLDCn Classes héritée de J2SE
¡ Java.lang.*¡ Java.io.*¡ Java.util.*
n Nouvelles classes¡ Javax.microedition.io.*
n CLDC Internationalization¡ InputStreamReader( InputStream ); InputStreamReader( InputStream ,
n Propriétés CLDC¡ microedition.platform¡ microedition.encoding¡ microedition.configuration¡ microedition.profiles
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
13
25
Support réseaun Les bibliothèques J2SE réseau, IO et stockage sont
trop grosses pour les terminaux visés¡ Plus de 100 classes¡ Plus de 200 kB
n Elles n’ont jamais été construites pour ces terminaux¡ TCP/IP doit être disponible¡ Pas ou peu de possibilité pour introduire de nouveaux
protocoles : Bluetooth, IrDAn Introduction de nouvelles classes (Generic
Connection Framework)¡ Plus cohérentes¡ Support de différents types de protocoles, extensibles¡ Compatibilité avec les bibliothèques existantes
26
Generic ConnectionFramework
n 6 interfaces de bases¡ Input série¡ Output série¡ Communication par
datagramme¡ Communication par circuit
virtueln TCP, connection HTTP légère
n CDLC ne défini pas de protocole de communication¡ C’est le rôle des profils
n L’implémentation de référence possède qq protocoles¡ Peut servir de point de départ
Connection
datagramme
Stream notifier
input output
stream
content
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
14
27
Exemple de connection
n Forme générale¡ Connector.open(« <protocol>:<path>:<paramet
ers>");
n HTTP¡ Connector.open("http://www.codecamps.com");
n Sockets¡ Connector.open("socket://129.144.111.222:90
00");
n Ports séries¡ Connector.open("comm:0;baudrate=9600");
n Fichiers¡ Connector.open("file:codecamps.dat");
28
Sécuritén Impossibilité d’implémenter le modèle de
sécurité de J2SE¡ Sa taille est supérieur au CDLC
n Modèle de sécurité du CDLC 1. Niveau de la machine virtuelle
n Une application s’exécutant sur la VM ne doit pas pouvoir causer de dommage au terminal
n Nouveau Classfile vérificateur certifié2. Niveau applicatif
n Une partie seulement de l’API Java est disponiblen Un programme ne peut pas surcharger certaines
classes standardsn L’accès aux fonctions natives n’est pas autorisé
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
15
29
Certification des classes
Station de développement Terminal d’exécution
Myappp.java
Myappp.java
Myappp.java
download
vérificateur
interpréteur
javac
prévérificateur
30
Télécharger le CLDC
n http://java.sun.com/product/cldc¡ Binaires et sources pour KVM et prévérificateur¡ Classes CDLC¡ Documentation¡ Exemples¡ Source pour JAM et Java technologyCode
Compact¡ Com.sun.kjava
n bibliothèque non supportée : IHM, cycle de vie
n Les applications utilisent généralement¡ MIDP ou Wireless toolkit
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
16
31
MIDPMobile Information Device Profile
n Le premier profil J2ME (JSR-0037)¡ Les terminaux visés doivent supporter
CLDCn Objectifs¡ Tolkit de visualisation, input¡ Gestion de données persistantes¡ Messages
n SMS, email¡ Sécurité¡ Connexion par réseau sans fils
32
Caractéristiques du terminal
n Affichage¡ Taille de l’écran : 96x54 pixels
n Entrée¡ Un ou deux ‘clavier’, écran tactile optionnel
n Mémoire¡ 128 kb non volatile pour MIDP composants¡ 8 kb non volatile pour les données persistantes¡ 32 kb volatile pour le runtime java (pile, tas, …)
n Réseau¡ Connexion full-duplex, intermittente, sans fils,
débit faible
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
17
33
objectifs
n Définir une architecture et les APIs associées pour l’écriture d’application pour des terminaux mobiles¡ La simplicité est recherchée, parfois au
détriment de la complétuden En dehors des objectifs¡ Installation de l’application sur le device¡ Modèle de sécurité applicatif¡ Besoins spécifiques des applications¡ Les différents détails d’implémentation
34Terminal mobile
logiciel natif
CLDC
architecture
MIDP
applications
ClassesOEM
applicationsapplications
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
18
35
Administration d’application
n Le MIDP permet la gestion des applications¡ En les adaptants aux caractéristiques
des terminaux¡ En permettant l’installation, la suppresion
via un réseau sans fils ou un serveur web¡ En permettant l’évoluytion d’une MIDlet
36
Hypothèses
n MIDP fait les hypothèses suivantes¡ existence un noyau minimal qui gère le matériel
avec au moins un fils d’exécution exécutant la machine virtuelle Java
¡ existence un mécanisme permettant de lire et d’écrire en mémoire non-volatile
¡ Capacité minimale pour utiliser un écran bitmap (même réduit)
¡ Capacité permettant de lire et d’écrire via un périphérique sans fils
¡ existence de dates pouvant être utilisées pour le stockage des données
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
19
37
Bibliothèques de classesn Gestion du cycle de vie de l’application
¡ Javax.microedition.midletn IHM
¡ Javax.microedition.lcduin Gestion de la persistance
¡ Javax.microedition.rmsn Accès réseau
¡ Javax.microedition.ion Langage
¡ Java.lang¡ Java.util
38
MIDP ApplicationMIDlet
n MIDlets¡ Ont un cycle de vie bien déterminé¡ Fournissent des informations sur elles-mêmes¡ Étendent javax.microedition.midlet.MIDlet
n MIDlets persistantes¡ Résident, au moins pour partie, dans la mémoire
non-volatile (ROM ou EEPROM)¡ Peuvent être téléchargée et recopiée dans la
mémoire persistante du MID¡ Une fois installée, elles peuvent exécutées
plusieurs fois sans nouvelle installation
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
20
39
Interaction avec les utilisateursn Les MIDlets sont généralement des applications dialoguants
avec l’utilisateur¡ Celui-ci est pris en compte dès le début de la conception
n APIs définies dans javax.microedition.lcduin API de haut niveau, portable
¡ Orientée écran et widget¡ Une application utilisant cette API pourra s’exécuter sur tous les
terminaux¡ Ne pas accéder directement aux attributs des terminaux
(couleurs, tailles, entrée)¡ Plus simple et plus puissant que AWT
n API de bas-niveau¡ Primitives de dessin¡ Événements claviers¡ L’utilisation compromet la portabilité de l’application
40
Gestion de la persistencen Permet uniquement l’enregistrement de structure
(RMS)n API indépendante des terminauxn API définie dans javax.microedition.rmsn Un enregistrement est un tableau de bytesn Les enregistrements de l’application peuvent être
sauvegarder en mémoiren Les enregistrements en mémoire peuvent être
partagés entre les applicationsn Support pour les énumérations et les ensembles
(sorting, filtering)n Mise à jour atomique des enregistrements simples
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
21
41
Entrée-sortie
n Implémente les spécifications du CLDC
n Défini javax.microedition.ion Peut ouvrir des connections HTTP
(RFC2616)
42
Utilitaires MIDP
n Classes et interfaces très utiles¡ Spécifié dans java.util
n Calendriern Daten Enumérationn Table de hachagen Tirage aléatoiren Pilen alarme (timer,timerTask)n vecteur
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
22
43
internationalisation
n Support des caractères ISO Latin 1 (ISO8859-1)
n Peut être adapté en fonction du terminal dans microedition.locale¡ Chaque terminal doit fournir ses propres
classes¡ Les applications sont constituées d’un
ensemble de fichiers jar
44
Pour télécharger le MIDP
n http://java.sun.com/products.midp¡ Émulateur sous forme binaire (windows )¡ Classes et sources pour bibliothèques (java & C)¡ Documentation (pdf et javadoc)¡ Examples
n Status¡ MIDP 1.0 spec., RI and TCK available¡ MIDP for Palm OS in development – Based on MIDP 1.0
specification¡ – To be available later this year¡ • MIDP RI 1.0.2 in development – Based on MIDP 1.0
specification¡ – To be available later this year¡ • J2ME Wireless Toolkit 1.0.2 in development – Based on CLDC
RI 1.0.2 and MIDP RI 1.0.2¡ – To be available later this year
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
23
45
Les évolutions…n MIDP NG JSR submittedn – http://java.sun.com/jcp/jsr/jsr_118_midpng. htmln – Final spec, RI and TCK should be available within 6 to 9
months (H1 2002)n – Commercially available on real devices in H2 2002n • MIDP NG specification goals – Backward compatibility with
MIDP 1.0 specificationn – Continued focus on small, high- volume wireless phonesn – Maintain tight footprint objectives to limit growth in the core
APIsn – Information learned from MIDP 1. 0 deployments to fine tune
MIDP 1.0n APIsn – Focus on core functions needed by all devices and
applicationsn – Focus on enabling mCommerce, service- based applications
46
Nouvelles fonctionnalitésn Domain security model, including signing of applications and
verification of certificatesn • HTTPS and secure networkingn • Network connectivity via sockets and datagramsn • Formal inclusion of OTA Provisioningn • Push architecture: external events and messages routed ton appropriate MIDletsn • User Interface - extensions to low- level LCDUI to allow
greatern game functionality and layout control for larger screen sizes.n • A small, efficient XML parser to enable platform-
independentn data exchangen • Base sound API
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
24
47
Cycle de vie d’une MIDlet1. Recherche de l’appli2. Installation3. Chargement
1. Création d’une instance2. Initialisation3. Terminaison
4. Gestion de version
n Le logiciel d’administration¡ installe les MIDlets sur les
terminaux¡ vérifie la sécurité¡ met à jour la version de l’appli
si nécessairen MIDP défini les mécanismes
nécessaire¡ Formats des Jar et Jad,
MIDlet descripteurs dans javax. microedition. midlet
New()
DestroyApp()
StartApp()
DestroyApp()
PauseApp()
paused
destroyed
active
48terminalEnvironnementde développement
serveur
MIDP cycle de vie des applications
MIDlet
MIDlet
MIDletcréer
publier transférer
installer détruire
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
25
49
Transfert de l’applicationn Le MID transfère la MIDlet depuis un serveurn Le médium de transfert doit être identifier
¡ Cable série¡ Port Infra Rouge(IrDA)¡ Réseau sans fils
n Une négociation à lieu entre le MID et le serveur¡ Caractéristiques du terminal¡ Taille de l’application¡ Coût du transfert
n Le transfert recopie la MIDlet dans la mémoire du terminal¡ Vérification de la sécurité¡ Transformation du code de la MIDlet du format public au
format du terminal
50
exécution d’une MIDletn Chargement
¡ Installe la MIDlet dans la KVMn Nouvelle version
¡ Une nouvelle version peut être installée après l’installation
¡ Le logiciel d’administration contrôle les MIDlets installées et leur numéro de version
¡ Cette information est utilisée pour changer de version
¡ Les attributs des MIDlets (versions, dates, etc.) sont contenus dans le descripteur lui même inclus dans le fichier JAR.
n Suppression d’une application¡ La suppression de l’image de la
MIDlet provoque aussi, si possible la suppression des ressources liées et des données écrites en mémoire persistantes
New()
DestroyApp()
StartApp()
DestroyApp()
PauseApp()
paused
destroyed
active
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
26
51
MIDlet jarn Un jar peut contenir plusieurs MIDletsn Chaque MIDlet et fichier jar est accompagné d’un
descriteur¡ Verifier que la suite de MIDlet peut être téléchargée¡ Définir les attributs de configuration¡ Permettre le transfert simultané de plusieurs MIDlet¡ Les descripteurs sont stockés dans des fichiers jad¡ Le type MIME d’un fichier .jad est
n Text /vnd.sun.j2me.app-descriptor¡ Pour configurer un navigateur
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
27
53
Attributs des descripteurs
The required J2ME Configuration.MicroEdition-Configuration
The required J2ME Profile.MicroEdition-Profile
Minimum number of bytes of persistent data required by the MIDlet.
OptMIDlet-Data-SizeNumber of bytes in the JAR file.ReqMIDlet-Jar-SizeURL from which to download the JAR file.ReqMIDlet-Jar-URL
Name, icon, and class of the <n> th MIDlet in JAR file, separated by ",".
MIDlet-< n>URL for further information on the MIDlet suitOptMIDlet-Info-URLDescription of this MIDlet suite.OptMIDlet-DescriptionOrganization that provides the MIDlet suite.ReqMIDlet-VendorVersion number of the MIDlet suite.ReqMIDlet-VersionName of the MIDlet suite.ReqMIDlet-NameDescriptionFileAttribute Name
54
javax. microedition. midletn Défini les interfaces et les classes nécessaires
¡ pour écrire des MIDlet¡ Pour le dialogue MIDlet – administrateur d’application
n Classes abstraites pour les MIDlets¡ – protectedMIDlet()
// constructeur sans paramètre¡ – protectedabstract void startApp() throwsMIDletStateChangeException
// appelée quand la MIDletdémarre (paused -> active state)¡ – protectedabstract void pauseApp()
// appelée quand la MIDletest suspendue (active -> paused state)¡ – protectedabstract void destroyApp( boolean unconditional) throws
MIDletStateChangeException// appelé quand la MID let est détruite (* -> removed state)
¡ – public final void notifyDestroyed()// prévient l’administrateur d’application que la MIDlet a été
supprimée¡ – public final void notifyPaused()
// prévient l’administrateur d’application que la MIDlet a suspendue¡ – public final String getAppProperty( String key )
// appelé par une MIDlet pour lire ses propriétés
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
28
55
C’est ma première MIDlet
1. Ecrire le code Java2. Compiler le code Java3. Prévérifier le code4. Construire le fichier Jar5. Créer le descripteur de la MIDlet6. Exécuter la MIDlet sur l’émulateur (ou
sur le terminal)http://java.sun.com/products/j2mewtoolkit
56
Ecrire le code Javaimport javax.microedition.midlet.*;
public class HelloMIDlet extends MIDlet {public void startApp() {
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
29
57
Compiler et ‘vérifier’ le code
n javac –g:none–bootclasspath c:\midp-fcs\classesHelloMIDlet.java
n preverify-classpath .;c:\midp-fcs\classesHelloMIDlet
58
Construire le fichier Jar et le decripteur ‘Hello.jad’
n jar cf Hello. jar *. Classn Le decripteur doit contenir :¡ MIDlet-1: HelloMIDlet¡ MIDlet-Description: Ma première MIDlet¡ MIDlet-Jar-Size: 922¡ MIDlet-Jar-URL: FirstMIDlet.jar¡ MIDlet-Name: FirstMIDlet¡ MIDlet-Vendor: Sun Microsystems¡ MIDlet-Version: 1.0
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
30
59
Excuter la MIDletn midp
–classpath Hello.jar– descriptor Hello.Jad
n Les paramètres de la commande¡ -classpath <path> // directories and zip files to search¡ -descriptor <jad file> //MIDlet app descriptor file to use¡ -transient <url> <app_ name>
// run app_ name from descriptor at url¡ -autotest <url> <app_ name>
// repeatedly run application¡ -verbose // enable classloading information¡ -debug //enable debugging info¡ -help show thismessage
60
Variable d’exécution d’une MIDlet
2, 4, 8 pour 4, 16 ou 256 couleurs
1 (b/w)SCREEN_DEPTH
Utilisation du double tampon pour l’affichage
TrueDOUBLE_BUFFERING
Codage des caractères
NullENCODING
Classes utilisateursCLASSPATH
URL sur serveur proxy
NullHTTP_PROXY
DescriptionDéfautOption
J2MEJanvier 2001
Copyright Michel RIVEILL, Université de Nice, Janvier 2001
31
61
Environnement de développement MIDP
n <<à faire présenter les différents environnements de programmation J2ME>>
62
Principales bibliothèques
n UI (User Interface)n Réseau : connexion HTTPn Persistance : orientée enregistrementn Dans : java.util