Your SlideShare is downloading. ×
Asynchronous Java ME and XML
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Asynchronous Java ME and XML

2,156

Published on

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

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,156
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Insert your notes here.
  • Transcript

    • 1. Lo Asynchronous Java ME and XML Andrea Castello http://javame-cinghius.blogspot.com [email_address]
    • 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.
      • Sommario (2)
      • - UI in Java ME: Item di sistema
      • e Canvas
      • - Applicazione “Blogger feed search”
            • Elementi base: UI
            • Connessione HTTP asincrona
            • Parsing XML con KXML e KDOM.
      - Mobile e modello asincrono: conclusioni (provvisorie...)
    • 4.
      • Un insieme di documenti ipertestuali indipendenti e servizi isolati.
      • Approcio “standalone” allo sviluppo delle applicazioni.
      • Differenza più netta tra produttori e consumatori di informazioni rispetto a quella odierna.
      L'evoluzione: dal Web...
    • 5. ...al Web 2.0
      • “ Il web è una piattaforma” (T. O'Reilly), un ecosistema di servizi interdipendenti.
      • Approcio allo sviluppo più “community oriented” rispetto al passato.
      • Il motore: web services, Ajax, Comet, Representational State Transfer (REST)...
      • I frutti: WebOS, Mashup services, “Widget services”: programmatori indipendenti contribuiscono a creare servizi e contenuti.
    • 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. Web 2.0: mashup API matrix
      • 328 API disponibili = infinite combinazioni possibili
      • Crescita media 1 nuova API al giorno!
    • 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. “ 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. Evoluzione mobile (1): WML su WAP
      • “ Pagine” di max 512bytes in b/n.
      • Supporto per le sole immagini WBMP.
      • Banda molto ristretta
      • Sistema punta-e-clicca mutuato dal web.
      • Tariffazione a tempo (costosissima! Si arrivava a pagare oltre 1000 lire/pagina) rendevano il traffico dati più costoso degli SMS!
      Risultato: insuccesso clamoroso!
    • 11. Evoluzione mobile (2a): M-sites
      • Evoluzione del modello precedente
      • Abbandono di WML per altri linguaggi di Markup:
      • - cHTML (su I-mode)
      • - HTML (spesso sottoinsiemi)
      • - XHTML
      • Tariffazione a consumo, a “slot” o – più raramente - flat.
      • Diffusi grazie alla maggiore ampiezza di banda (GPRS, EDGE, UMTS...)
      • Pensati per browser con supporto Javascript parziale o assente .
    • 12. Evoluzione mobile (2): Mobile Ajax
      • Nato dal successo delle applicazioni Web 2.0
      • Supportato ed incoraggiato da Opera con il suo browser Opera Mobile 8.65
      • Base di sviluppatori potenzialmente enorme (si basa su tecniche analoghe a quelle di Ajax nel Web)
      • Permette la creazione di servizi “mashup” (ma non è l'unico!)
      • Frammentazione: esistono molti browser con differenti gradi di supporto del Javascript.
      • Non supporta accesso diretto a funzioni native del dispositivo (Bluetooth, File System...)
      (Asynchronous Javascript and XML)
    • 13. Evoluzione mobile (2c): Java ME
      • Piattaforma “general purpose”
      • Attualmente è la piattaforma mobile dominante (oltre 1 mld di installazioni nel mondo).
      • Grande base di sviluppatori (circa 4 milioni nel mondo).
      • Microedition: non è solo telefoni cellulari!
      • Frammentazione: il detto “write once, run everywhere” sul mobile non è sempre vero!
      • Diffusione eterogenea delle API “opzionali”
      (Java Micro Edition)
    • 14. Mobile 2.0 non è Mobile Web 2.0!
      • Il Mobile Web 2.0 è una delle molte opzioni!
      • Caratteristica del Mobile 2.0 è proprio il rinnovato interesse per il medium e la nascita di nuove tecnologie!
      • 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à.
    • 15. Ajax: il modello applicativo
    • 16. Oltre Ajax: il modello Comet
      • Connessione HTTP sempre
      • aperta
      • Push di dati quando si
      • verificano eventi dal server
      • Attualmente poco
      • utilizzabile nel mobile a
      • causa delle politiche di
      • rete di alcuni operatori.
    • 17. Java ME: visione d'insieme
    • 18. Mobile Service Architecture (JSR-248)
      • Non è una API . Amplia il raggio d'azione della JTWI per limitare la frammentazione delle API .
      • Definizione di un insieme di librerie Java ME che i produttori di dispositivi DEVONO implementare se vogliono essere conformi alla specifica.
      • Aggrega intorno alla combinazione CDLC – MIDP ben 14 API “opzionali” (grafica 2D e 3D, wireless messaging, Bluetooth, Web services, multimedia, sicurezza, pagamenti, etc.)
      • Final approval ballot il 16/10/2006.
      • In preparazione anche la MSA basata su CDC
    • 19. UI in Java ME: approcio hi-level PRO CONTRO
      • Resa della UI delegata all'implementazione del dispositivo.
      • Eventi di interazione gestiti dal dispositivo (comandi, scolling dei componenti)
      • Portabilità (da prendere con le molle!)
      • Accesso funzioni native dispositivo (es: T9)
      • Look and feel dei componenti predefinito dal sistema.
      • Non può controllare i singoli tasti del device.
    • 20. UI in Java ME: approcio low-level PRO CONTRO
      • Look and feel libero e platform-indipendent
      • Gestione input customizzabile (pressione e
      • rilascio tasti, trascinamento stilo, etc.).
      • Minore portabilità
      • Non accede a gestione input nativa
    • 21. Blogger feed search: l'ispirazione...
    • 22. Blogger feed search: caratteristiche
      • Canvas con repaint ciclico.
      • HTTP GET asincrone.
      • XML parsing basato su KDOM
      • Funzioni:
      • Scaricamento e lettura di un feed
      • Ricerca dinamica tra i titoli dei post
    • 23. Blogger feed search: la struttura MainMenu
      • Scarica
      • Cerca
      • Esci
      Schermata di scaricamento dell'intero feed
    • 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.
        • Display.callSerially(Runnable r)
            • Non bloccante.
            • Può essere lento e in alcune implementazioni bacato.
            • In molte implementazioni crea un nuovo thread.
        • Canvas.serviceRepaints()
          • Bloccante , deve attendere la terminazione di paint() di cui ha
          • forzato l'esecuzione.
          • Può essere causa di deadlock , se paint() è chiamato da un
          • thread differente ed a questo serve un lock acquisito dal thread
          • di serviceRepaints!
      serviceRepaints() vs callSerially()
    • 26. Bfs: considerazioni sul disegno ciclico
      • Non conviene un ciclo continuo.
      • 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()
      • Nokia serie 60 (tutti), Nokia serie 40 3 rd edition: 15-18 refresh al secondo.
      • Nokia serie 40 1 st e 2 nd edition: 8-10 refresh/sec
    • 27. Bfs: connessioni Http asincrone
      • Modello sincrono : evento “submit” --> connessione
      • 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.
      // 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();
      • Connessione in un thread separato per
      • non bloccare l'applicazione.
      • Proprietà fondamentali di HttpGet.java:
    • 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. 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. Blogger feed search: il listener
      • SearchScreen
      • E' listener della HttpGet
      • Implementa l'interfaccia per la gestione
      • delle schermate (disegno, input)
      • Nei PDA implementa un'interfaccia per
      • gestione dello stilo (Pointable).
    • 31. XML parsing: modalità
      • SAX (push): legge porzioni di documento generando
      • eventi come inizio e fine di un documento, elemento o attributo.
      • PULL: simile a SAX ma gli eventi sono generati in corrispondenza
      • di un avanzamento determinato dalla chiamata di metodi (es:
      • parser.nextTag() )
      • DOM: Crea in memoria un'alberatura che descrive l'intero
      • documento.
      • Es: element.getAttribute(name);
      • Pull e SAX: bassa occupazione di memoria.
      • DOM: elevato consumo di memoria, maggiore facilità d'uso.
    • 32. XML con Java ME: la liberia Kxml 2
      • Fornisce classi per parsing in modalità pull e DOM
      • Versione attuale 2.3 (43KB)
      • Esiste in versione “minimale” (~10KB)
      • Package Kdom basato su tre elementi: Document,Node,
      • Element
      // 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. XML parsing: esempio (1)
    • 34. XML parsing: esempio (2)
    • 35. Mettiamo tutto insieme! (o quasi...)
    • 36. Blogger feed search: il risultato! ...su emulatore (SE W810i) e dispositivo reale (Nokia 6600)
    • 37. Blogger feed search: le criticità
      • User input: problema della pressione multipla dei tasto
      • Usabilità e banda: va sacrificato qualche dispositivo!
      • Layout: affrontare le problematiche dovute alle
      • dimensioni del display
    • 38. Modello asincrono: le prestazioni ¹: dato influenzato da prima autorizzazione dell'utente *: necessaria ogni volta un'autorizzazione dell'utente
    • 39. Conclusioni: lavorare per il futuro (prossimo...)
      • Mobile 2.0: le tecnologie ci sono! (e Java ME gode di
      • ottima salute)
      • Affrontare la mobilità richiede conoscenza del medium e
      • dei suoi utilizzatori.
      • Da Web 2.0 a Mobile 2.0: prudenza nei “porting”!
      • Mobilità: (è anche) accesso diretto ad audio, connettività locale
      • e remota, fotocamera, GPS. Applicazioni pensate in termini
      • “ ambientali”.
      • La banda “larga” per cellulari non corre come l'innovazione.
    • 40. Conclusioni: cosa fanno gli operatori?
      • Necessità di affrontare il Mobile Digital Divide: la
      • copertura UMTS è ancora molto insufficiente !
      • Mobile 2.0 e HDSPA (High Speed Downlink
      • Packet Access) è una coppia vincente?
            • Max 5,4 Mbit/sec teorici, 500 Kbit - 1,5Mbit/sec
            • secondo le rilevazioni sperimentali di Motorola.
            • Manca ancora di copertura (per ora solo Roma)
      • Tariffe non competitive e mercato immaturo sono legati
      • (“flat”, where are you?)
      • L'alternativa Wi-Fi potrebbe smuovere il mercato...
    • 41. Postilla: Java open, Java free
      • 13/11/2006: Java (SE & ME) distribuita sotto GPL
      • Potenziale espansione di sviluppatori, aziende coinvolte,
      • piattaforme coinvolte
      • Java ME: enorme potenziale per dispositivi “adatti” ma
      • che non offrono ancora supporto (es: Nokia 770,
      • Sony PSP, lettori Mp3, navigatori GPS, storage
      • multimediali...)
      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. Grazie per l'attenzione.

    ×