Professional Documents
Culture Documents
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
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 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
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