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

Salve NG,
ho un problema notevole di prestazioni in una applicazione che usa RMI.
Facendo delle prove su internet, ho constatato che alcune chiamate remote
impiegano tempi lunghissimi per essere eseguite, circa 45 secondi, durante
la maggior parte dei quali la "lucina" del modem rimane spenta. Altri metodi
remoti invece vengono eseguiti in modo pressochè istantaneo (ovvero frazioni
di secondo).
I metodi incriminati hanno come argomenti anche delle interfacce derivate da
Remote, e nella chiamata io gli passo come valore attuale un oggetto
derivato da UnicastRemoteObject che implementa quell'interfaccia (in realtà
è semplicemente "this"), per cui non si tratta di un oggetto da
serializzare.
Non ho avuto modo di fare moltissime prove ma non capisco il perchè di
questo comportamento...
Ho letto anche le faq su RMI della Sun ma non ho trovato nulla a riguardo
Qualcuno di voi può illuminarmi?
Precisazioni:
In locale tutto funziona bene, ed inoltre anche il codebase per il
ritrovamento degli stub è settato bene (almeno credo). Ma comunque credo che
se il problema fosse dovuto al fatto che è necessario il download dinamico
dello stub, il modem non rimarrebbe "addormentato", cosa che invece avviene.
Vi ringrazio...

 wrote in message
S0v56.252931$hk4.12...@news.infostrada.it...


 correttamente, pertanto....
Sě, ok, un ritardo č ovvio che vada messo in preventivo, ma francamente QUEL
ritardo č inaccettabile per quell'applicazione.... e soprattutto non capisco
il perchč altre chiamate remote (tra gli stessi oggetti) vengano eseguite in
modo istantaneo, mentre alcune sono lentissime...

 il perchè altre chiamate remote (tra gli stessi oggetti) vengano eseguite


 Scorpio
L'overhead di elaborazione non dovrebbe essere molto. Il metodo in questione
esegue questo:
- Crea un oggetto (che incorpora un thread all'interno e che viene avviato)
- Lo aggiunge ad una Hashtable
- Chiama un paio di metodi per aggiornare l'interfaccia grafica
Da notare che facendo girare tutto in locale tutto questo viene eseguito in
un tempo molto breve...
Sembra quasi che l'infrastruttura dell'RMI aspetti di eseguire la chiamata
per un certo tempo.
Non ho ancora provato a fare un 'implementazione a socket, ma credo che sia
proprio un problema di RMI. Comunque devo ancora fare dei test più
approfonditi... Voglio provare ad usare il log "incorporato" dei
RemoteServer per vedere se ci riesco a capire qualcosa di più.
Comunque ti ringrazio per la risposta, sei stato molto gentile.
Ciao

 wrote in message
omF56.254901$hk4.12...@news.infostrada.it...


 serializzare.
Se passi un Remote come parametro  questo ovviamente deve essere pronto a
ricevere chiamate in ingresso, infatti un UnicastRemoteObject deve
provvedere al listening su una certa porta TCP/IP. Forse la lentezza che
accusi e' dovuta al binding del server socket legato al Remote  che passi
come parametro. Per quanto riguarda il discorso della serializzazione ogni
oggetto passato come parametro deve essere serializzato da RMI (anche se
this), nel caso di un Remote sara serializzata un'istanza del suo stub. E'
anche possibile , ma qui tiro ad indovinare, che se passi un Remote come
argomento di una chiamata debba scattare in qualche modo anche il meccanismo
di Distributed Garbage Collector , e forse questo introduce un ulteriore
ritardo ...