RMI minimal
Aus Byte-Welt Wiki
Version vom 20. Februar 2017, 07:16 Uhr von L-ectron-X (Diskussion | Beiträge) (→Einführung und Grundlagen)
Inhaltsverzeichnis
Einführung und Grundlagen
- RMI bedeutet Remote Method Invocation und dient dazu, auf einem Server implementierte Methoden, verbundenen Clients zur Verfügung zu stellen.
- In älteren Java-Versionen war das Kompilieren von RMI-Programmen etwas umständlicher. Stub und Skeleton mussten jeweils mit eigenen Compilern (rmic und javac) übersetzt werden. Seit Java 5 ist javac in der Lage alles in einem Zug zu übersetzen.
Die Vorgehensweise ist immer die Gleiche:
- Zuerst Service-Interface definieren (von
java.rmi.Remote
ableiten). - Danach Server und Client implementieren.
Das Service-Interface
<code=java> import java.rmi.Remote; import java.rmi.RemoteException;
/**
* Das Service-Interface. * Hier definierte Methoden werden im Server implementiert * und können von Clients aufgerufen werden. * Alle Methoden müssen "throws RemoteException" deklarieren. */
public interface Service extends Remote {
/** * Dreht den übergebenen String um */ public String reverse(String input) throws RemoteException;
} </code=java>
Die Server-Klasse
<code=java> import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject;
/**
* Implementierung des Service auf Serverseite */
public class Server extends UnicastRemoteObject implements Service {
protected Server() throws RemoteException { super(); } /** Dreht den übergebenen String um */ public String reverse(String input) { StringBuilder sb = new StringBuilder(string); return sb.reverse().toString(); } public static void main(String... args) throws Exception { // RMI-Registry starten, Server erzeugen und an Registry binden // Standard-Port ist 1099 (Registry.REGISTRY_PORT) LocateRegistry.createRegistry(Registry.REGISTRY_PORT); Registry registry = LocateRegistry.getRegistry(Registry.REGISTRY_PORT); registry.rebind("PalindromService", new Server()); System.out.println("Server läuft..."); }
} </code=java>
Der Client
<code=java> import java.rmi.Naming;
/**
* Client-Klasse zum Aufruf des RMI-Service. */
public class Client {
public static void main(String... args) throws Exception { Service service = (Service) Naming.lookup("rmi://127.0.0.1/PalindromService"); String palindrom = "Geist ziert Leben, Mut hegt Siege, Beileid trägt belegbare Reue, " + "Neid dient nie, nun eint Neid die Neuerer, abgelebt gärt die Liebe, " + "Geist geht, umnebelt reizt Sieg."; String res = service.reverse(palindrom); System.out.println(res); }
} </code=java>