RMI minimal: Unterschied zwischen den Versionen
Aus Byte-Welt Wiki
Hoax (Diskussion | Beiträge) K return bei reverse-Implementierung hatte gefehlt. |
Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
[[Kategorie:Java]] | [[Kategorie:Java]] | ||
[[Kategorie:Tutorials (Java)]] | [[Kategorie:Tutorials (Java)]] | ||
[[Fragen stellen]] | |||
=Einführung und Grundlagen= | =Einführung und Grundlagen= | ||
* RMI bedeutet Remote Method Invocation und dient dazu, auf einem Server implementierte Methoden Clients zur | * RMI bedeutet '''Remote Method Invocation''' und dient dazu, auf einem Server implementierte Methoden 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. | ||
* Zuerst Service-Interface definieren. | * Zuerst Service-Interface definieren (von {{JAPI|java.rmi.Remote}} ableiten). | ||
* Danach Server implementieren | * Danach Server und Client implementieren. | ||
=Das Service-Interface= | =Das Service-Interface= | ||
Version vom 3. Oktober 2016, 09:30 Uhr
Einführung und Grundlagen
- RMI bedeutet Remote Method Invocation und dient dazu, auf einem Server implementierte Methoden 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.
- Zuerst Service-Interface definieren (von
java.rmi.Remoteableiten). - 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>
