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: gerdavax@gerdavax.it - web: http://www.gerdavax.it
GRAZIE CDC e Personal Profile: la piattaforma Java ME per dispositivi hi-end Stefano Sanna JUG Sardegna