RMI minimal: Unterschied zwischen den Versionen
Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springenHoax (Diskussion | Beiträge) K (return bei reverse-Implementierung hatte gefehlt.) |
|||
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
Inhaltsverzeichnis
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.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>