|
Esaminiamo adesso il codice dell’applet che utilizza l’oggetto remoto:
package reverse;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.rmi.*;
public class ReverseClient
extends Applet
implements TextListener
{
Label text = new Label("");
TextField input = new TextField();
Reverse reverse = null;
public void init()
{
try {
reverse =
(Reverse)Naming
.lookup("//"+getDocumentBase()
.getHost()+"/reverse");
} catch(Exception e) {
e.printStackTrace();
add(new Label(e.getMessage()));
return;
}
setLayout(new BorderLayout());
add("North", text);
add("South", input);
input.addTextListener(this);
}
public void textValueChanged(TextEvent te)
{
try {
text.setText(reverse
.reverse(input.getText()));
} catch(Exception e) {
e.printStackTrace(); }
}
}
Trascurando i dettagli del funzionamento dell’applet, che non sono pertinenti
agli scopi dell’articolo (e poiché usano il nuovo modello ad eventi sono utilizzabili
solo in un browser completamente conforme al JDK 1.1), il punto significativo
è solo
Reverse reverse =
(Reverse)Naming
.lookup("//"+getDocumentBase()
.getHost()+"/reverse");
Ricordiamo che le applet possono aprire connessioni di rete soltanto all’host
da cui sono state scaricate, e questo spiega il getDocumentBase().getHost(),
che si aspetta di trovare il registry degli di oggetti remoti sullo stesso
host del Web Server. Dopodichè, utilizzando Naming.lookup(<rmi-url>)
viene localizzato l’oggetto remoto, il quale deve risiedere anche esso (per
i soliti limiti delle connessioni TCP) sulla stessa macchina del server. Infine
l’oggetto ritornato viene convertito nell’interfaccia che consente di usarlo.
Il resto è un semplice uso dell’oggetto, come se fosse un oggetto locale.
Non dobbiamo però dimenticare le implicazioni di efficienza legate alla copia
degli oggetti via serializzazione quando avviene l’invocazione.
|