Newsgroup: it.comp.java
Titolo: Ancora su RMI

Scusate se rompo ancora, però vorrei ancora dei chiarimenti su RMI.
posso passare qualunque oggetto a un metodo di un oggetto remoto? e 
posso farmi restituire un qualunque oggetto? O forse gli oggetti passati 
e restituiti devono avere certe caratteristiche? (implementare 
serializable???).
Più nel dettaglio: posso tranquillamente passare un oggetto String (con 
dentro una query) e farmi restituire un oggetto ResultSet? e Poi questo 
lo potrei leggere tranquillamente con i suoi metodi?
Un' ultima cosa: è possibile unire il contenuto di due oggetti ResultSet 
in uno unico? Devo interrogare 2 database distinti (ma con lo stesso 
schema) e vorrei ritornare un solo oggetto..c'è un modo di farlo?
Fabio

 Fabio
prova a pensare al meccanismo:
quando dal client richiami un metodo di un oggetto remoto avviene la 
seguente cosa:
ottieni un proxy locale, il proxy si occupa del marshalling/unmarshalling 
(serializzare/deserializzare) i parametri e valori di ritorno. Poi si 
richiama il modulo ci comunicazione nel client che implementa una certa 
semantica di invocazione con l'oggetto server...ma non importa...
Il punto e' che il proxy deve serializzare i parametri e deserializzare il 
valore di ritorno, quindi la rispota e' no.
ResultSet non e' serializzabile quindi la risposta e' ancora no.
String e' serializzabile quindi per essa la risposta e' si.
Allora potresti passare la stringa come parametro e far ritornare al metodo 
dell'oggetto remoto una lista di oggetti. Le liste in Java sono 
serializzabili quindi sei a posto.
Ho detto bene? 

 
Beh...bene è una parola grossa...Diciamo che mi fido! ;-)
Scusa l'ignoranza, ma sono proprio alle prime armi con java!
Fabio

> 
F> Ma perchè no? Neanche se creo un mio oggetto che implementa
F> Serializable e al suo interno ci schiaffo un oggetto ResultSet?
Non è che dichiarando  Serializable un un tipo oggetto automaticamente
diventano dei Serializable anche gli oggetti contenuti nelle istanze!
In quel caso l'implementazione di Serializable è fallace, perché ad un
certo punto la serializzazione dell'oggetto andrà male, e proprio sul
ResultSet.
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione

 
Ok, ci sono! Però come faccio a sapere quali sono gli oggetti 
serializzabili e quali no? bisogna ogni volta spulciare nella 
documentazione?

 ha scritto nel messaggio 
news:43d8afea$0$27407$4faf...@reader1.news.tin.it...

eh si...non e' complicato cmq...ti consiglio google con "ResultSet java api 
class" e solitamente trovi la classe come primo risultato!  ;) 

>
E' bene secondo me cercare di abbandonare il resultset quanto prima e 
passare alla lista di oggetti.
Non sto dicendo di non usare i result set, sto dicendo che quando comunichi 
con altri processi, o con altri strati della tua applicazione e' meglio 
cominciare ad astrarre, e una lista di User e' un'ottima astrazione di un 
ResutlSet.

C'e', tra le altre cose, un motivo specifico tale per cui il ResultSet
non e' serializzabile.
Fabio, prova a pensare a cosa fa il ResultSet (correggete per favore le
mie eventuali cappellate).
Stabilisci una connessione con il DB
Esegui una query e ti viene restituito ResultSet ovvero un cursore, un
puntatore che richiamato ti restituisce la riga corrente del database.
In realta' quindi non hai un oggetto java con tutte le informazioni,
bensi' un interfaccia tra la JVM e il DB che recupera il dato alla
posizione corrente e te lo restituisce.
Quindi non puoi serializzare il ResultSet, almeno non nel modo in cui
tu avresti voluto :-).
L'idea buona e' quella di usare una combinazione di List e Map (anche
se si puo' far di meglio) e paginare il risultato della query,
rilasciando ogni volta il ResultSet, in modo tale da aver sempre le
risorse disponibili e non occupare troppa memoria tutta insieme.
Saluti, Davide.

 ResultSet.
Solo per contestare Gian (e salutare), vecchio compagno di unipd :-) e per
fare il pignolo :->
Chi l'ha detto che un'istanza di java.sql.ResultSet e' non serializable e
che non puo' essere passata ad un metodo remoto???
java.sql.ResultSet è un'interfaccia... dipende se l'oggetto che implementa
la suddetta intf e' (propriamente) java.io.Serializable o meno (== soddisfa
le specifiche della serializzazione +, se serve, le specifiche per RMI).
Per questo vedere javax.sql (specifiche jdbc 3.0+) in particolare le
implementazioni dell'interfaccia javax.sql.RowSet (aka JavaBean like) in
javax.sql.rowset. In particolare javax.sql.rowset.BaseRowSet (che
implementa Serializable) e' pensata per la trasmissione remota.
Per il resto concordo sulle argomentazioni del resto del thread.
Ricordo quindi che tipicamente le implementazioni di ResultSet sono non
serializzabili perche', giustamente, contengono strutture dati che non
possono o meglio, non ha senso serializzare (vedi socket & co).
Scusate la pignoleria.
q'pla
        caius

 Scusate la pignoleria.
Giustissima invece, era sfuggito a tutti!