Java Micro Edition è un testo dalle grandi premesse, anche se di piccole dimensioni. Sfogliando rapidamente le pagine si ha un'impressione che viene confermata durante la lettura: i listati di codice sono scritti con un font abbastanza grande e leggibile, ci sono molte immagini e, soprattutto, la disposizione del testo è molto concentrata, quasi a non lasciare spazi nella pagina, se non i minimi margini sui bordi.
Informandosi sull'autore,
Stefano Sanna, si possono trovare in Rete varie risorse e riferimenti al suo lavoro come sviluppatore, consulente e articolista, oltre al proprio blog
Gerdavax in cui, tra l'altro,
dedica una pagina al proprio testo, con un'introduzione ad esso, i link alle librerie in cui acquistarlo, i sorgenti da scaricare e una minuscola
errata corrige.
Con queste premesse e consci di non avere tra le mani un testo per novellini, che richiede quantomeno una sufficiente esperienza di sviluppo con Java SE o con un linguaggio OOP, si può partire alle lettura degli undici capitoli, dopo una piccola introduzione al testo e al mondo ME di Java. Il
primo capitolo continua dall'anteprima del mondo Java ME, andando verso una sua esposizione adeguatamente dettagliata: parla del
Community process alla base ,delle specifiche vere e proprie e della
Device fragmentation dovuta soprattutto alle differenti configurazioni hardware dei vari dispositivi. Si parla, infatti, anche di
Configurazioni e
Profili, e soprattutto del fatto che nonostante Java ME sia diventato sinonimo di "Java per cellulari"; in realtà esistono sul mercato diversi dispositivi — anche controllori — che fanno uso di questa tecnologia per la gestione dell'hardware.
E proprio a proposito di
Configurazioni e
Profili il
secondo capitolo,
Mobile Information Device Profile, mette in chiaro su cosa si baserà il testo: CLDC e MIDP. Si affrontano le differenze tra le varie versioni di MIDP e di come si possa parlare di esse riferendosi, ormai, alle
MIDlet. Il tutto si conclude con una sintesi del processo di sviluppo e dei vari metodi per il deploy dell'applicazione.
”Strumenti di sviluppo”, infatti, è il titolo del
terzo capitolo che, dopo aver introdotto il
WTK, ci parla dei plug-in per lo sviluppo mobile nei principali ambienti di sviluppo e dei vari SDK dedicati, messi a disposizione soprattutto dai vari produttori hardware.
Dopo questi tre capitoli, che possiamo considerare meramente introduttivi, si inizia a fare sul serio con una descrizione delle tematiche e dei concetti pratici alla base delle interfacce grafiche nel
quarto capitolo. Dal punto di vista puramente pratico viene esaminata la libreria
lcdui con un diagramma delle classi; vengono quindi passati in rassegna tutti i componenti — dalle immagini agli elementi del form, che si poggiano sulla grafica del telefono ospite, fino alle modalità e i componenti grafici a basso livello — e gli eventi su di essi. Un ultimo paragrafo si interessa, anche con un bell'esempio, di come intercettare l'input da dispositivi touch su una Dashboard.
Il
quinto capitolo affronta invece tre argomenti che, per quanto diversi possano sembrare, sono molto legati nella piattaforma in oggetto: I/O, multithreading e persistenza. Il primo concetto affrontato riguarda input e output con le relative classi, realizzato attraverso il
Generic Connection Framework e alle comunicazioni seriali wired e wireless, con l'esempio di una
MIDlet, che si connette ad un ricevitore GPS e calcola la posizione attuale. A tal proposito, per ottimizzare le prestazioni in fase di I/O e comunque da specifica, viene brevemente affrontata la tematica dell'esecuzione concorrente di più processi. Il tutto si conclude trattando il fondamentale discorso della persistenza dello stato o, in generale, di dati tramite il
Record Management System o la più potente API opzionale
FileConnection.
In copertina il testo ci suggerisce il suo tema portante: "Sviluppare applicazioni
network-oriented per telefoni cellulari e PDA" e, infatti, dal
sesto capitolo si iniziano ad affrontare le tematiche inerenti la connettività. Nello specifico, XML e Web Service, dopo aver discorso del
parsing di file XML, parla dei WS, di come realizzarli con NetBeans e della loro connessione ad essi da parte del client Java ME mediante le WS API, standard o eventuali alternative aperte.
Il
capitolo 7,
Networking, continua con il discorso dei WS (questa volta REST e non più SOAP) con un bell'esempio sull'utilizzo di
Stikkit, soffermandosi precedentemente sull'unica classe sicuramente disponibile con MIDP:
HttpConnection del GCF. Si parla, poi, di connessioni sia su UPD che su TCP con l'esempio di una chat avente client scritto su JAVA ME e server con SE. Un ultimo paragrafo riguarda la connessione con i già trattati
Sun SPOT.
L’
ottavo capitolo è dedicato alla messaggistica e inizia proprio con la discussione della
Wireless Messaging API 1.1 e di altre informazioni, come le porte di comunicazione riservate, con uno sguardo su come inviare e ricevere messaggi; come esempio viene realizzato un client SMS personalizzato. Si parla, inoltre, di altre API standard che permettono la realizzazione di un localizzatore GPS o l'attivazione di una
MIDlet via server.
Il
nono capitolo si concentra invece sul Bluetooth, uno dei punti di forza per quanto riguarda la connessione tra dispositivi. Dopo un'interessante panoramica sul protocollo e sulle possibilità offerte, si passa alla discussione delle API interessate. Si parla, poi, della scoperta di dispositivi e dei relativi servizi e di come effettuare le comunicazioni con L2CAP, RFCOMM e infine OBEX. Molto simpatico l'esempio in cui, con RFCOMM, si scrive un'applicazione Java ME in grado di pilotare gli input di un PC. Rimangono, infine, due brevi capitoli decisamente d'obbligo dopo la trattazione dei precedenti argomenti. Iniziamo con il
decimo capitolo che si occupa della sicurezza: vengono esaminati i limiti e i vincoli imposti da configurazione e profilo, esaminati nel testo, affrontando le tematiche dei certificati digitali e delle
Security And Trust Services API.
Il testo è concluso dall'
undicesimo capitolo: in queste poche paginette vengono fornite piccole ma utili informazioni su altre API opzionali, tra alcune per il networking e quelle per il multimedia e la grafica. Molto importanti sono anche alcune tra le varie introduzioni dei capitoli che, pur se non strettamente attinenti al tema, risultano doverose; alcuni esempi li abbiamo nel sesto capitolo in si cui parla di XML, il settimo in cui si descrivono le basi del protocollo HTTP o il nono sulle specifiche del Bluetooth. Ogni capitolo è infine corredato da una serie di riferimenti utilissimi per approfondire quanto letto.
Sebbene l'autore specifichi di non voler sostituire la documentazione ufficiale e il libro si presenti come pieno di esempi pratici mirati alla comprensione degli argomenti trattati, purtroppo non è sempre così. In alcune parti del testo, infatti, la descrizione di componenti o API in generale rasenta quasi quella di una semplice documentazione tecnica (con in più alcune righe di codice), mentre in altre (quasi esclusivamente nelle prime parti del testo) gli esempi presenti, di cui ho citato i principali, non hanno una grande utilità.