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.) |
K |
||
(5 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 4: | Zeile 4: | ||
=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 [[Methode| Methoden,]] verbundenen [[Client|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. | + | |
− | * Danach Server implementieren | + | Die Vorgehensweise ist immer die Gleiche: |
+ | * Zuerst Service-Interface definieren (von {{JAPI|java.rmi.Remote}} ableiten). | ||
+ | * Danach Server und Client implementieren. | ||
=Das Service-Interface= | =Das Service-Interface= | ||
− | < | + | <syntaxhighlight lang="java"> |
import java.rmi.Remote; | import java.rmi.Remote; | ||
import java.rmi.RemoteException; | import java.rmi.RemoteException; | ||
Zeile 27: | Zeile 29: | ||
public String reverse(String input) throws RemoteException; | public String reverse(String input) throws RemoteException; | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
=Die Server-Klasse= | =Die Server-Klasse= | ||
− | < | + | <syntaxhighlight lang="java"> |
import java.rmi.RemoteException; | import java.rmi.RemoteException; | ||
import java.rmi.registry.LocateRegistry; | import java.rmi.registry.LocateRegistry; | ||
Zeile 61: | Zeile 63: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
=Der Client= | =Der Client= | ||
− | < | + | <syntaxhighlight lang="java"> |
import java.rmi.Naming; | import java.rmi.Naming; | ||
Zeile 84: | Zeile 86: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
+ | |||
+ | =Anwendungsbeispiel= | ||
+ | *[[Java-Programm nur einmal starten]] | ||
+ | |||
+ | {{Fragen stellen}} |
Aktuelle Version vom 9. März 2018, 18:44 Uhr
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
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;
}
Die Server-Klasse
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...");
}
}
Der Client
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);
}
}
Anwendungsbeispiel
Fragen
Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!
- Besuche uns im Byte-Welt-Forum
- Besuche unseren Chat
Wir helfen dir gerne!
Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!
Du musst angemeldet sein, um einen Kommentar abzugeben.