RMI minimal: Unterschied zwischen den Versionen
Aus Byte-Welt Wiki
Tfa (Diskussion | Beiträge) Die Seite wurde neu angelegt: „Kategorie:Java Kategorie:Tutorials (Java) =Einführung und Grundlagen= * RMI bedeutet Remote Method Invocation und dient dazu, auf einem Server implemen…“ |
KKeine Bearbeitungszusammenfassung |
||
| (6 dazwischenliegende Versionen von 3 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 48: | Zeile 50: | ||
public String reverse(String input) { | public String reverse(String input) { | ||
StringBuilder sb = new StringBuilder(string); | StringBuilder sb = new StringBuilder(string); | ||
sb.reverse().toString(); | return sb.reverse().toString(); | ||
} | } | ||
| 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
Einführung und Grundlagen
[Bearbeiten | Quelltext bearbeiten]- 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.Remoteableiten). - Danach Server und Client implementieren.
Das Service-Interface
[Bearbeiten | Quelltext bearbeiten]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
[Bearbeiten | Quelltext bearbeiten]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
[Bearbeiten | Quelltext bearbeiten]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
[Bearbeiten | Quelltext bearbeiten]
Fragen
[Quelltext bearbeiten]Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!
- Besuche unseren Chat
Wir helfen dir gerne!
