ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Eshop | Java | Tools | Web | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

RMI IN PRATICA
RMI in pratica
RMI e i browser
L’intefaccia remota
Serializzazione dei parametri
L’implementazione
Importare l’oggetto
Compilazione e avvio
Conclusioni
L'Autore

<<< Serializzazione dei parametri >>>

Una altra importantissima condizione, che in questo caso non si nota bene, è che sia i parametri dei metodi che i valori ritornati siano serializzabili. I tipi primitivi e quelli predefiniti escono dalla fabbiaca di per sè serializzabili, quindi nel nostro caso non ci sono grandi problemi. Come parametri e valori ritornati usiamo solo stringhe.
In generale però spesso si desidera passare e ritornare come oggetti remoti altre classi definite dall’utente. In questo caso è necessario rendersi bene conto di una cosa. Quando il client invoca un metodo remoto, effettua una copia dell’oggetto dal client al server, e lo stesso succede dal server al client quando viene ritornato il risultato. Nella invocazione normale si passa semplicemente un riferimento all’oggetto, e se un metodo lo modifica l’oggetto passato, questa modifica si ripercuoterà sul chiamante che al ritorno troverà l’oggetto modificato. Invece nell’invocazione di metodi remoti, il server ottiene una copia dell’oggetto che è indipendente dal quella passata come parametro, quindi modificare un oggetto non è sufficiente per ritornare un risultato: bisogna anche ritornarlo come risultato per fare sì che il chiamante veda le modifiche.
Questo ha anche un impatto sull’efficienza. Non si può passare a cuor leggero come parametro un oggetto complesso, altrimenti si potrebbe anche copiare involontariamente una enorme quantità di dati (e in Java questo può succedere più facilmente di quanto non sembri). Poichè la copia di oggetti in andata (passaggio parametri) e ritorno (valori risultanti) avviene utilizzando il meccanismo della serializzazione è necessario rendere esplicitamente serializzabili le classi definite dall’utente. I tipi primitivi e molti classi della API 1.1 sono serializzabili. Per rendere serializzabili oggetti che hanno come campi solo oggetti serializzabili è sufficiente dichiarare implements java.io.Serializable. In casi più complessi è necessario provvedere ad una serializzazione ad hoc. Per esempio non è usare passare come argomenti di un oggetto remoto classi come java.io.InputStream che non sono serializzabili.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com