RMI minimal: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
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 Benutzung Verfügbar zu machen.
+
* RMI bedeutet '''Remote Method Invocation''' und dient dazu, auf einem [[Server]] implementierte [[Methode| Methoden,]] verbundenen [[Client|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.
+
 
* Danach Server implementieren und starten.
+
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=
<code=java>
+
<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;
 
}
 
}
</code=java>
+
</syntaxhighlight>
  
 
=Die Server-Klasse=
 
=Die Server-Klasse=
<code=java>
+
<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:
 
     }
 
     }
 
}
 
}
</code=java>
+
</syntaxhighlight>
  
 
=Der Client=
 
=Der Client=
  
<code=java>
+
<syntaxhighlight lang="java">
 
import java.rmi.Naming;
 
import java.rmi.Naming;
 
   
 
   
Zeile 84: Zeile 86:
 
     }
 
     }
 
}
 
}
</code=java>
+
</syntaxhighlight>
 +
 
 +
=Anwendungsbeispiel=
 +
*[[Java-Programm nur einmal starten]]
 +
 
 +
{{Fragen stellen}}

Aktuelle Version vom 9. März 2018, 18:44 Uhr


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!

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.