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