You are on page 1of 54

DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT

DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT

Corso Java ME
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Sviluppo
DRAFT di applicazioni
DRAFT DRAFT DRAFT DRAFT DRAFTper DRAFT
telefoni
DRAFT
DRAFT cellulari
DRAFT DRAFTeDRAFT
computer palmari
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFTStefano DRAFT Sanna
DRAFT DRAFT DRAFT DRAFT
gerdavax@gerdavax.it
9DRAFT
Giugno 2006 DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Versione 1.0.0

1
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
DRAFT
DRAFT
DRAFT Licenza
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT
DRAFT
DRAFT
DRAFT
DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT
Copyright DRAFT DRAFT
e marchi citati DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
2
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT DRAFT Licenza
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IlDRAFT
materiale
DRAFT prodotto
DRAFT DRAFT per DRAFT
questoDRAFT
corsoDRAFT
(slide,
DRAFT
codice
DRAFT DRAFTsorgente,
DRAFTimmagini originali)
DRAFT DRAFT DRAFT èDRAFT
statoDRAFT
rilasciata
DRAFT DRAFT sotto la licenza
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT Creative
DRAFT Commons
DRAFT DRAFT DRAFT DRAFT
Attribuzione-NonCommerciale-StessaLicenza2.5
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Per leggere una copia della licenza visita il sito
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
web:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– http://creativecommons.org/licenses/publicdomain/
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
o spedisci
DRAFT DRAFT una lettera
DRAFT a Creative
DRAFT Commons,
DRAFT DRAFT 559
DRAFT DRAFT
Nathan
DRAFT DRAFT Abbott Way,
DRAFT Stanford,
DRAFT DRAFT California
DRAFT DRAFT94305,
DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
USA
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
3
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT Licenza...
DRAFT DRAFT inDRAFT
praticaDRAFT:-)
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● E' consentito:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFTleDRAFT
– utilizzare DRAFT
slide per DRAFT DRAFT DRAFT DRAFT
autoistruzione
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– utilizzare
DRAFT DRAFTleDRAFT
slide per corsi
DRAFT all'interno
DRAFT di scuole
DRAFT DRAFT DRAFT
pubbliche
DRAFT DRAFT oDRAFT
università
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT le
– stampare DRAFT
slide DRAFT DRAFT
per uso DRAFT DRAFT DRAFT
personale
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– ridistribuire
DRAFT copiaDRAFT
DRAFT DRAFT delle slide
DRAFTsenza
DRAFTmodifiche
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Non è consentito:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFTleDRAFT
– utilizzare DRAFT
slide per DRAFT
tenere unDRAFT
corso DRAFT DRAFT
a pagamento
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– utilizzare le slide per un qualsiasi scopo
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
nascondendo
DRAFT DRAFT DRAFT le informazioni
DRAFT DRAFTsull'autore
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
– modificare DRAFT delle
il contenuto DRAFTslide
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
4
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFTLimitazione
DRAFT DRAFT DRAFTdi responsabilità
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Malgrado
DRAFT l'impegno
DRAFT e la DRAFT
DRAFT DRAFT buonaDRAFT
volontà a fornire
DRAFT DRAFT
contenuti
DRAFT DRAFTtecnicamente
DRAFT DRAFTcorretti, è possibile
DRAFT DRAFT che ci
DRAFT DRAFT
siano
DRAFT errori. Per questo
DRAFT DRAFT DRAFTmotivo e dataDRAFT
DRAFT DRAFT la gratuità
DRAFT
DRAFTlicenza,
della DRAFT DRAFT DRAFT è
il materiale DRAFT DRAFT
fornito DRAFT
“COSI' DRAFT
COM'E'”,
DRAFT DRAFT
“AS IS”, DRAFT
e non DRAFT DRAFT
si fornisce DRAFT
alcuna DRAFT sulle
garanzia DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
informazioni contenute in questa presentazione né ci
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
siDRAFT
assume alcuna
DRAFT DRAFTresponsabilità da eventuali
DRAFT DRAFT DRAFT danni
DRAFT DRAFT
causati dall'uso
DRAFT DRAFT proprio
DRAFT o improprio
DRAFT DRAFT DRAFTdelle suddette.
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
5
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT Marchi citatiDRAFT DRAFT DRAFT
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IDRAFT
marchi dei prodotti
DRAFT citati
DRAFT DRAFT in questa
DRAFT DRAFT presentazione
DRAFT DRAFT
sono
DRAFT di proprietà
DRAFT DRAFTdei rispettivi
DRAFT DRAFT titolari
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Java
DRAFTe DRAFT
tutti i DRAFT
marchiDRAFT
e simboli
DRAFTad essoDRAFT
DRAFT correlati
DRAFT
sono
DRAFT di proprietà
DRAFT DRAFTdiDRAFT
Sun Microsystems
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● L'autore nonDRAFT
DRAFT DRAFT ha alcun
DRAFTlegame
DRAFT con Sun
DRAFT DRAFT DRAFT
Microsystems
DRAFT DRAFT DRAFTe con i produttori
DRAFT dei dispositivi
DRAFT DRAFT DRAFT DRAFTe
dei software
DRAFT citati in
DRAFT DRAFT questa
DRAFT presentazione.
DRAFT Le
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
considerazioni DRAFThanno
esposte DRAFT carattere
DRAFT DRAFT
di DRAFT
DRAFT DRAFT DRAFT
disquisizione DRAFT
tecnica DRAFT
e non DRAFT DRAFT
esprimono DRAFT
giudizi
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
positivi o negativi su nessun prodotto
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
6
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
DRAFT
DRAFT
DRAFT
DRAFT
DRAFT
Java ME
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT
DRAFT
DRAFT
DRAFT
DRAFT
DRAFT
DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT Networking
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
7
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT Generic Connection
DRAFT DRAFT DRAFT DRAFTFramework
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IlDRAFT
designDRAFTmodulare
DRAFT DRAFTdella piattaforma
DRAFT JavaDRAFT
DRAFT DRAFT ME e
la
DRAFTmoltitudine di tecnologie
DRAFT DRAFT di comunicazioni
DRAFT DRAFT DRAFT DRAFT DRAFT
disponibili
DRAFT DRAFThanno DRAFTevidenziato
DRAFT DRAFTlaDRAFT
necessità
DRAFTdiDRAFT
un
DRAFT DRAFTdiDRAFT
framework DRAFT DRAFT
connettività DRAFT DRAFT DRAFT
con queste
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
caratteristiche:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– connection-oriented
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– multiprotocollo
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– sufficientente
DRAFT DRAFT DRAFTflessibile
DRAFT da poter
DRAFT essere
DRAFT esteso
DRAFT DRAFT
DRAFTsenzaDRAFT DRAFT DRAFT
modificare DRAFT di
la gerarchia DRAFT
classiDRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IlDRAFT
Generic
DRAFTConnection
DRAFT DRAFT Framework è il motore
DRAFT DRAFT DRAFT DRAFT
di
DRAFTconnettività
DRAFT DRAFTsu CLDC/MIDP
DRAFT e offre
DRAFT DRAFT DRAFTi servizi
DRAFT
per
DRAFT tutti i protocolli
DRAFT (web DRAFT
DRAFT DRAFT services esclusi)
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IlDRAFT
core DRAFT
package e' javax.microedition.io
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
8
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT GCF: protocolli
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IlDRAFT
CGF DRAFT
supporta
DRAFTnumerosi protocolli
DRAFT DRAFT DRAFTattraverso le
DRAFT DRAFT
API
DRAFT opzionali:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– HTTP, HTTPS: gli unici garantiti da MIDP 2.0
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Socket
DRAFT e ServerSocket
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– UDP (client e server)
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Serial
DRAFT Port DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– SMS (JSR 120)
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– MMSDRAFT
DRAFT (JSR 205)
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Filesystem (JSR 75)
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● L'effettiva
DRAFT DRAFTdisponibilità
DRAFT DRAFTdiDRAFT
un protocollo dipende
DRAFT DRAFT DRAFT
DRAFT
dal DRAFT DRAFT
particolare DRAFT DRAFT
dispositivo DRAFT DRAFT DRAFT
in uso
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
9
Corso Java ME – http://www.gerdavax.it/corsojavame
Generic
DRAFT Connection
DRAFT DRAFT DRAFT DRAFTFramework
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
10
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT Connector
DRAFT DRAFT e DRAFT
Connection
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IlDRAFT
framework si basa
DRAFT DRAFT su due
DRAFT componenti
DRAFT DRAFT DRAFT principali:
DRAFT
DRAFT DRAFT DRAFT
– Connection: è laDRAFT DRAFT DRAFT
connessione verso DRAFT DRAFT
la risorsa
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
remota (un URL http, una porta seriale, un socket o
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
una virtual connection SMS...)
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Connector:
DRAFT è la factory
DRAFT DRAFT che creare
DRAFT DRAFT DRAFTistanze
DRAFT diDRAFT
DRAFT DRAFT DRAFT
Connection DRAFT
a partire da DRAFT
schemiDRAFT DRAFT DRAFT
che specificano
DRAFT DRAFT eDRAFT
protocolli DRAFT(ad
parametri DRAFT DRAFT DRAFT DRAFT
esempio,
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
http://www.gerdavax.it:8080)
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Per
DRAFT ciascun
DRAFT protocollo
DRAFT DRAFT è definita una classe
DRAFT DRAFT DRAFT DRAFT
dedicata
DRAFT DRAFT cheDRAFT
implementa Connection
DRAFT DRAFT e aggiunge
DRAFT DRAFT DRAFT
DRAFT DRAFT dedicate
funzionalità DRAFT DRAFTallaDRAFT DRAFT
gestione DRAFT DRAFT
della
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
comunicazione
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
11
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFTConnector
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Attraverso il metodo open() restituisce una
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
generica
DRAFT DRAFTConnection,
DRAFT DRAFT su cui effettuare
DRAFT casting
DRAFT DRAFT alla
DRAFT
effettiva
DRAFT DRAFTconnessione
DRAFT DRAFT istanziata:
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
HttpConnection conn = (HttpConnection) Connector.open(http://....);
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
● Nel casoDRAFT DRAFT
in cui DRAFT DRAFT
il protocollo DRAFT non
richiesto DRAFTsiaDRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
disponibile, Connector lancia una
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
ConnectionNotFoundException
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
12
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT DRAFTSchemi
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Ecco
DRAFTgli schemi
DRAFT deiDRAFT
DRAFT protocolli
DRAFTpiù diffusi:
DRAFT DRAFT DRAFT
DRAFT
– HTTP:DRAFT DRAFThttp://HOSTNAME:PORT
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– HTTPS:
DRAFT DRAFT DRAFThttps://HOSTNAME:PORT
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFTsocket://HOSTNAME:PORT
– Socket: DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– ServerSocket:
DRAFT DRAFT DRAFTsocket://:LOCALPORT
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
– UDPDRAFT
client:DRAFTdatagram://HOSTNAME:PORT
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– UDPDRAFT
DRAFT server:DRAFTdatagram://:PORT
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
– Serial Port:DRAFTcomm:PORT;baudrate=SPEED
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– SMSDRAFT
DRAFT client:DRAFTsms://PHONENUMBER:PORT
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
– SMSDRAFT
server:DRAFTsms://:PORT
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Filesystem:
DRAFT DRAFT DRAFTfile://filename_and_path
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
13
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT Connection
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● E'
DRAFTcreata dalDRAFT
DRAFT Connector:
DRAFT non
DRAFTesistono costruttori
DRAFT DRAFT DRAFT
pubblici
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Definisce
DRAFT DRAFT un DRAFT
unico DRAFT
metodo: close()!
DRAFT DRAFT DRAFT DRAFT
● DRAFT
Le DRAFT DRAFT
sottoclassi, DRAFT DRAFT
specializzate perDRAFT DRAFT DRAFT
protocollo,
DRAFT DRAFTmetodi
forniscono DRAFT DRAFT
per: DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– impostare
DRAFT DRAFT iDRAFT
parametri
DRAFTdiDRAFT
connessione
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– ricevere informazioni sull'esito delle operazioni
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFTcompiute
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
– recuperare DRAFT
input e DRAFT
output DRAFT DRAFT DRAFT
stream
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– intercettare invocazioni callback (server)
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IlDRAFT
comportamento
DRAFT DRAFT dipende dal protocollo
DRAFT DRAFT DRAFT DRAFT in DRAFT
uso:
DRAFT
ad DRAFT DRAFT
esempio, DRAFT DRAFT DRAFT
nella connessione DRAFT DRAFT
http l'inputstream
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
“comincia” subito dopo i response header
14
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT Connection
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Ecco
DRAFTgli schemi
DRAFT deiDRAFT
DRAFT protocolli
DRAFTpiù diffusi:
DRAFT DRAFT DRAFT
DRAFT
– HTTP:DRAFT DRAFTHttpConnection
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– HTTPS:
DRAFT DRAFT DRAFTHttpsConnection
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFTSocketConnection
– Socket: DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– ServerSocket:
DRAFT DRAFT DRAFTServerSocketConnection
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
– UDPDRAFT
client:DRAFTDatagramConnection
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– UDPDRAFT
DRAFT server:DRAFTDatagramConnection
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
– Serial Port:DRAFTCommConnection
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– SMSDRAFT
DRAFT client:DRAFTMessageConnection
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
– SMSDRAFT
server:DRAFTMessageConnection
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Filesystem:
DRAFT DRAFT DRAFTFileConnection
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
15
Corso Java ME – http://www.gerdavax.it/corsojavame
Network
DRAFT DRAFTprogramming:
DRAFT DRAFT DRAFT alcune regole
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Lo sviluppo
DRAFT DRAFT di applicazioni
DRAFT network-oriented
DRAFT DRAFT DRAFT DRAFT DRAFT
richiede l'adozione
DRAFT DRAFT DRAFT DRAFTdi alcune
DRAFTimportanti
DRAFT DRAFTregole:
DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
1. scegliere il protocollo che soddisfa le esigenze
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
di connettività
DRAFT DRAFT DRAFT dell'applicazione
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
2. conoscere DRAFT DRAFT
il protocollo DRAFT
scelto: DRAFT DRAFT
caratteristiche,
DRAFT DRAFT DRAFT
potenzialità limiti,DRAFT DRAFT DRAFT Java
implementazione DRAFTMEDRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
3. gestire
DRAFT DRAFTle DRAFT
routineDRAFTdi connettività
DRAFT DRAFT conDRAFT
threadDRAFT
dedicati
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
4. gestire DRAFT DRAFT DRAFT
il trasferimento DRAFT
dati con DRAFT DRAFT
buffering
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
5. chiudere
DRAFT le connessioni
DRAFT DRAFT DRAFT DRAFT al termine del DRAFT
DRAFT DRAFT
trasferimento
DRAFT DRAFT DRAFT datiDRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
6. prevedere DRAFT DRAFT
strategie nel casoDRAFT DRAFT
in cui DRAFT
la rete
DRAFT DRAFT
wireless non DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
sia disposibile
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
16
Corso Java ME – http://www.gerdavax.it/corsojavame
Esempio
DRAFT DRAFT DRAFT di valutazione
DRAFT (1) DRAFT
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Applicazione:
DRAFT DRAFT DRAFT catalogo
DRAFT prodotti
DRAFT DRAFTe raccolta ordini
DRAFT DRAFT
● DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Requisiti:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– aggiornare
DRAFT periodicamente
DRAFT DRAFT DRAFT DRAFTun DRAFT
catalogo di prodotti
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– inoltrare gli ordini acquisiti con il dispositivo mobile
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– accesso
DRAFT al DRAFT
DRAFT server DRAFT
aziendale
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– connettività wireless
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Analisi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– l'accesso a server aziendale suggerisce di adottare
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
un protocollo
DRAFT DRAFT DRAFTfirewall-friendly,
DRAFT DRAFT DRAFTquale http DRAFT
DRAFT
DRAFT DRAFT DRAFTsaltuaria
– la connessione DRAFT DRAFT DRAFT
esclude una DRAFT DRAFT
connessione
DRAFT DRAFT DRAFT
permanente DRAFT DRAFT DRAFT DRAFT DRAFT
via socket
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– http DRAFT
DRAFT appareDRAFT
comeDRAFT
la soluzione ottimale
DRAFT DRAFT DRAFT DRAFT
17
Corso Java ME – http://www.gerdavax.it/corsojavame
Esempio
DRAFT DRAFT DRAFT di valutazione
DRAFT (2) DRAFT
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Applicazione:
DRAFT DRAFT DRAFT un DRAFT
sistema di instant
DRAFT messaging
DRAFT DRAFT DRAFT
● DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Requisiti:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– notifica
DRAFT istantanea
DRAFT di messaggi
DRAFT DRAFT di chat
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Analisi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFTcontinua
– la connessione DRAFT DRAFT DRAFTl'utilizzo
suggerisce DRAFT DRAFT
di
DRAFT DRAFT
socket, DRAFTesclude
mentre DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– una connessione socket continua può non essere
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
garantita
DRAFT DRAFTovunque: occorre
DRAFT DRAFT prevedere
DRAFT un sistema
DRAFT DRAFT DRAFT
di caching/store&forward
DRAFT dei messaggi
DRAFT DRAFT DRAFT DRAFT su un
DRAFT DRAFT DRAFT
server
DRAFT centralizzato
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– gli SMS possono essere una scelta interessante per
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
l'attivazione
DRAFT remota
DRAFT DRAFT dell'applicazione
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
– i socket DRAFT DRAFT
appaiono come DRAFT DRAFT
soluzione DRAFT DRAFT
ottimale
18
Corso Java ME – http://www.gerdavax.it/corsojavame
Esempio
DRAFT DRAFT DRAFT di valutazione
DRAFT (3) DRAFT
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Applicazione:
DRAFT DRAFT DRAFT sistema
DRAFT di localizzazione
DRAFT DRAFT DRAFT DRAFT
● DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Requisiti:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– invioDRAFT
DRAFT regolare della
DRAFT posizione
DRAFT DRAFT corrente del DRAFT
DRAFT DRAFT
DRAFT DRAFT mobile
terminale DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– l'utente può trovarsi in zone di scarsa copertura
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
telefonica,
DRAFT eventualmente
DRAFT DRAFT aggangiato
DRAFT DRAFT a retiDRAFT
DRAFT DRAFT estere
(si pensi
DRAFT DRAFTadDRAFT
una imbarcazione
DRAFT DRAFT sulla
DRAFTcosta,
DRAFTinDRAFT
grado
di ricevere
DRAFT il segnale
DRAFT DRAFT da DRAFT
DRAFT diverse nazioni)
DRAFT DRAFT DRAFT
● DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Analisi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– le informazioni
DRAFT DRAFT DRAFT daDRAFT
inviare sonoDRAFT
DRAFT molto DRAFT
piccoleDRAFT
DRAFT DRAFT DRAFT
(latitudine DRAFT DRAFT
e longitudine): usareDRAFT DRAFT DRAFT
una connessione
DRAFT
dati DRAFT DRAFT
comporta un DRAFT DRAFT
costo alla DRAFT superiore
risposta DRAFT DRAFT
a
DRAFT DRAFT
quello DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
di traffico
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– gli SMS sono la soluzione più adatta
19
Corso Java ME – http://www.gerdavax.it/corsojavame
Conoscenza
DRAFT DRAFT DRAFT DRAFTdel protocollo
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Dopo
DRAFT aver
DRAFTscelto
DRAFTun determinato
DRAFT protocollo
DRAFT DRAFT per le
DRAFT DRAFT
caratteristiche
DRAFT DRAFT DRAFT macro, occorre
DRAFT DRAFT approfondirne i
DRAFT DRAFT DRAFT
dettagli
DRAFT DRAFTmicro per avere
DRAFT DRAFT una
DRAFTchiara
DRAFTpercezione
DRAFT DRAFT
DRAFT DRAFT DRAFT
dell'impatto DRAFT DRAFT DRAFT DRAFT DRAFT
sulla implementazione:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– limitiDRAFT
DRAFT di utilizzo
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFTin DRAFT
– comportament DRAFT
base alla DRAFT DRAFT
dimensione DRAFT
dei dati
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
trasferiti
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– gestione
DRAFT DRAFTsessioni
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
– potenza di DRAFT
calcoloDRAFT DRAFT per
necessaria DRAFT DRAFT DRAFT
la gestione
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– varianti
DRAFT DRAFTdi implementazione
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Eventualmente può essere efficace utilizzare due
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
protocolli
DRAFT DRAFT diversi,
DRAFT selezionati
DRAFT DRAFTper svolgere
DRAFT DRAFTcompiti
DRAFT
specifici
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
20
Corso Java ME – http://www.gerdavax.it/corsojavame
Specificità
DRAFT DRAFT DRAFT dellaDRAFT reteDRAFT dell'operatore
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● La reteDRAFT
DRAFT dell'operatore
DRAFT DRAFT di telefonia
DRAFT DRAFT mobile
DRAFTpuò DRAFT
applicare
DRAFT DRAFT regole
DRAFTdiDRAFT
routing diverse
DRAFT DRAFT a seconda
DRAFT DRAFT del
protocollo
DRAFT DRAFT di DRAFT
comunicazione
DRAFT DRAFT utilizzato:
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
socket://host:anyport
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Application
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT Server DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT ProxyDRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT http://host
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT
Rete Operatore DRAFT server
L'application DRAFTvede DRAFT DRAFT
le due connessioni
provenienti da due IP diversi!
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
21
Corso Java ME – http://www.gerdavax.it/corsojavame
Platform
DRAFT DRAFT DRAFT DRAFT security
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IlDRAFT
modello di DRAFT
DRAFT sicurezza
DRAFTimpedisce di creare
DRAFT DRAFT DRAFT DRAFT
SocketConnection verso porte
DRAFT DRAFT DRAFT DRAFT DRAFT TCP
DRAFTgestite
DRAFT da
DRAFT
classi
DRAFT specializzate
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Non
DRAFTè DRAFT
dunque possibile
DRAFT DRAFT creare una DRAFT DRAFT
DRAFT DRAFT
SocketConnection verso la
DRAFT DRAFT DRAFT DRAFT porta
DRAFT TCP DRAFT
DRAFT 80: essa
DRAFT
DRAFT DRAFT
infatti DRAFT
è gestita DRAFT DRAFT
di default dalla DRAFT DRAFT DRAFT
HttpConnection
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
22
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFTMultithreading
DRAFT DRAFT DRAFT DRAFT e connettività
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Le operazioni
DRAFT di comunicazione
DRAFT DRAFT DRAFT DRAFT DRAFT(locale e remota)
DRAFT DRAFT
sono
DRAFT generalmente
DRAFT DRAFT DRAFT time-consuming
DRAFT DRAFT e bloccanti
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Esempi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
– Networking: DRAFTGPRS,
startup DRAFTDNS
DRAFT DRAFT DRAFT
lookup,
DRAFT DRAFT
risposta delDRAFT
server,DRAFT DRAFT DRAFT
trasferimento DRAFT DRAFT
dati...
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Bluetooth:
DRAFT discovery,
DRAFT DRAFT DRAFT pairing, trasferimento
DRAFT DRAFT dati...
DRAFT DRAFT
DRAFT
– SMS:DRAFT DRAFT DRAFTe DRAFT
incapsulamento inoltroDRAFT DRAFT DRAFT
messaggio
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Le specifiche
DRAFT Java ME
DRAFT DRAFT DRAFTraccomandano
DRAFT DRAFT DRAFT l'usoDRAFT
thread per gestire
DRAFT DRAFT tutte le
DRAFT DRAFT operazioni
DRAFT di I/O DRAFT
DRAFT DRAFT in
modo
DRAFT da separarle
DRAFT dal thread
DRAFT DRAFT DRAFT principale
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFTe DRAFT
dell'applicazione DRAFT DRAFTgrafica.
della interfaccia DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Molti
DRAFT dispositivi
DRAFT DRAFT sono “accondiscendeti”,
DRAFT DRAFT DRAFT DRAFT mentre
DRAFT il
Wireless Toolkit
DRAFT DRAFT DRAFT interrompe
DRAFT DRAFTle MIDlet bloccanti
DRAFT DRAFT DRAFT
23
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFTMultithreading
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● E' necessario
DRAFT utilizzare
DRAFT DRAFT DRAFTun modello
DRAFT DRAFTasincrono
DRAFT DRAFT
basato su multithreading:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– un thread principale (inplicito) gestisce l'interazione
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
con DRAFT
DRAFT l'utente
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
– uno DRAFT DRAFT dedicati
o più thread DRAFT DRAFT DRAFT le
gestiscono DRAFT DRAFT
routine
DRAFT DRAFTinDRAFT
bloccanti DRAFT
maniera DRAFT DRAFT DRAFT DRAFT
indipendente
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– un sistema ad eventi notifica lo stato di
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
avanzamento
DRAFT DRAFT DRAFTdi ciascun threadDRAFT DRAFT DRAFT
DRAFT DRAFT
● IDRAFT DRAFT
thread sonoDRAFT DRAFT DRAFTrisorsa
una importante DRAFT DRAFT
ma non DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
bisogna abusarne: la specifica JTWI richiede che
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
un runtime
DRAFT DRAFT Java
DRAFTMEDRAFT
sia inDRAFT
gradoDRAFT
di gestire
DRAFT almeno
DRAFT
10 thread
DRAFT DRAFTcontemporanei.
DRAFT DRAFT DRAFT Questo significa
DRAFT che
DRAFT DRAFT
l'undicesimo thread
DRAFT DRAFT DRAFT non è
DRAFT garantito
DRAFT DRAFT eDRAFT
occorre
DRAFT
gestire con parsimonia
DRAFT DRAFT DRAFT DRAFTlaDRAFT
risorsa...
DRAFT DRAFT DRAFT
24
Corso Java ME – http://www.gerdavax.it/corsojavame
Multithreading:
DRAFT DRAFT DRAFT DRAFT DRAFT approcci
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Tra
DRAFTi numerosi
DRAFT DRAFTapprocci
DRAFT possibili, si vedranno
DRAFT DRAFT DRAFT DRAFTora:
DRAFT
– OneDRAFT
shot: DRAFT
quando DRAFT DRAFT DRAFT
è necessario, DRAFT DRAFT
l'applicazione crea
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
un thread al volo per svolgere un compito richiesto
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
e prosegue nel resto dell'esecuzione. Il thread è
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
distrutto
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
– Single DRAFT
task: DRAFT DRAFT
l'applicazione DRAFT di
dispone DRAFT DRAFT
un thread
DRAFT DRAFT
sempre DRAFT
attivo, al DRAFT DRAFTassegnati
quale sono DRAFT DRAFT DRAFT
in sequenza
DRAFT DRAFT
i diversi DRAFT
task DRAFT DRAFT
da elaborare. DRAFT
Mentre unDRAFT
task èDRAFT
attivo
DRAFT
non DRAFT DRAFTassegnato
può essere DRAFT DRAFT DRAFT task
un nuovo DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Task
DRAFT queue:
DRAFT DRAFTl'applicazione
DRAFT DRAFTdispone di uno DRAFT
DRAFT DRAFT o più
thread
DRAFT sempre
DRAFT DRAFT attivi e una
DRAFT coda
DRAFT doveDRAFT
DRAFT i task DRAFT
da
eseguire
DRAFT DRAFTsono
DRAFTsalvati
DRAFTin DRAFT
attesa DRAFT
che unDRAFT
thread sia
DRAFT
DRAFT DRAFT
libero DRAFT DRAFT l'esecuzione
per completarne DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
25
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT One-shot DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Una inner class anonima esegue un task:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
public void DRAFT DRAFTdata)
sendData(String DRAFT
{ DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
final String _data = data;
DRAFT DRAFT DRAFT DRAFT
Indispensabile DRAFT
affinché la
inner class anonima possa
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT accedere daDRAFT
“data” DRAFT
Thread t = new Thread() {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public void run() {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
try { DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT ilDRAFT
// inserire codice DRAFT
relativo DRAFT DRAFT DRAFT DRAFT
alla connessione
DRAFT
} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT /*DRAFT
catch(Exception e) {
DRAFT DRAFT} DRAFT DRAFT
salvate il mondo! */
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
};
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
t.start();
DRAFT
// DRAFT
il metodo DRAFT
sendData() esceDRAFT DRAFT DRAFT DRAFT DRAFT
immediatamente....

} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT


26
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT One-shot
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Vantaggi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT diDRAFT
– permette DRAFT
delegare al DRAFT
volo unDRAFT DRAFT
compito ad DRAFT
una
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
classe
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– semplice
DRAFT DRAFTed immediato
DRAFT DRAFT da implementare,
DRAFT DRAFT DRAFTnon DRAFT
richiede
DRAFT DRAFTparticolari accorgimenti
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Svantaggi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
– non DRAFT
si ha ilDRAFT DRAFT
controllo DRAFT
di più che DRAFT
avvieneDRAFT DRAFT
all'interno
DRAFT DRAFT DRAFT
del thread DRAFT si
(al massimo DRAFT DRAFTla DRAFT
controlla fine con DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
isAlive())
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– il thread,
DRAFT DRAFTuna volta
DRAFT conclusa
DRAFT DRAFTl'elaborazione,
DRAFT DRAFT DRAFTviene
distrutto
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
27
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT Single TaskDRAFT DRAFT DRAFT
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Esiste un thread
DRAFT DRAFT DRAFTsempre attivo,DRAFT
DRAFT DRAFT al quale sono
DRAFT DRAFT
assegnati
DRAFT DRAFT in DRAFT
sequenza i diversi
DRAFT task da
DRAFT DRAFT elaborare:
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– terminata l'elaborazione, il thread aspetta
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
l'assegnazione
DRAFT DRAFT DRAFT di DRAFT
un nuovo task
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFTnotifica
– il thread DRAFT l'avvenuto
DRAFT DRAFT DRAFT DRAFT DRAFT
completamento di un
DRAFT
taskDRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– mentre un task è attivo non può essere assegnato
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
un nuovo
DRAFT DRAFT task
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● DRAFT DRAFT DRAFT
Componenti DRAFT DRAFT DRAFT DRAFT DRAFT
principali:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Task:
DRAFT incapsula
DRAFT DRAFT le routine
DRAFT da eseguire
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFTriceve
– TaskListener: DRAFTnotifica
DRAFT del
DRAFT DRAFTdiDRAFT
termine
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
esecuzione di un Task
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Executor:
DRAFT provvede
DRAFT DRAFT all'esecuzione
DRAFT DRAFT DRAFTdel TaskDRAFT
DRAFT
28
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT Task: DRAFTcostruttore
DRAFT DRAFT e nome
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Rappresenta l'unità elementare da eseguire.
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Assomiglia
DRAFT DRAFTad un Runnable,
DRAFT DRAFT DRAFTmaDRAFT
aggiungeDRAFTalcuni DRAFT
metodo
DRAFT DRAFT per la gestione
DRAFT DRAFT diDRAFT
nomeDRAFT
e listener:
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public abstract class Task {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
private TaskListener listener; E' una classe astratta:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
occorrerà scrivere
DRAFT
i Task
private String name;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
concreti DRAFT
che svolgono i
compiti richiesti
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
dall'applicazione
DRAFT DRAFT name)
public Task(String DRAFT{ DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
this.name DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
= name;

DRAFT
} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
public String DRAFT
getName() { DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFTreturnDRAFT
name; DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
29
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT Task: DRAFT listener
DRAFT DRAFT e notifica
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT
public TaskListener getListener() {
DRAFT DRAFT
return listener; }
DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public void setListener(TaskListener listener) { this.listener = listener; }
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
protected void notifyCompleted() {

DRAFT DRAFT!= DRAFT


if (listener DRAFT DRAFT DRAFT DRAFT DRAFT
null) listener.taskCompleted();

DRAFT
} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
protected DRAFT DRAFT DRAFTreason)
void notifyFailed(Exception DRAFT { DRAFT DRAFT DRAFT
DRAFT DRAFT!= DRAFT
if (listener DRAFT DRAFT DRAFT DRAFT DRAFT
null) listener.taskFailed(reason);
DRAFT
} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public abstract void run() throws Exception;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
30
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT TaskListener
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Riceve notifica
DRAFT DRAFT dall'Executor
DRAFT DRAFT DRAFT quando
DRAFT il TaskDRAFT
DRAFT ha
terminato
DRAFT DRAFT la DRAFT
sua esecuzione
DRAFT DRAFT in DRAFT
maniera DRAFTcorretta
DRAFT
oppure è stato
DRAFT DRAFT interrotto
DRAFT a causa
DRAFT DRAFT DRAFTdi una DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
eccezione:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public DRAFT
DRAFT interface TaskListener
DRAFT DRAFT DRAFT{ DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
public void DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
taskCompleted();
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
public void DRAFT DRAFT DRAFT DRAFT
taskFailed(Exception reason); DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Il TaskListener riceve l'eccezione
DRAFT DRAFT DRAFT DRAFT DRAFT sollevataDRAFT DRAFT DRAFT
durante l'esecuzione,
esattamente come se avesse
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
eseguito esso stesso il codice
31
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT Executor: il telaio
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public class Executor extends Thread {
DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
private Task currentTask;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
private boolean halt;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
public Executor() { DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
start(); DRAFT
DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Il Thread si avvia
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
immediatamente
DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public synchronized void halt() {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFThaltDRAFT
= true; DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
notify(); DRAFT
DRAFT
} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
32
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT Executor:
DRAFT DRAFT DRAFT running! DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public void run() {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
try {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
while(! halt) {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT
synchronized(this) DRAFT }DRAFT DRAFT DRAFT
{ wait();
DRAFT DRAFT DRAFT
if (!halt DRAFT DRAFT
&& currentTask DRAFT
!= null) { DRAFT DRAFT
DRAFT DRAFT try DRAFT
{ DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
currentTask.run();
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
currentTask.notifyCompleted();
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT }DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT catch(Exception
DRAFT DRAFT e) DRAFT DRAFT DRAFT DRAFT}
{ currentTask.notifyFailed(e);
DRAFT DRAFT finally
DRAFT{ DRAFT DRAFT
currentTask DRAFT
= null; } DRAFT DRAFT
DRAFT DRAFT } DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
} catch (Exception e) { e.printStackTrace(); }
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
33
Corso Java ME – http://www.gerdavax.it/corsojavame
Executor:
DRAFT DRAFT DRAFT associazione
DRAFT DRAFT DRAFT nuovi task
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● L'assegnazione
DRAFT DRAFT DRAFT di un nuovo
DRAFT DRAFTtask provoca
DRAFT DRAFTil DRAFT
riavvio
del
DRAFTthread:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
public synchronized DRAFT DRAFT
void runTask(Task task) {DRAFT DRAFT DRAFT

DRAFT DRAFT DRAFT


this.currentTask DRAFT DRAFT DRAFT DRAFT DRAFT
= task;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
notify();
DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● E' importante
DRAFT DRAFT DRAFT ricordare
DRAFTcheDRAFTl'assegnazione di un
DRAFT DRAFT DRAFT
DRAFT DRAFT
nuovo Task puòDRAFT DRAFT DRAFT
avvenire DRAFTche
solo dopo DRAFT DRAFTè
l'ultimo
DRAFT completato
stato DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
34
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFTSingle taskDRAFT DRAFT DRAFT
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Vantaggi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT diDRAFT
– permette DRAFT
riciclare un DRAFT
threadDRAFT DRAFT
per più DRAFT
operazioni
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
successive
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– offreDRAFT
DRAFT un semplice meccanismo
DRAFT DRAFT ad eventi
DRAFT DRAFT DRAFTperDRAFT
conoscere
DRAFT l'esito dell'elaborazione
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Svantaggi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
– la sequenza DRAFT
dei task DRAFT DRAFT DRAFT
è rigorosamente DRAFT
sequenziale:
DRAFT
primo DRAFT DRAFT DRAFTun
di sottomettere DRAFT DRAFT
nuovo task DRAFT DRAFT
il precedente
DRAFT
deveDRAFT
essere DRAFT
statoDRAFT DRAFT DRAFT DRAFT DRAFT
completato
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– nel caso
DRAFT DRAFTin DRAFT
cui l'operazione
DRAFT DRAFT compiuta dal task
DRAFT DRAFT sia
DRAFT
molto
DRAFT lunga,
DRAFT l'utente
DRAFT DRAFTsarà comunque
DRAFT bloccato
DRAFT DRAFT in
DRAFT
attesa
DRAFT dellaDRAFT
DRAFT conclusione
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– il listener deve implementare metodi atomici che
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
non assegnano ulteriori task.
35
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT Task
DRAFTqueue
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IlDRAFT
modello precedente
DRAFT DRAFT DRAFTnon si presta
DRAFT DRAFTalla rapida
DRAFT DRAFT
successione di richieste
DRAFT DRAFT DRAFT DRAFT di esecuzione
DRAFT di Task:
DRAFT DRAFT DRAFT
prima di sottomettere
DRAFT DRAFT DRAFT DRAFTunDRAFT
nuovoDRAFT
TaskDRAFT DRAFT
DRAFT DRAFT DRAFT
l'applicazione deveDRAFT DRAFT che
attendere DRAFT DRAFT DRAFT
il precedente
DRAFT
sia DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
completato
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● DRAFTeDRAFT
Task DRAFT DRAFT
TaskListener DRAFT
restano DRAFT DRAFT
invariati, DRAFT
mentre
DRAFT DRAFT
l'Executor DRAFT iDRAFT
accoda DRAFTmano
Task man DRAFTcheDRAFT DRAFT
questi
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
vengono
DRAFT DRAFTsottomessi e li esegue
DRAFT DRAFT in successione
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
36
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT Executor: il telaio
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public class Executor extends Thread {
DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
private Vector queue;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
private boolean halt;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
public Executor() { DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
start(); DRAFT
DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Non c'è il Task
DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT correnteDRAFT
ma la DRAFT
lista dei Task
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public synchronized void halt() {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFThaltDRAFT
= true; DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
notify(); DRAFT
DRAFT
} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
37
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFTExecutor:
DRAFT DRAFT associazione nuovi
DRAFT DRAFT DRAFT task
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● L'assegnazione
DRAFT DRAFT DRAFT di un nuovo
DRAFT task
DRAFT avviene
DRAFT DRAFTcon DRAFT
l'inserimento
DRAFT DRAFT DRAFT nella DRAFT
coda: DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public void runTask(Task task) {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT{ DRAFT DRAFT DRAFT DRAFT
synchronized(queue) DRAFT
Non c'è il Task
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
queue.addElement(task); DRAFT
corrente ma la
lista dei Task
DRAFT } DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
synchronized (this) {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
notify();
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IlDRAFT
notify()
DRAFTsull'Executor
DRAFT DRAFTriattiva
DRAFT il thread
DRAFT nel DRAFT
DRAFT caso in
cui
DRAFT si sia fermato
DRAFT DRAFT perché la coda
DRAFT DRAFT era vuota
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
38
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT Executor: DRAFT DRAFT DRAFT running! DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public void run() {
Il thread lavora solo
DRAFT
try {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
se la listaDRAFT
non è vuota
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
while(! halt) {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
if (queue.size() != 0 && ! halt) {
DRAFT DRAFT DRAFT
Task task = null;
DRAFT DRAFT DRAFT DRAFT Non c'èDRAFT
il Task
corrente ma la
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
synchronized(queue) {
DRAFT
lista dei Task
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
task = (Task) queue.elementAt(0);
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
queue.removeElementAt(0);
DRAFT DRAFT }
DRAFT DRAFT DRAFT DRAFT Non èDRAFT
necessario DRAFT
l'esecuzione del Task
che

DRAFT DRAFT try {


DRAFT DRAFT DRAFT DRAFT DRAFT
avvenga DRAFT
nel blocco
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT sincronizzato:
DRAFT laDRAFT
lista può
task.run(); essere popolata nel mentre
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
task.notifyCompleted();
che ilDRAFT DRAFT
Task è eseguito!
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
} catch(Exception e) { task.notifyFailed(e);
DRAFT DRAFT DRAFT DRAFT
} finally { task = null; }
DRAFT DRAFT DRAFT Se la listaDRAFT
è vuota il
thread si ferma
DRAFT DRAFT }
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
if (queue.size() == 0) { synchronized(this) { wait(); }
DRAFT
}
DRAFT
DRAFT }
DRAFT DRAFT DRAFT
} catch (Exception e) {
DRAFT DRAFT DRAFT DRAFT
e.printStackTrace(); }
DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
39
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT Task
DRAFTqueue
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Vantaggi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
– l'applicazione puòDRAFT DRAFT
accodare DRAFT
i Task DRAFT
senza DRAFT
aspettare
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
il completamento di quelli in esecuzione
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– il modello
DRAFT DRAFT ad eventi
DRAFT consente
DRAFT DRAFT di conoscere
DRAFT DRAFT lo stato
DRAFT
di ciascun
DRAFT DRAFT Task
DRAFTsottomesso
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Svantaggi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
– è unaDRAFT DRAFT
inutile DRAFT DRAFT
complicazione nelDRAFT DRAFT
caso in cui DRAFT
DRAFT DRAFT DRAFT
l'esecuzione DRAFT
di ogni taskDRAFT DRAFT DRAFT DRAFT
è strettamente
DRAFT DRAFT DRAFT
vincolata DRAFT DRAFT
alla conclusione del DRAFT DRAFT DRAFT
precedente
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– i Task
DRAFT sonoDRAFT
DRAFT comunque
DRAFT eseguiti in sequenza:
DRAFT DRAFT DRAFT DRAFT
eventualmente
DRAFT DRAFT DRAFTsiDRAFT
può valutare una variante
DRAFT DRAFT nella
DRAFT DRAFT
quale
DRAFT alla coda
DRAFT DRAFTaccedono più thread
DRAFT DRAFT DRAFT che
DRAFT DRAFT
DRAFT DRAFT DRAFT
estraggono i TaskDRAFT DRAFT DRAFT DRAFT DRAFT
e li eseguono
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
40
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT Buffering
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● IlDRAFT
modello
DRAFTa stream di Java
DRAFT DRAFT è particolarmente
DRAFT DRAFT DRAFT DRAFT
flessibile:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– permette di gestire il flusso dei dati a prescindere
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFTdalla sorgente
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFTlaDRAFT
– consente DRAFT
lettura byte DRAFT DRAFT
per byte, perDRAFT
blocchiDRAFT
di
DRAFTbyteDRAFT DRAFT DRAFT
o a pacchetti DRAFT DRAFT
di lunghezza DRAFT
variabile (adDRAFT
DRAFT DRAFTeffettuando
esempio, DRAFT DRAFTuna DRAFT DRAFT
lettura per DRAFT DRAFT
stringhe di
DRAFTtestoDRAFT
ASCII)DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– appositi
DRAFT DRAFTadapter
DRAFT consentono
DRAFT DRAFTlaDRAFT
conversione del
DRAFT DRAFT
DRAFTflusso e la lettura/scrittura
DRAFT DRAFT DRAFT DRAFT dei DRAFT
tipi primitivi
DRAFT eDRAFT
delle
DRAFTstreinghe
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Al
DRAFTfineDRAFT
di evitare
DRAFTblocchi
DRAFT durante
DRAFT DRAFTil trasferimento
DRAFT DRAFT è
consigliato
DRAFT DRAFTusare DRAFTun meccanismo
DRAFT DRAFT DRAFT di buffering
DRAFT DRAFT
41
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFTL'approccio da evitare
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● In letteratura
DRAFT e sui DRAFT
DRAFT DRAFT forumDRAFT
si sconsiglia
DRAFT DRAFT DRAFT
calorosamente
DRAFT DRAFT DRAFTdiDRAFT
utilizzare
DRAFTun approccio
DRAFT DRAFT come
DRAFT
questo:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
int data;
DRAFT DRAFT =DRAFT
while ((data DRAFT DRAFT DRAFT
inputstream.read()) DRAFT DRAFT
!= -1) {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFTbuffer.write(data);
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● DRAFT DRAFTintrodotto
l'overhead DRAFT DRAFT DRAFT
dalla DRAFT DRAFT
invocazione del DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
metodo read() per ogni byte provoca un degrado
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
considerevole
DRAFT DRAFT DRAFT delle prestazioni
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
42
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFTL'approccio
DRAFT DRAFT consigliato
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Un piccolo
DRAFT DRAFTbuffer
DRAFTeDRAFT
il controllo
DRAFT sui byte
DRAFT DRAFT DRAFT
effettivamente
DRAFT DRAFT DRAFT lettiDRAFT
migliorano le prestazioni
DRAFT DRAFT DRAFT DRAFT
notevolmente:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
byte[] DRAFT
data = DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
new byte[PACKET_SIZE];
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
int data_l;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
while ((data_l
DRAFT = inputstream.read(data))
DRAFT DRAFT DRAFT DRAFT DRAFT !=DRAFT-1) { DRAFT
DRAFTbuffer.write(data,
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
0, data_l);
DRAFT
} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● ogni
DRAFTpacchetti di dati
DRAFT DRAFT DRAFT (64,DRAFT
512, DRAFT
1024 byte
DRAFTperDRAFT
volta) viene letto
DRAFT DRAFT DRAFTdalle
DRAFTroutine
DRAFT native del DRAFT
DRAFT DRAFT
dispositivo
DRAFT DRAFTcon bassissimo
DRAFT DRAFT DRAFT overhead
DRAFT DRAFT DRAFT
43
Corso Java ME – http://www.gerdavax.it/corsojavame
L'approccio
DRAFT DRAFT DRAFTottimale
DRAFT DRAFT(condizionato)
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Se è nota
DRAFT la DRAFT
DRAFT dimensione
DRAFT esatta dei dati
DRAFT DRAFT da DRAFT
DRAFT
trasferire
DRAFT DRAFT (adDRAFT
esempio,
DRAFTgrazie
DRAFT al Content-length
DRAFT DRAFT DRAFTdi
una
DRAFTconnessione
DRAFT DRAFThttp)
DRAFTsi DRAFT
possono leggere
DRAFT DRAFTi DRAFT
dati in
DRAFT DRAFT
un'unica DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
invocazione:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
byte[] DRAFT
data = DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
new byte[DATA_SIZE];
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
datainputstream.readFully(data);
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● tutto
DRAFT ilDRAFT
buffering
DRAFTè DRAFT
gestitoDRAFT
dal motore nativoDRAFT
DRAFT DRAFT del
sistema operativo
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Importante:
DRAFT DRAFT readFully()
DRAFT DRAFT èDRAFT
un metodo di
DRAFT DRAFT DRAFT
DataInputStream
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
44
Corso Java ME – http://www.gerdavax.it/corsojavame
UnDRAFT
DRAFT altroDRAFT
vantaggio
DRAFT DRAFTdelDRAFT
buffering
DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● L'approccio
DRAFT DRAFT aDRAFT
pacchetti
DRAFTha un importante
DRAFT DRAFT DRAFT DRAFT
vantaggio:
DRAFT DRAFTèDRAFT
controllare
DRAFT l'avanzamento
DRAFT DRAFT DRAFT del DRAFT
trasferimento
DRAFT DRAFT DRAFT dati DRAFT
ed eventualmente
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
interromperlo:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT
byte[] DRAFT
data = DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
new byte[PACKET_SIZE];
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
int data_l;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
while ((data_l
DRAFT = inputstream.read(data))
DRAFT DRAFT DRAFT DRAFT DRAFT !=DRAFT
-1) { DRAFT
DRAFTbuffer.write(data,
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
0, data_l);
DRAFTgauge.setValue(INCREMENTAL_UPDATING);
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● DRAFT stesso
nello DRAFT modo
DRAFT DRAFT DRAFTdare
è possibile DRAFT DRAFT DRAFT
all'utente il
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
controllo della connessione ed eventuale
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
interrompere
DRAFT DRAFT DRAFTil trasferimento
DRAFT DRAFT(èDRAFT
sufficiente una
DRAFT DRAFT
condizione sul ciclo while!)
45
Corso Java ME – http://www.gerdavax.it/corsojavame
Regola d'oro
DRAFT DRAFT delDRAFT
DRAFT network programming
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Chiudere
DRAFT DRAFT sempre
DRAFT le connessioni
DRAFT DRAFT DRAFT aperte: DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
Connection DRAFT
connection DRAFT DRAFT DRAFT DRAFT DRAFT
= null;
DRAFT
try { DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT= Connector.open(URL);
connection DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
// tutto il codice relativo al traferimento dati
DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
catch(IOException ioex) {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
La connessione deveDRAFT
essere
// avvisare l'utente
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
chiusa anche DRAFT
nel caso in cui
} siano state lanciate delle
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT eccezioniDRAFT DRAFT
finally {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
try {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT if DRAFT DRAFT
(connection DRAFT
!= null) DRAFT DRAFT DRAFT DRAFT
connection.close();

DRAFT} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT


DRAFT DRAFT DRAFT
catch(Exception DRAFT
e) { /* DRAFT
niente da DRAFT
fare */ } DRAFT DRAFT
DRAFT
} DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
46
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT DRAFT HTTPDRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Vantaggi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
– Già disponibile DRAFT DRAFTsulDRAFT
nativamente DRAFT per
dispositivo DRAFT
i
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
browser embedded e la gestione degli MMS: il
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
runtime Java ME può avvantaggiarsi di un supporto
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
nativo
DRAFT sufficientemente
DRAFT veloceDRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Firewall-friendly...
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Proliferano i servizi REST dei web site più
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
importanti
DRAFT e produttivi
DRAFT DRAFT DRAFT (Yahoo, Google,
DRAFT DRAFT Ebay...):
DRAFT DRAFT
l'interfaccia
DRAFT versoDRAFT
DRAFT DRAFT il WebDRAFT
2.0 è DRAFT
http! DRAFT DRAFT
● DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Svantaggi:
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Stateless:
DRAFT DRAFT le informazioni
DRAFT di sessione
DRAFT DRAFT sono nei
DRAFT DRAFT dati
DRAFT
DRAFT
– Se laDRAFT DRAFT
versione DRAFT
nativa DRAFT
non DRAFT
soddisfa le DRAFT DRAFT
esigenze
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
occorre lavorare a livello Socket...
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
47
Corso Java ME – http://www.gerdavax.it/corsojavame
HTTP:
DRAFT dettagli
DRAFT operativi
DRAFT DRAFT su Java
DRAFT DRAFT DRAFT ME
DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● La
DRAFT HttpConnection di MIDP
DRAFT DRAFT DRAFT supporta:
DRAFT DRAFT DRAFT DRAFT
DRAFT
– GET DRAFT
e POSTDRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Custom
DRAFT headers
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
– Result codeDRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● L'implementazione
DRAFT DRAFT DRAFT DRAFT standard
DRAFTnon supporta:
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Basic Authentication e URL-encoding
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– Gestione
DRAFT DRAFTsessioni
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● L'invio in POST
DRAFT DRAFT di dati
DRAFT superiori
DRAFT a 2048B
DRAFT DRAFT comporta
DRAFT DRAFT
ilDRAFT
trasferimento in modalità
DRAFT DRAFT CHUNCKED
DRAFT DRAFT (definita
DRAFT DRAFT DRAFT in
HTTP
DRAFT 1.1)
DRAFTche nonDRAFT
DRAFT tutti DRAFT
i backend
DRAFT http
DRAFT DRAFT
supportano.
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
48
Corso Java ME – http://www.gerdavax.it/corsojavame
HttpConnection
DRAFT DRAFT DRAFT DRAFT DRAFT DEMO
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Upcoming
DRAFT DRAFTviewer
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
49
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT Ottenere
DRAFT DRAFT l'IPDRAFTlocale
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Talvolta può DRAFT
DRAFT DRAFT essereDRAFT
utile DRAFT
conoscere
DRAFTl'IP
DRAFT DRAFT
attualmente assegnato
DRAFT DRAFT DRAFT DRAFTalDRAFT
terminale
DRAFT mobile (con le
DRAFT DRAFT
eccezioni
DRAFT DRAFT viste in precedenza
DRAFT DRAFT DRAFT circa
DRAFTl'attendibilità
DRAFT DRAFT
DRAFT DRAFT DRAFT
dell'indirizzo IP...) DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
● Per
DRAFTricavare l'IP corrente
DRAFT DRAFT è sufficiente:
DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– aprire una SocketConnection verso una porta
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
consentita
DRAFT di unDRAFT
DRAFT DRAFT serverDRAFT
remotoDRAFT DRAFT DRAFT
DRAFT DRAFT
– aprire DRAFT DRAFT
l'InputStream DRAFT
di tale DRAFT DRAFT DRAFT
connessione
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
– leggere il localAddress fornito dalla connessione
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT la
– chiudere DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
connessione
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
50
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT IPDiscover:
DRAFT DRAFT DRAFT telaio DRAFTapplicazione
DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
import javax.microedition.io.*;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
import javax.microedition.midlet.*;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
import javax.microedition.lcdui.*;
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public class IPDiscover extends MIDlet {

DRAFT DRAFT item;


private StringItem DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT
private Form form; DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT

DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT


DRAFT DRAFT DRAFT
public IPDiscover() { DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFTform =DRAFT DRAFT
new Form("IP DRAFT DRAFT DRAFT DRAFT DRAFT
Discover");
DRAFTitem =DRAFT DRAFT DRAFT
new StringItem("Current IP:", DRAFT
""); DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
item.setLayout(Item.LAYOUT_NEWLINE_AFTER);
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
form.append(item);
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public void pauseApp() {
DRAFT DRAFT DRAFT } DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public void destroyApp(boolean unconditional) { }
DRAFT DRAFT
51
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT IPDiscover:
DRAFT DRAFT networking
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
public void startApp() {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Display.getDisplay(this).setCurrent(form);
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Thread t = new Thread() {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFTpublicDRAFTvoid run() {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
SocketConnection socket = null;

DRAFT DRAFT try { DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT


DRAFT DRAFT DRAFT
socket DRAFT DRAFT
= (SocketConnection) DRAFT DRAFT DRAFT
Connector.open("socket://server:port");

DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT


socket.openInputStream();

DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT


item.setText(socket.getLocalAddress());
DRAFT DRAFT } catch DRAFT
(Exception DRAFT DRAFT DRAFT} DRAFT DRAFT
e) { item.setText("N/A");
DRAFT DRAFT finally DRAFT
{ DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
if (socket != null) {
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
try { socket.close(); } catch (Exception e) { }
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
}
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT} DRAFT }
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT};
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
t.start(); }
52
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT IPDRAFT
Discover
DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
Nokia 3250
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT
Si seleziona DRAFT DRAFT DRAFT DRAFT DRAFT
l'APN...
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT C'è stato DRAFT
qualche
errore...
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT L'utente
L'utente deve darme
DRAFTdeve DRAFT
darme
DRAFT DRAFT
DRAFT perché
autorizzazione DRAFT DRAFT DRAFT autorizzazione
DRAFT DRAFT perché DRAFT DRAFT
l'applicazione possa l'applicazione possa
DRAFT DRAFT
accedere ai servizi di rete
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
accedere ai servizi di rete
53
Corso Java ME – http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT

Corso Java ME
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
http://www.gerdavax.it/corsojavame
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT
54
Corso Java ME – http://www.gerdavax.it/corsojavame

You might also like