RMI minimal: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
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 Benutzung Verfügbar zu machen.
+
* RMI bedeutet '''Remote Method Invocation''' und dient dazu, auf einem Server implementierte Methoden Clients zur Verfügung zu stellen.
* Voraussetzung ist JDK 1.5. RMI funktioniert zwar auch mit älteren Java-Versionen, ist da aber sehr umständlich.
+
* 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 und starten.
+
* Danach Server und Client implementieren.
  
 
=Das Service-Interface=
 
=Das Service-Interface=

Version vom 3. Oktober 2016, 09:30 Uhr

Fragen stellen

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>