CDC e Personal Profile:
la piattaforma Java ME per dispositivi hi-end
Stefano Sanna
JUG Sardegna
CDC e Personal Profile: la piattaforma Java ME per dispositivi hi-end
Abstract:
Java ME non è solo CLDC e MIDP: i dispositivi mobili ad alte prestazioni possono
avvalersi di una piattaforma Java completa, modulare ed estremamente potente.
CDC e Personal Profile sono i componenti più importanti di questa piattaforma
Requisiti: conoscenza base di Java SE e Java ME (CLDC/MIDP)
Agenda:
✔ CDC e i suoi profili: la nuova frontiera di Java ME
✔ CDC Platform:
✔ Microsoft Windows Mobile
✔ Nokia Series 80 (9300 e 9500)
✔ Sony-Ericsson CDC Platform 1 (P990 e M600)
✔ Savaje OS (GSPDA Jasper S20)
✔ Conclusioni e riferimenti
Java ME... ieri...
Java ME... oggi!
CDC, FP, PBP, PP: ecco la squadra!
✔ Parliamo della piattaforma Java ME rivolta a dispositivi con queste
caratteristiche hardware minime:
✔ ROM: minimo 512K
✔ RAM: minimo 256K
✔ Supporto connettività
✔ Implementazione completa di una Java Virtual Machine standard (così come definita
su “Java Virtual Machine Specification, 2nd Edition”)
✔ Rispetto al mondo MIDP, CDC e i relativi profili
costituiscono un ecosistema complesso e modulare:
✔ CDC: Connected Device Configuration
✔ FP: Foundation Profile
✔ PBP: Personal Basis Profile
✔ PP: Personal Profile
Personal
Profile
Personal
Basis
Profile
Foundation
Profile
CDC
Chi fa cosa
✔ CDC (JSR 36, JSR 218):
✔ Fornisce una VM compatibile J2SE, con un subset della libreria standard:
✔ java.lang, java.lang.ref, java.lang.reflect, java.math
✔ java.io, java.net, javax.microedition.io
✔ java.security, java.security.cert, java.text, java.util, java.util.jar, java.util.zip
✔ Foundation Profile (JSR 46, JSR 219):
✔ Completa i package forniti da CDC, per avere piena copertura della libreria standard
✔ Personal Basis Profile (JSR 129, JSR 217):
✔ Aggiunge il supporto base AWT per componenti lightweight e introduce il modello di
applicazioni basato su Xlet:
✔ java.awt, java.awt.event, java.awt.color, java.awt.image
✔ java.beans, java.rmi, java.rmi.registry (per Xlet)
✔ javax.microedition.xlet, javax.microedition.xlet.ixc
✔ Personal Profile (JSR 62, JSR 216):
✔ Completa il supporto AWT con i componenti nativi:
✔ java.applet, java.awt.datatransfer
CDC e PP
✔ Libreria standard molto ricca, sottoinsieme della Standard Edition (JSE 1.3 per
CDC/FP/PBP/PP 1.0 e JSE 1.4 per CDC/FP/PBP/PP 1.1, con l'esclusione delle
estensioni del linguaggio)
✔ Sfruttano le prestazioni dei palmari e degli smartphone di fascia alta (memoria,
file system, risorse native...)
✔ Supporto JNI: ciò che il runtime non offre può essere sviluppato ad hoc se
necessario
✔ Possibilità di usare componenti nativi e di utilizzare librerie grafiche diverse da
quella standard (HAVi, DVB, SWT, LWVCL...)
✔ GUI AWT, con qualche eccezione:
✔ La specifica precisa che alcune funzionalità sono dipendenti dalla piattaforma. In
alcuni casi l'invocazione di una certa funzionalità non produce alcun effetto, in altri
casi la VM solleva una eccezione.
✔ java.awt.Frame potrebbe non essere ridimensionabile né collocabile a piacere
sul display
✔ gestione eventi e colori possono avere limitazioni
✔ non tutte le restrizioni sono esplicite (getButton() su MouseEvent...)
Tre modelli applicativi
✔ Il top della gamma Java ME lascia ampia libertà allo sviluppatore, che può
scegliere il modello applicativo più opportuno:
✔ Stand-alone: il metodo main() costituisce l'entry point dell'applicazione
✔ Managed: le applicazioni implementano l'interfaccia Xlet, gestita a sua volta da un
XletManager, che riprende alcuni dei concetti delle MIDlet e, soprattutto, delle Xlet
inizialmente introdotte con Java TV
✔ Embedded: le applicazioni (Applet) sono eseguite all'interno dell'AppletViewer o di
browser opportunamente esteso
✔ Il modello applicativo scelto dipende dal dispositivo in uso!!!
Xlet e XletContext
✔ La Xlet è una managed application che interagisce con il runtime del dispositivo
attraverso un XletContext
✔ In particolare l'interazione si basa su:
✔ 4 callback per inizializzazione, avvio, sospensione e disattivazione definite
dall'interfaccia Xlet
✔ 6 metodi della classe XletContext per l'accesso al ClassLoader, al Container per la
gestione della GUI, la lettura delle property dell'applicazione e la notifica, da parte
della Xlet, del cambio di stato (paused/destroyed)
✔ Il modello Xlet è molto simile a quello incontrato in ambito MIDP, con alcune
importanti differenze:
✔ Xlet è una interfaccia da implementare, non una classe da estendere
✔ l'inizializzazione deve avvenire nel corpo del metodo initXlet e non nel costruttore
✔ i metodi per interagire con il runtime environment Java ME non fanno parte di Xlet ma
sono esposti dall'XletContext
Struttura di una Xlet
import javax.microedition.xlet.Xlet;
import javax.microedition.xlet.XletContext;
import javax.microedition.xlet.ixc.IxcRegistry;
public class HelloCDC implements Xlet {
private XletContext context;
public void initXlet(XletContext context) {
this.context = context;
}
public void startXlet() {
...
}
public void pauseXlet() { ... }
public void destroyXlet(boolean unconditional) { ... }
}
L'interfaccia grafica
deve essere creata qui
Quattro interpretazioni di CDC e Personal Profile
Windows Mobile
(Qtek 9090)
Symbian OS
(UIQ, Sony-Ericsson M600)
Symbian OS
(Series 80, Nokia 9300)
Savaje OS
(GSPDA Jasper S20)
Ambienti di sviluppo
Generic
(Windows Mobile)
Netbeans 5.0
Nokia Series 80
Platform SDK (PP)
Mobility Pack 5.0
for CDC
Nokia Series 80
P990
Ext Pkg
Sony-Ericsson
P990
M600
Ext Pkg
Sony-Ericsson
M600
Sony Ericsson CDC
Platform 1 Ext Pkg
Netbeans 5.5
Mobility Pack 5.5
for CDC
Java Toolkit
for CDC
Savaje OS
Microsoft Windows Mobile
✔ E' il sistema operativo più diffuso su dispositivi PDA: handhelds, PDA-phone,
navigatori satellitari, car-pc...
✔ Sono disponibili runtime environment compatibili CDC/PP:
✔ IBM WebSphere Everyplace Micro Environment
✔ http://www.ibm.com/developerworks/websphere/zones/wireless/weme_eval_runti
mes.html
✔ Esmertec JBed
✔ http://www.esmertec.com/
✔ NSICom CrE-ME 4.1
✔ http://www.nsicom.com/
✔ Mysaifu JVM (progetto open source!)
✔ http://www2s.biglobe.ne.jp/~dat/java/project/jvm/index_en.html
✔ Alcuni runtime non sono ben armonizzati con il sistema operativo:
✔ procedura di installazione macchinosa
✔ interfaccia utente incoerente rispetto al look& feel del dispositivo (due menù bar, tre
stili di pulsanti...)
IBM WebSphere Everyplace Micro Environment
✔ Supporta CDC 1.1 e Personal Profile 1.1, con modello applicativo stand-alone
✔ Offre un'ottima integrazione con la GUI del sistema operativo:
✔ solo Frame full-screen
✔ menù sulla status-bar
✔ supporto per il touchscreen
✔ Sviluppo:
✔ E' possibile utilizzare gli strumenti JSE, facendo attenzione ad utilizzare
esclusivamente librerie e funzionalità supportate
✔ Deployment:
✔ file JAR contenente le classi e le eventuali risorse
✔ script NOME_APP.lnk per l'avvio:
255#"\J9\PPRO11\bin\j9.exe" "-jcl:ppro11" "-cp" "\MyApp.jar" org.myself.MyApp
✔ Buon supporto JNI, che permette di estendere le funzionalità del runtime Java
JNI: oltre il runtime Java
✔ JNI permette di sfruttare le funzionalità native del dispositivo:
✔ accesso alle porte seriali
✔ accesso alle estensioni telefoniche
✔ integrazione con le applicazioni PIM
✔ Un caso comune: GPS Bluetooth
✔ è possibile delegare al sistema operativo il discovery dei dispositivi Bluetooth e la
creazione del device seriale
✔ attraverso JNI si accede a JavaComm e si legge lo stream NMEA contenente le
informazioni di localizzazione
✔ Implementazioni JavaComm per Windows Mobile:
✔ http://www.teilo.net/software/CEJavaComm/download.jsp
✔ http://www2s.biglobe.ne.jp/~dat/java/project/jvm/index_en.html
✔ http://www.rxtx.org
Java Comm e accesso a GPS Bluetooth
✔ Utilizzando l'implementazione Telio/CESerial, la procedura di installazione è:
✔ comm.jar + CESerial.jar: contengono le classi Java. Devono essere inclusi nel
classpath dell'applicazione
✔ commapi.dll: è la libreria a caricamento dinamico nativa. Deve essere copiata nella
directory \Windows
✔ javax.comm.properties: è il file contenente le property. Deve essere copiato nella
directory contentente i file JAR
✔ L'applicazione può ottenere una enumerazione delle porte disponibili:
Enumeration ports = CommPortIdentifier.getPortIdentifiers();
while (ports.hasMoreElements()) {
CommPortIdentifier id =
(CommPortIdentifier) ports.nextElement();
System.out.println("Port found: " + id.getName());
}
Windows Mobile: impostazioni della porta seriale Bluetooth
Windows Mobile: binding della porta seriale sul GPS Bluetooth
Windows Mobile: lo stream NMEA è nostro!
SerialPort port = (SerialPort)
CommPortIdentifier.getPortIdentifier("COM6:").open("WM5", 5000);
port.setSerialPortParams(4800, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
// 8N1@4800bps
BufferedReader buffer = new BufferedReader(new InputStreamReader(port.getInputStream()));
String sentence;
while((sentence = buffer.readLine()) != null) {
System.out.println(sentence);
}
Nokia Series 80
✔ Lo sviluppo è pressoché analogo a quello per Windows Mobile: il runtime Java è
infatti una versione custom di J9 per la serie Communicator
✔ Il modello applicativo è di tipo stand-alone ma affinché l'applicazione sia
riconosciuta dalla Java Virtual Machine è necessario che il Manifest del JAR file
contenga alcune informazioni accessorie:
Main-class: org.mycompany.MyApplicationMainClass
PproApp-Name: MyApplication
PproApp-Vendor: MyCompany
PproApp-Version: 0.0.1
✔ Senza queste informazioni l'applicazione non viene installata!
✔ Il processo di sviluppo può essere semplificato utilizzando:
✔ Netbeans 5.0
✔ Mobility Pack for CDC 5.0
✔ Nokia Series 80 Platform SDK for Symbian OS, for Java, Personal Profile
(http://www.forum.nokia.com/main/0,6566,034-367,00.html)
Il futuro: Netbeans 5.5, CDC Mobility Pack 5.5, Java Toolkit for CDC
✔ La nuova versione di Netbeans offre un miglior supporto allo sviluppo CDC:
✔ CDC Mobility Pack, per l'integrazione con custom developer platform (Series 80,
UIQ...)
✔ Integrazione con il Java Toolkit for CDC
✔ Uso di Matisse per lo sviluppo visuale delle interfacce grafiche basate sulla JSR 209
✔ Deployment su device Jasper S20
Sun Java Toolkit 1.0 for CDC
✔ E' il nuovo strumento base per lo sviluppo di applicazioni, Xlet e Applet per CDC
e i profili superiori
✔ E' basato sulla Netbeans Platform e, rispetto al Java Wireless Toolkit, offre una
migliore gestione dei progetti e un editor di testi base
✔ API supportate:
✔ Connected Device Configuration (CDC) 1.1 (JSR 218)
✔ Foundation Profile (FP) 1.1 (JSR 219) with Security Optional Package 1.0
✔ Personal Basis Profile (PBP) 1.1 (JSR 217)
✔ Personal Profile (PP) 1.1 (JSR 216)
✔ Advanced Graphic and User Interface Optional Package for the J2ME Platforn
(AGUI) 1.0 (JSR 209) (si tratta di una implementazione beta)
✔ L'Early Access version è disponibile presso:
http://java.sun.com/products/cdctoolkit/download-1_0-ea.html
Sun Java Toolkit 1.0 for CDC
Savaje OS
✔ Savaje OS porta una piccola grande rivoluzione nel mondo dei dispositivi mobili:
finalmente un terminale con sistema operativo interamente in Java e con una
ridottissima componente nativa (indispensabile per le funzionalità telefoniche, i
codec multimedia...)
http://www.savaje.com
✔ Lo sviluppo su Savaje si basa sugli strumenti più recenti (attualmente in beta o
preview) e supporta il modello applicativo Xlet
GSPDA Jasper S20
✔ E' il primo dispositivo equipaggiato con Savaje OS e rilasciato in una “Developer
Version 2006” all'ultima JavaOne
✔ Impressionante dotazione del runtime Java:
✔ CLDC 1.1, MIDP 2.0, JTWI, PIM/FileConnection API (JSR 75), Mobile Media API
(JSR 135), Mobile 3D Graphics (JSR 183), Wireless Messaging API 1.1 e 2.0 (JSR
120 e JSR 205), Bluetooth API (JSR 82), XML Parsing (JSR 172, senza il subset
JAX-RPC)
✔ CDC 1.1, Foundation Profile, Personal Basis Profile,
Advanced Multimedia Supplements (JSR 234),
JAIN Presence e Instant Messaging (JSR 186-187),
Security and Trust Services API (JSR 177)
e Advanced Graphics and User Interface
Optional Package (JSR 209)
✔ CLDC e CDC condividono lo stesso
runtime e la configurazione hi-end
può avvantaggiarsi delle API opzionali
normalmente riservate alla
configurazione consumer (BT, WMA,
WSA...)!
Sviluppo per Savaje OS
✔ Per sviluppare applicazioni per Jasper S20 occorre:
✔ Netbeans 5.5 + Mobility Pack for CDC 5.5
✔ per il supporto ai progetti CDC e la gestione dei toolkit e SDK
✔ Java Toolkit for CDC
✔ per il supporto JSR 209 indispensabile per lo sviluppo della GUI
✔ per l'emulatore CDC/PP
✔ Class Library Savaje (SavajeDeveloper.jar)
✔ necessaria per compilare le applicazioni che utilizzano
funzionalità native del dispositivo o API opzionali
del profilo MIDP
✔ Netbeans 5.5 supporta il deployment completo sul dispositivo:
✔ l'applicazione è distribuita in bundle, contentente il bytecode e il file JNLP per l'avvio
della main class
✔ il bundle è copiato via USB-storage sul dispositivo
✔ Documentazione e risorse: http://www.savaje.com
Alcune cose da ricordare...
✔ Prima di intraprendere lo sviluppo di una applicazione basata su CDC è
importante tenere in considerazioni alcuni aspetti critici:
✔ Modello applicativo
✔ i tre modelli (stand-alone, Xlet e Applet) non sono contemporaneamente
supportati da tutti i dispositivi
✔ Deployment
✔ dispositivi diversi supportano modalità di deployment diverse e incompatibili tra
loro (si pensi alla differenza tra Windows Mobile e Savaje)
✔ Interfaccia utente
✔ è raccomandato l'uso di layout dinamici (BorderLayout, GridLayout...) perché
dimensioni e orientamento dei display possono variare notevolmente (si pensi
alla differenza tra Nokia 9300 e Qtek 9090)
✔ l'interfaccia potrebbe prevedere l'uso di un touchscreen
✔ la presenza della JSR 209 non implica la presenza di AWT!!! Ad esempio, Jasper
S20 include il supporto (parziale) a Swing ma non dispone dei componenti nativi
AWT inclusi nel Personal Profile: una applicazione scritta per Windows Mobile
non può funzionare su Savaje OS senza la riscrittura della GUI
Conclusioni
✔ Il mercato dei dispositivi hi-end è ricco e in crescita:
✔ hardware potente, flessibile, con grandi display, connettività completa
✔ sistemi operativi più robusti e completi nelle funzionalità di connettività e gestione dati
✔ si diffonde la “cultura della connettività in movimento” e gli utenti cominciano ad
apprezzare la possibilità di poter consultare la posta, chattare con gli amici, accedere
al web e ad altre risorse personali in qualunque luogo e in qualunque momento
✔ Java ME è una tecnologia matura per sfruttare appieno questo mercato:
✔ CDC, profili correlati ed API opzionali formano una piattaforma potente e modulare
per la realizzazione di applicazioni complesse e scalabili: le limitazioni di CLDC ed
MIDP sono un ricordo!
✔ Gli ambienti di sviluppo si integrano perfettamente con gli SDK forniti dai produttori
dei dispositivi e permettono di migliorare notevolmente la qualità del lavoro svolto
✔ Manca una base di conoscenza ampia e collaudata come quella di CLDC/MIDP:
a noi sviluppatori è richiesto di condividere la nostra esperienza, proporre
best practice e pattern per trarre massimo vantaggio da questa potente
piattaforma e attirare nuovi sviluppatori e nuove idee
Riferimenti
✔ Specifiche e documentazione:
✔ CDC e profili superiori: http://java.sun.com/javame/overview.html
✔ Netbeans + Mobility Pack: http://www.netbeans.org/kb/50/mobilitycdc.html
✔ Strumenti:
✔ Netbeans: http://www.netbeans.org
✔ IBM WEME: http://www.ibm.com/developerworks/websphere/zones/wireless
✔ Nokia: http://www.forum.nokia.com
✔ Sony-Ericsson: http://developer.sonyericsson.com
✔ UIQ: http://www.uiq.com
✔ Savaje: http://www.savaje.com
✔ La community italiana: Java Mobile Developers Forum
✔ http://jmdf.java2me.org
✔ Chi vi parla... :-)
✔ email: [email protected]
-
web: http://www.gerdavax.it
GRAZIE
CDC e Personal Profile:
la piattaforma Java ME per dispositivi hi-end
Stefano Sanna
JUG Sardegna