Asynchronous Java ME and XML

2,487 views

Published on

How to make a Java ME application that uses the AJAX communication model

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,487
On SlideShare
0
From Embeds
0
Number of Embeds
60
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Insert your notes here.
  • Asynchronous Java ME and XML

    1. 1. Lo Asynchronous Java ME and XML Andrea Castello http://javame-cinghius.blogspot.com [email_address]
    2. 2. Sommario (1) - Dal Web al Web 2.0 - Dal WML agli Smart Client - Ajax, Comet: modelli applicativi - Java ME: visione d'insieme e specifiche MSA (JSR-248)
    3. 3. <ul><li>Sommario (2) </li></ul><ul><li>- UI in Java ME: Item di sistema </li></ul><ul><li>e Canvas </li></ul><ul><li>- Applicazione “Blogger feed search” </li></ul><ul><ul><ul><ul><li>Elementi base: UI </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Connessione HTTP asincrona </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Parsing XML con KXML e KDOM. </li></ul></ul></ul></ul>- Mobile e modello asincrono: conclusioni (provvisorie...)
    4. 4. <ul><li>Un insieme di documenti ipertestuali indipendenti e servizi isolati. </li></ul><ul><li>Approcio “standalone” allo sviluppo delle applicazioni. </li></ul><ul><li>Differenza più netta tra produttori e consumatori di informazioni rispetto a quella odierna. </li></ul>L'evoluzione: dal Web...
    5. 5. ...al Web 2.0 <ul><li>“ Il web è una piattaforma” (T. O'Reilly), un ecosistema di servizi interdipendenti. </li></ul><ul><li>Approcio allo sviluppo più “community oriented” rispetto al passato. </li></ul><ul><li>Il motore: web services, Ajax, Comet, Representational State Transfer (REST)... </li></ul><ul><li>I frutti: WebOS, Mashup services, “Widget services”: programmatori indipendenti contribuiscono a creare servizi e contenuti. </li></ul>
    6. 6. - Cosa è veramente? Difficile identificarlo monoliticamente. - T. O'Reilly (sett 05): Napster fa parte del Web 2.0!! - Vera innovazione E fenomeno di marketing. - Approcio decentralizzato : nuovo sistema di vedere il web come mezzo di comunicazione. I fatti: nuovi servizi vengono creati continuamente: (Google Maps, Suggest, Writely, Widgets/Widsets, feed readers, Flickr, YouTube, Blogger) anche in versione “ Mashup ” (combinata), spesso in beta. Web 2.0: una considerazione
    7. 7. Web 2.0: mashup API matrix <ul><li>328 API disponibili = infinite combinazioni possibili </li></ul><ul><li>Crescita media 1 nuova API al giorno! </li></ul>
    8. 8. Utenti internet 1999 (stima) - >=90% connessi dial up fino a 56 kbit/sec - <=10% connessi ADSL fino a 640 kbit/sec 2004 (Nielsen/ NetRatings) - ~47% utenti italiani connessi ad alta velocità (7,9 mln, <13% della popolazione). La banda larga è stata essenziale per la diffusione dei servizi “Web 2.0” Web 2.0: more bandwidth, please!!
    9. 9. “ Sistema operativo” browser-based (Web OS) con molte funzionalità Mix di Ajax, Flash, Java Applet (Port scanner, FTP client, Paint) Web 2.0: EyeOS
    10. 10. Evoluzione mobile (1): WML su WAP <ul><li>“ Pagine” di max 512bytes in b/n. </li></ul><ul><li>Supporto per le sole immagini WBMP. </li></ul><ul><li>Banda molto ristretta </li></ul><ul><li>Sistema punta-e-clicca mutuato dal web. </li></ul><ul><li>Tariffazione a tempo (costosissima! Si arrivava a pagare oltre 1000 lire/pagina) rendevano il traffico dati più costoso degli SMS! </li></ul>Risultato: insuccesso clamoroso!
    11. 11. Evoluzione mobile (2a): M-sites <ul><li>Evoluzione del modello precedente </li></ul><ul><li>Abbandono di WML per altri linguaggi di Markup: </li></ul><ul><li>- cHTML (su I-mode) </li></ul><ul><li>- HTML (spesso sottoinsiemi) </li></ul><ul><li>- XHTML </li></ul><ul><li>Tariffazione a consumo, a “slot” o – più raramente - flat. </li></ul><ul><li>Diffusi grazie alla maggiore ampiezza di banda (GPRS, EDGE, UMTS...) </li></ul><ul><li>Pensati per browser con supporto Javascript parziale o assente . </li></ul>
    12. 12. Evoluzione mobile (2): Mobile Ajax <ul><li>Nato dal successo delle applicazioni Web 2.0 </li></ul><ul><li>Supportato ed incoraggiato da Opera con il suo browser Opera Mobile 8.65 </li></ul><ul><li>Base di sviluppatori potenzialmente enorme (si basa su tecniche analoghe a quelle di Ajax nel Web) </li></ul><ul><li>Permette la creazione di servizi “mashup” (ma non è l'unico!) </li></ul><ul><li>Frammentazione: esistono molti browser con differenti gradi di supporto del Javascript. </li></ul><ul><li>Non supporta accesso diretto a funzioni native del dispositivo (Bluetooth, File System...) </li></ul>(Asynchronous Javascript and XML)
    13. 13. Evoluzione mobile (2c): Java ME <ul><li>Piattaforma “general purpose” </li></ul><ul><li>Attualmente è la piattaforma mobile dominante (oltre 1 mld di installazioni nel mondo). </li></ul><ul><li>Grande base di sviluppatori (circa 4 milioni nel mondo). </li></ul><ul><li>Microedition: non è solo telefoni cellulari! </li></ul><ul><li>Frammentazione: il detto “write once, run everywhere” sul mobile non è sempre vero! </li></ul><ul><li>Diffusione eterogenea delle API “opzionali” </li></ul>(Java Micro Edition)
    14. 14. Mobile 2.0 non è Mobile Web 2.0! <ul><li>Il Mobile Web 2.0 è una delle molte opzioni! </li></ul><ul><li>Caratteristica del Mobile 2.0 è proprio il rinnovato interesse per il medium e la nascita di nuove tecnologie! </li></ul><ul><li>Java ME, Mobile Ajax, Flash Lite, Python, .NET CF, Symbian C++: Mobile 2.0 è poter fare la scelta tecnologica più comoda per la risoluzione di un nuovo problema/opportunità: la mobilità. </li></ul>
    15. 15. Ajax: il modello applicativo
    16. 16. Oltre Ajax: il modello Comet <ul><li>Connessione HTTP sempre </li></ul><ul><li>aperta </li></ul><ul><li>Push di dati quando si </li></ul><ul><li>verificano eventi dal server </li></ul><ul><li>Attualmente poco </li></ul><ul><li>utilizzabile nel mobile a </li></ul><ul><li>causa delle politiche di </li></ul><ul><li>rete di alcuni operatori. </li></ul>
    17. 17. Java ME: visione d'insieme
    18. 18. Mobile Service Architecture (JSR-248) <ul><li>Non è una API . Amplia il raggio d'azione della JTWI per limitare la frammentazione delle API . </li></ul><ul><li>Definizione di un insieme di librerie Java ME che i produttori di dispositivi DEVONO implementare se vogliono essere conformi alla specifica. </li></ul><ul><li>Aggrega intorno alla combinazione CDLC – MIDP ben 14 API “opzionali” (grafica 2D e 3D, wireless messaging, Bluetooth, Web services, multimedia, sicurezza, pagamenti, etc.) </li></ul><ul><li>Final approval ballot il 16/10/2006. </li></ul><ul><li>In preparazione anche la MSA basata su CDC </li></ul>
    19. 19. UI in Java ME: approcio hi-level PRO CONTRO <ul><li>Resa della UI delegata all'implementazione del dispositivo. </li></ul><ul><li>Eventi di interazione gestiti dal dispositivo (comandi, scolling dei componenti) </li></ul><ul><li>Portabilità (da prendere con le molle!) </li></ul><ul><li>Accesso funzioni native dispositivo (es: T9) </li></ul><ul><li>Look and feel dei componenti predefinito dal sistema. </li></ul><ul><li>Non può controllare i singoli tasti del device. </li></ul>
    20. 20. UI in Java ME: approcio low-level PRO CONTRO <ul><li>Look and feel libero e platform-indipendent </li></ul><ul><li>Gestione input customizzabile (pressione e </li></ul><ul><li>rilascio tasti, trascinamento stilo, etc.). </li></ul><ul><li>Minore portabilità </li></ul><ul><li>Non accede a gestione input nativa </li></ul>
    21. 21. Blogger feed search: l'ispirazione...
    22. 22. Blogger feed search: caratteristiche <ul><li>Canvas con repaint ciclico. </li></ul><ul><li>HTTP GET asincrone. </li></ul><ul><li>XML parsing basato su KDOM </li></ul><ul><li>Funzioni: </li></ul><ul><li>Scaricamento e lettura di un feed </li></ul><ul><li>Ricerca dinamica tra i titoli dei post </li></ul>
    23. 23. Blogger feed search: la struttura MainMenu <ul><li>Scarica </li></ul><ul><li>Cerca </li></ul><ul><li>Esci </li></ul>Schermata di scaricamento dell'intero feed
    24. 24. Bfs: estendiamo GameCanvas final public void run(){ [...] // Gestione tasti in modalità “gaming” if (gameKeyEventsEnabled){ handleGamingKeys(); } // “Invita” a ridisegnare lo schermo con //le relative modifiche grafiche. repaint(0, 0, width, height); // Obbliga ad eseguire immediatamente // qualunque richiesta di repaint // ancora in attesa. serviceRepaints(); [...] }
    25. 25. <ul><ul><li>Display.callSerially(Runnable r) </li></ul></ul><ul><ul><ul><ul><li>Non bloccante. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Può essere lento e in alcune implementazioni bacato. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>In molte implementazioni crea un nuovo thread. </li></ul></ul></ul></ul><ul><ul><li>Canvas.serviceRepaints() </li></ul></ul><ul><ul><ul><li>Bloccante , deve attendere la terminazione di paint() di cui ha </li></ul></ul></ul><ul><ul><ul><li>forzato l'esecuzione. </li></ul></ul></ul><ul><ul><ul><li>Può essere causa di deadlock , se paint() è chiamato da un </li></ul></ul></ul><ul><ul><ul><li>thread differente ed a questo serve un lock acquisito dal thread </li></ul></ul></ul><ul><ul><ul><li>di serviceRepaints! </li></ul></ul></ul>serviceRepaints() vs callSerially()
    26. 26. Bfs: considerazioni sul disegno ciclico <ul><li>Non conviene un ciclo continuo. </li></ul><ul><li>Nel run() conviene limitare il numero di cicli di disegno in base alla famiglia di dispositivi scelti. Per fare questo, ad ogni ciclo, usiamo il metodo wait() </li></ul><ul><li>Nokia serie 60 (tutti), Nokia serie 40 3 rd edition: 15-18 refresh al secondo. </li></ul><ul><li>Nokia serie 40 1 st e 2 nd edition: 8-10 refresh/sec </li></ul>
    27. 27. Bfs: connessioni Http asincrone <ul><li>Modello sincrono : evento “submit” --> connessione </li></ul><ul><li>Modello asincrono : uno o più eventi del normale flusso d'uso dell'applicazione fungono da segnale (implicito) per l'avvio della connessione, che verrà effettuata secondo politiche prestabilite. </li></ul>// Ammettendo di inviare richieste sempre allo // stesso URL, usiamo un vettore per i parametri // della richiesta private Vector queryStrings = new Vector(); // Vettore delle classi che gestiranno la response HTTP private Vector listeners = new Vector(); <ul><li>Connessione in un thread separato per </li></ul><ul><li>non bloccare l'applicazione. </li></ul><ul><li>Proprietà fondamentali di HttpGet.java: </li></ul>
    28. 28. HttpGet: dentro il run() synchronized ( this ){ // Se non vi sono richieste pendenti si aspetta... while (queryStrings.size() == 0){ try { wait(); } catch (InterruptedException e){ } [...] } request = (String)(queryStrings.elementAt(0)); listener = (ConnectionListener)listeners.elementAt(0); [...] } sendRequest(request, listener); sendRequest effettua la connessione vera e propria. Il listener è la classe che gestisce i dati della response HTTP
    29. 29. HttpGet: la connessione try{ conn = (HttpConnection)Connector.open(url+request); conn.setRequestMethod(HttpConnection.GET); in = conn.openDataInputStream(); rc = conn.getResponseCode(); if (rc != HttpConnection.HTTP_OK){ // gestione errore... } if(!errorOccurred){ listener.handleData(in); } } catch (Exception e){ [...] } finally{ // chiusura connessione... }
    30. 30. Blogger feed search: il listener <ul><li>SearchScreen </li></ul><ul><li>E' listener della HttpGet </li></ul><ul><li>Implementa l'interfaccia per la gestione </li></ul><ul><li>delle schermate (disegno, input) </li></ul><ul><li>Nei PDA implementa un'interfaccia per </li></ul><ul><li>gestione dello stilo (Pointable). </li></ul>
    31. 31. XML parsing: modalità <ul><li>SAX (push): legge porzioni di documento generando </li></ul><ul><li>eventi come inizio e fine di un documento, elemento o attributo. </li></ul><ul><li>PULL: simile a SAX ma gli eventi sono generati in corrispondenza </li></ul><ul><li>di un avanzamento determinato dalla chiamata di metodi (es: </li></ul><ul><li>parser.nextTag() ) </li></ul><ul><li>DOM: Crea in memoria un'alberatura che descrive l'intero </li></ul><ul><li>documento. </li></ul><ul><li>Es: element.getAttribute(name); </li></ul><ul><li>Pull e SAX: bassa occupazione di memoria. </li></ul><ul><li>DOM: elevato consumo di memoria, maggiore facilità d'uso. </li></ul>
    32. 32. XML con Java ME: la liberia Kxml 2 <ul><li>Fornisce classi per parsing in modalità pull e DOM </li></ul><ul><li>Versione attuale 2.3 (43KB) </li></ul><ul><li>Esiste in versione “minimale” (~10KB) </li></ul><ul><li>Package Kdom basato su tre elementi: Document,Node, </li></ul><ul><li>Element </li></ul>// Creo il parser e imposto l'input stream ricevuto // dalla response HTTP. KXmlParser parser = new KXmlParser(); parser.setInput(is, &quot;UTF-8&quot;); // Elemento che rappresenta il documento. Document doc = new Document(); try { doc.parse( parser ); } catch (Exception ex) { // gestione errore } I Inizializzazione di un parser DOM
    33. 33. XML parsing: esempio (1)
    34. 34. XML parsing: esempio (2)
    35. 35. Mettiamo tutto insieme! (o quasi...)
    36. 36. Blogger feed search: il risultato! ...su emulatore (SE W810i) e dispositivo reale (Nokia 6600)
    37. 37. Blogger feed search: le criticità <ul><li>User input: problema della pressione multipla dei tasto </li></ul><ul><li>Usabilità e banda: va sacrificato qualche dispositivo! </li></ul><ul><li>Layout: affrontare le problematiche dovute alle </li></ul><ul><li>dimensioni del display </li></ul>
    38. 38. Modello asincrono: le prestazioni ¹: dato influenzato da prima autorizzazione dell'utente *: necessaria ogni volta un'autorizzazione dell'utente
    39. 39. Conclusioni: lavorare per il futuro (prossimo...) <ul><li>Mobile 2.0: le tecnologie ci sono! (e Java ME gode di </li></ul><ul><li>ottima salute) </li></ul><ul><li>Affrontare la mobilità richiede conoscenza del medium e </li></ul><ul><li>dei suoi utilizzatori. </li></ul><ul><li>Da Web 2.0 a Mobile 2.0: prudenza nei “porting”! </li></ul><ul><li>Mobilità: (è anche) accesso diretto ad audio, connettività locale </li></ul><ul><li>e remota, fotocamera, GPS. Applicazioni pensate in termini </li></ul><ul><li>“ ambientali”. </li></ul><ul><li>La banda “larga” per cellulari non corre come l'innovazione. </li></ul>
    40. 40. Conclusioni: cosa fanno gli operatori? <ul><li>Necessità di affrontare il Mobile Digital Divide: la </li></ul><ul><li>copertura UMTS è ancora molto insufficiente ! </li></ul><ul><li>Mobile 2.0 e HDSPA (High Speed Downlink </li></ul><ul><li>Packet Access) è una coppia vincente? </li></ul><ul><ul><ul><ul><li>Max 5,4 Mbit/sec teorici, 500 Kbit - 1,5Mbit/sec </li></ul></ul></ul></ul><ul><ul><ul><ul><li>secondo le rilevazioni sperimentali di Motorola. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Manca ancora di copertura (per ora solo Roma) </li></ul></ul></ul></ul><ul><li>Tariffe non competitive e mercato immaturo sono legati </li></ul><ul><li>(“flat”, where are you?) </li></ul><ul><li>L'alternativa Wi-Fi potrebbe smuovere il mercato... </li></ul>
    41. 41. Postilla: Java open, Java free <ul><li>13/11/2006: Java (SE & ME) distribuita sotto GPL </li></ul><ul><li>Potenziale espansione di sviluppatori, aziende coinvolte, </li></ul><ul><li>piattaforme coinvolte </li></ul><ul><li>Java ME: enorme potenziale per dispositivi “adatti” ma </li></ul><ul><li>che non offrono ancora supporto (es: Nokia 770, </li></ul><ul><li>Sony PSP, lettori Mp3, navigatori GPS, storage </li></ul><ul><li>multimediali...) </li></ul>Il recordman : il 14/11/06 un programamtore tedesco mette a disposizione la sua versione alfa (solo console testuale) di una KVM per PSP!
    42. 42. Grazie per l'attenzione.

    ×