14.4Auf der Client-Seite
Um entfernte Methoden zu nutzen, muss ein entferntes Objekt gesucht und angesprochen werden. Dazu fragen wir den Namensdienst. Der Name für das Objekt setzt sich aus der URL und dem Namen des Dienstes zusammen. Bei Port-Angaben dürfen wir nicht vergessen, diesen Namen wieder hinter einem Doppelpunkt anzugeben:
Listing 14.4com/tutego/insel/rmi/Client.java
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Client {
public static void main( String[] args ) throws RemoteException, NotBoundException {
Registry registry = LocateRegistry.getRegistry();
Adder adder = (Adder) registry.lookup( "Adder" );
System.out.println( adder.add( 47, 11 ) );
}
}
Damit ist das letzte Puzzlestück eingepasst und das RMI-Beispiel vollständig. LocateRegistry.getRegistry() kennen wir schon – das liefert uns die Registry. lookup(String) gibt zu einem Objektnamen das Stub-Objekt (daher ist der Rückgabetyp Remote), das in unserem Fall die Schnittstelle Adder implementiert. Ein lokaler Methodenaufruf unterscheidet sich auf den ersten Blick nicht mehr von einem entfernten! Bedenken wir an dieser Stelle, dass die Rückgabe von lookup(String) das Stellvertreter-Objekt ist. Eine Typumwandlung auf AdderImpl würde natürlich nicht funktionieren, denn der Typ existiert ja nur auf der Server- und nicht auf der Client-Seite.
extends Remote
Remote lookup(String name)
throws NotBoundException, MalformedURLException, RemoteException
Liefert eine Referenz auf den Stub, der mit dem entfernten Objekt name verbunden ist. Ist kein Dienst unter dem Namen verfügbar, kommt es zu einer NotBoundException. Ist der Namensdienst nicht erreichbar, folgt eine RemoteException. Eine MalformedURLException kann durch eine falsch gebildete URL ausgelöst werden.String[] list(String name)
Liefert ein Feld mit angemeldeten Diensten. Der angegebene Name gibt die URL des Namensdienstes an. Ist die URL falsch konstruiert, folgt eine MalformedURLException; ist die Registry nicht erreichbar, folgt eine RemoteException.